Mam stronę HTML z grubsza podzielone 30% - 70% na dwie pionowe kolumny. W lewej kolumnie znajduje się kanał czatu (obsługiwany przez węzły i Socket.io), a prawa kolumna zawiera wygenerowany emscripten canvas
(z identyfikatorem canvas
). Płótno zawiera podstawowy świat 3D, w którym użytkownik może nawigować za pomocą standardowych elementów sterujących pierwszej osoby (WASD dla ruchu, mysz dla "wyglądu").Emscripten canvas + jQuery - przełączanie ostrości
Domyślnie płótno pochłania wszystkie zdarzenia na klawiaturze. Naprawiłem to z następującego kodu w procedurze płótno inicjalizacji:
Module.preRun.push(function() {
ENV.SDL_EMSCRIPTEN_KEYBOARD_ELEMENT = "#canvas";
});
To pozwala mi skupić się ręcznie w oknie czatu, wpisać wiadomość i wysłać.
Kwestia biegnę na to, że gdy wiadomość czat został złożony, staram i powrotu ostrości na płótnie z następującego kodu (aby umożliwić graczom poruszanie się po świecie 3D z WASD):
$('#canvas').focus();
Powoduje nominalnie powrót do obrazu, ale ruch myszy i klawiatury nie działa. Co dziwne, kliknięcie okna zakładki/przeglądarki, a następnie na płótno, wydaje się działać - ostrość jest zwracana do obszaru roboczego i mogę nawigować jeszcze raz. Ręczne wywoływanie $(window).blur().focus()
nie działa.
Czy ktoś wie, jak zmusić fokus do powrotu do obszaru roboczego po wysłaniu wiadomości na czacie?
- AKTUALIZACJA -
Dodałem pole wprowadzania tekstu (z ID hiddenField
) za płótno i używam funkcji wstępnej pracy przypisać kluczowe wydarzenia na płótnie, które pole (płótno nie działało konsekwentnie z jakiegoś powodu).
Działa to dobrze aż użytkownik kliknie poza płótno - na przykład w polu czatu - czym płótno przestaje reagować na jakiekolwiek wejścia klawiatury lub myszki, chociaż ja wyzwalanie ostrość z powrotem na hiddenField
(i widać, że to robi).
Wygląda na to, że wykonanie niczego na stronie jest w konflikcie z zachowaniem skupiającym emscriptena (powiązanym z obiektem okna, jak sądzę) i zapobiega przywróceniu przez płótno ostrości.
Z pewnością istnieje sposób na zachowanie płótna emscripten, aby mógł łączyć się z innymi elementami HTML?