如何用jquery压缩代码行?

时间:2012-08-22 19:04:56

标签: jquery

我正在使用以下代码行。但它似乎只是简单的,我很好奇,如果有一个优化替代以下......

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);}
  }

});

2 个答案:

答案 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);
    }
});

我没有测试过这个或任何东西(提供jsFiddlejsBin代码,我可以),但希望你能看到我的目标。同样,不确定这实际上是否有帮助,因为此代码的可读性远低于原始代码。通过缩小,原始代码将比此代码运行得更快。祝你好运。

答案 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;
}