私は、Webページにアクセスするすべての人に同じように見え、ユーザー間で同期する共同の壁を構築しようとしています。キャンバスに適用するためにキーボード入力を正しくキャプチャするのに苦労しています。私の関数はdocument.onkeydownに基づいており、上記のWebページで参照されている「script.js」で確認できます。単語をダブルクリックして書き込むと、機能していることがわかります。
残念ながら、これは大文字以外のものをキャプチャできないようです。私はこれを実行する別の方法を探しています。このページで説明されている「textInput」イベントを調べましたが、WebKitブラウザーでのみサポートされているようで、一般的に機能するものを構築したいと思います。誰かがキャンバスで使用するためのキーボード入力をキャプチャするための別の方法を提案できますか?それとも私は愚かなことをしているのでしょうか?
説明されているコードは次のとおりです。
document.onkeydown = keyHandler;
function keyHandler(e)
{
var pressedKey;
if (document.all) { e = window.event;
pressedKey = e.keyCode; }
if (e.which) {
pressedKey = e.which;
}
if (pressedKey == 8) {
e.cancelBubble = true; // cancel goto history[-1] in chrome
e.returnValue = false;
}
if (pressedKey == 27)
{
// escape key was pressed
keyCaptureEdit = null;
}
if (pressedKey != null && keyCaptureEdit != null)
{
keyCaptureEdit.callback(pressedKey);
}
}
... Later on in code describing each text object ...
keyCaptureEdit.callback = function (keyCode) {
var keyCaptured = String.fromCharCode(keyCode);
if (keyCaptured == "\b" ) { //backspace character
t.attrs.timestamp = t.attrs.timestamp + 1;
t.setText(t.getText().slice(0, -1));
}
else if (keyCode == 32 || keyCode >= 48 && keyCode <= 57 || keyCode >= 65 && keyCode <= 90)
{
t.attrs.timestamp = t.attrs.timestamp + 1;
t.setText(t.getText() + keyCaptured);
}
layer.draw();
}