我正在使用以下代码行。但它似乎只是简单的,我很好奇,如果有一个优化替代以下......
if(mkey[65]){ //this is left! (a)
var nextpos = $("#item").x()-player.speed;
if(nextpos > 0){
$("#item").x(nextpos);
}
}
if(mkey[68]){ //this is right! (d)
var nextpos = $("#item").x()+player.speed;
if(nextpos < pg.width - 100){
$("#item").x(nextpos);
}
}
if(mkey[87]){ //this is up! (w)
var nextpos = $("#item").y()-player.speed;
if(nextpos > 0){
$("#item").y(nextpos);
}
}
if(mkey[83]){ //this is down! (s)
var nextpos = $("#item").y()+player.speed;
if(nextpos < pg.height - 30){
$("#item").y(nextpos);
}
}
我考虑过使用jquery的每个方法,但到目前为止它只花了我,因为我不知道你是否可以将自定义JavaScript函数存储到数据对象中......
感谢您的任何建议!
这是我试过的......(没有运气)
$.each([
{keypress: mkey[65], item:$("#item").x()-player.speed},
{keypress: mkey[68], item:$("#item").x()+player.speed},
{keypress: mkey[87], item:$("#item").y()-player.speed},
{keypress: mkey[83], item:$("#item").y()+player.speed}
], function(i, obj) {
if (obj.keypress) {
if(obj.item > 0) { $("#item").x(obj.item);}
}
});
答案 0 :(得分:2)
在JavaScript中,函数是一个对象,所以这不是问题。问题是你是否使用一个代码来保存任何代码行,即使你这样做,它是否可以维护。这是一个可能的解决方案:
$.each([
{ which: 65, fn: $('#item').x, plus: -player.speed, comparison: 'gt', what: 0 },
{ which: 68, fn: $('#item').x, plus: player.speed, comparison: 'lt', what: pg.width - 30),
{ which: 87, fn: $('#item').y, plus: -player.speed, comparison: 'gt', what: 0 },
{ which: 83, fn: $('#item').y, plus: player.speed, comparison: 'lt', what: pg.height - 30)
], function () {
var o = this,
w = mkey[o.which],
nextpos = o.fn() + o.plus;
if ((o.comparison === 'gt' && nextpos > o.what) ||
(o.comparison === 'lt' && nextpos < o.what)) {
o.fn(nextpos);
}
});
我没有测试过这个或任何东西(提供jsFiddle或jsBin代码,我可以),但希望你能看到我的目标。同样,不确定这实际上是否有帮助,因为此代码的可读性远低于原始代码。通过缩小,原始代码将比此代码运行得更快。祝你好运。
答案 1 :(得分:1)
在keycode上使用switch语句。
还有哪些,但我不是它的粉丝: http://api.jquery.com/event.which/
切换声明
switch($keycode){
case 43:
// Your code or function_name();
break;
case 99:
// Your code or function_name();
break;
}