另一种写代码的方法
Another method of writing code
我写代码给JavaScript。按下时我需要处理多个键。这样一段代码的结果。
var key = event.keyCode;
if (key === 39 {
//some code
}
if (key === 40) {
//some code
}
if (key === 38) {
//some code
}
if (key === 13) {
//some code
}
我不喜欢这个方法,有没有别的漂亮的方法?面向对象编程的风格?谢谢
A switch: switch语句用于根据不同的条件执行不同的动作。
switch(event.keyCode) {
case 39:
code block
break;
case 40:
code block
break;
default:
code block
}
JavaScript 本身不是面向对象的语言。
你可以做的是制作一个映射对象。
const obj = {
"39" : () => { //do this },
"40" : () => { //do this },
"38" : () => { //do this },
"13" : () => { //do this }
}
然后,当您的事件代码出现时...使用 const whatever = obj[event.keyCode]();
我也相信某种形式的解构可以使它更漂亮,但我必须温习一下。
可能需要做很多工作,但这是带有键名并支持组合键的:
var keyboardEvents = {};
var keys = {};
document.addEventListener('keydown',function(e){
keys[ e.key.toLowerCase() ] = true;
for(var s in keyboardEvents){
var p = s.split('+').map(function(k){return k.toLowerCase()});
var f = true;
for(var i=0;i<p.length;i++) if(!keys[ p[i] ]) f = false;
if(f) keyboardEvents[s](e);
}
});
document.addEventListener('keyup',function(e){
delete keys[ e.key.toLowerCase() ];
});
用法是这样的:
keyboardEvents['control+c'] = function(e){ ... };
keyboardEvents['alt+c+b+k'] = function(e){ ... };
我写代码给JavaScript。按下时我需要处理多个键。这样一段代码的结果。
var key = event.keyCode;
if (key === 39 {
//some code
}
if (key === 40) {
//some code
}
if (key === 38) {
//some code
}
if (key === 13) {
//some code
}
我不喜欢这个方法,有没有别的漂亮的方法?面向对象编程的风格?谢谢
A switch: switch语句用于根据不同的条件执行不同的动作。
switch(event.keyCode) {
case 39:
code block
break;
case 40:
code block
break;
default:
code block
}
JavaScript 本身不是面向对象的语言。
你可以做的是制作一个映射对象。
const obj = {
"39" : () => { //do this },
"40" : () => { //do this },
"38" : () => { //do this },
"13" : () => { //do this }
}
然后,当您的事件代码出现时...使用 const whatever = obj[event.keyCode]();
我也相信某种形式的解构可以使它更漂亮,但我必须温习一下。
可能需要做很多工作,但这是带有键名并支持组合键的:
var keyboardEvents = {};
var keys = {};
document.addEventListener('keydown',function(e){
keys[ e.key.toLowerCase() ] = true;
for(var s in keyboardEvents){
var p = s.split('+').map(function(k){return k.toLowerCase()});
var f = true;
for(var i=0;i<p.length;i++) if(!keys[ p[i] ]) f = false;
if(f) keyboardEvents[s](e);
}
});
document.addEventListener('keyup',function(e){
delete keys[ e.key.toLowerCase() ];
});
用法是这样的:
keyboardEvents['control+c'] = function(e){ ... };
keyboardEvents['alt+c+b+k'] = function(e){ ... };