我有一個HTML頁面,粗略地將30%-70%劃分爲兩個垂直列。左欄包含一個聊天源(通過Node和Socket.io處理),右列包含一個emscripten生成的canvas
(ID爲canvas
)。畫布包含一個基本的3D世界,用戶可以使用標準的第一人稱控件(WASD移動,鼠標移動到「外觀」)進行導航。Emscripten canvas + jQuery - 切換焦點
默認情況下,畫布吞下所有鍵盤事件。我與畫布初始化過程在下面的代碼解決了這個問題:
Module.preRun.push(function() {
ENV.SDL_EMSCRIPTEN_KEYBOARD_ELEMENT = "#canvas";
});
這讓我手動對焦聊天框中,鍵入消息,並提交。
我遇到的問題是,一旦聊天消息已提交,我試着用下面的代碼焦點返回到畫布(允許玩家使用導航WASD 3D世界):
$('#canvas').focus();
名義上將焦點返回到畫布,但鼠標和鍵盤移動不起作用。奇怪的是,單擊標籤頁/瀏覽器窗口,然後進入畫布似乎工作 - 焦點返回到畫布,我可以再次導航。手動撥打$(window).blur().focus()
並不能解決問題。
有沒有人知道如何強制回到畫布一旦聊天消息已發送?
- 更新 -
我在畫布背後添加了一個文本輸入框(與hiddenField
的ID)和我正在使用預電泳功能分配關鍵事件爲畫布到字段(由於某種原因,畫布不能始終如一地工作)。例如,在聊天字段 - -
這直到用戶點擊了畫布工作正常於是畫布停止響應任何鍵盤或鼠標輸入,即使我觸發聚焦放回hiddenField
(和可以看到它得到它)。
看起來這個頁面上的任何東西與emscripten的聚焦行爲(我認爲綁定到窗口對象)衝突,並阻止畫布重新獲得焦點。
肯定有一些方法可以讓emscripten畫布與其他HTML元素一起生活嗎?