使用一个函数在 javascript 中按下多个键时绑定一个函数
Bind a function to when mutiple keys are pressed in javascript using one function
正在浏览一些关键事件 javascript 库,发现 this one 我认为很漂亮 cool.Basically,使用它你可以做类似这样的事情:
function bindFunctionToKeydownEvents(keys, callback) {
// code here
}
其中的键可能只是一个键:"k", "(", or "="
,
组合键:"ctrl+k" or "shift+ctrl+k"
,
或序列(输入字母 g 然后在 3 秒内输入另一个字母 o 类似 gmail 样式)g o
做某事
然后回调将是一个函数。function(){alert("hi");foo();bar();}
有没有一种方法可以在一个 javascript 函数中执行此操作,因为我不想添加该库?
我真的希望它能够支持多个回调,例如能够运行:
bindFunctionToKeydownEvents("ctrl+k", function(){alert("hi")});
然后做
bindFunctionToKeydownEvents("ctrl+shift+k", function(){alert("hello")});
并在按下 ctrl+shift+k 时让它执行这两项操作。
我对 javascript 和按键事件还很陌生,所以如果你能解释一下代码那就太好了。
即使只是想向我展示如何执行我请求的语法的一部分,那也很好。
您可以使用 keypress 执行此操作,因为只有在 keypress 中您才能通过字符更改 keyCode:
var keypress = {};
function bindFunctionToKeypressEvents(keys, callback) {
keys = keys.toLowerCase();
keypress[keys] = keypress[keys] || [];
keypress[keys].push(callback);
}
document.addEventListener('keypress', function(e) {
var str = '';
if (e.shiftKey) {
str += 'shift+';
}
if (e.ctrlKey) {
str += 'ctrl+';
}
str += String.fromCharCode(e.charCode).toLowerCase();
if (keypress[str] && keypress[str].length) {
keypress[str].forEach(function(fn) {
fn();
});
}
}, true);
bindFunctionToKeypressEvents('shift+l', function() {
alert('shift+l');
});
只有当班次是第一个班次时才有效。
正在浏览一些关键事件 javascript 库,发现 this one 我认为很漂亮 cool.Basically,使用它你可以做类似这样的事情:
function bindFunctionToKeydownEvents(keys, callback) {
// code here
}
其中的键可能只是一个键:"k", "(", or "="
,
组合键:"ctrl+k" or "shift+ctrl+k"
,
或序列(输入字母 g 然后在 3 秒内输入另一个字母 o 类似 gmail 样式)g o
做某事
然后回调将是一个函数。function(){alert("hi");foo();bar();}
有没有一种方法可以在一个 javascript 函数中执行此操作,因为我不想添加该库?
我真的希望它能够支持多个回调,例如能够运行:
bindFunctionToKeydownEvents("ctrl+k", function(){alert("hi")});
然后做
bindFunctionToKeydownEvents("ctrl+shift+k", function(){alert("hello")});
并在按下 ctrl+shift+k 时让它执行这两项操作。
我对 javascript 和按键事件还很陌生,所以如果你能解释一下代码那就太好了。
即使只是想向我展示如何执行我请求的语法的一部分,那也很好。
您可以使用 keypress 执行此操作,因为只有在 keypress 中您才能通过字符更改 keyCode:
var keypress = {};
function bindFunctionToKeypressEvents(keys, callback) {
keys = keys.toLowerCase();
keypress[keys] = keypress[keys] || [];
keypress[keys].push(callback);
}
document.addEventListener('keypress', function(e) {
var str = '';
if (e.shiftKey) {
str += 'shift+';
}
if (e.ctrlKey) {
str += 'ctrl+';
}
str += String.fromCharCode(e.charCode).toLowerCase();
if (keypress[str] && keypress[str].length) {
keypress[str].forEach(function(fn) {
fn();
});
}
}, true);
bindFunctionToKeypressEvents('shift+l', function() {
alert('shift+l');
});
只有当班次是第一个班次时才有效。