Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/467.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
缩短javascript Jquery代码_Javascript_Jquery - Fatal编程技术网

缩短javascript Jquery代码

缩短javascript Jquery代码,javascript,jquery,Javascript,Jquery,我想知道是否有办法缩短下面的代码。我已经展示了前5个if语句。当我完成时,我总共会有10个 编辑:忘记了鼠标移动部分 $("#bar").mousemove(function(e){ var vb = $(this); if(e.pageX <=467 && e.pageX > 457){ vb.attr("src","images2/vb10.png"); vol =10;

我想知道是否有办法缩短下面的代码。我已经展示了前5个if语句。当我完成时,我总共会有10个

编辑:忘记了鼠标移动部分

$("#bar").mousemove(function(e){
    var vb = $(this);
           if(e.pageX <=467 &&  e.pageX > 457){
            vb.attr("src","images2/vb10.png");
            vol =10;
          }
          if(e.pageX <=457 && e.pageX > 447){
            vb.attr("src","images2/vb9.png");
            vol=9;
          }
          if(e.pageX <=447 && e.pageX > 437){
            vb.attr("src","images2/vb8.png");
            vol=8;
          }
          if(e.pageX <=437 && e.pageX > 427){
            vb.attr("src","images2/vb7.png");
            vol=7;
          }
          if(e.pageX <=427 && e.pageX > 417){
            vb.attr("src","images2/vb6.png");
            vol=6
          }
});

谢谢

您可能可以使用算术来简化代码。e.pageX上的除法应该允许您导出索引

$("#bar").mousemove(function(e){
    var vol = Math.min( Math.ceil( (e.pageX - 7) / 10 ) - 36, 10 );
    $(this).attr("src","images2/vb"+vol+".png");
});

“数学库”包含一些优化的浏览器函数,可帮助您处理数字。第一个语句取x坐标,减去7,再除以10,将467变成46,457变成45,458变成45.1。Math.ciel将其四舍五入,将458变为46。然后我们减去36得到10,并将上述计算结果中较小的一个和数字10指定为最大的数字。我们可以使用vol来生成图像字符串。

下面是缩短的代码。不确定你真正的代码是做什么的,但这适合你发布的内容。我希望这对你来说是不言自明的

$('#bar').mousemove(function (e) { 
    $(this).attr("src", "image2/vb" + (vol = (e.pageX-367)/10|0) + ".png");
});
var vb = $(this),
    max = 467,
    frequency = 10, // difference between (467, 458), (457, 448) and so on...(your if conditions)
    maxVol = 10;

/* Find the range in which e.pageX falls. This will return, for example, if e.pageX was 460, then pageXband is 0.
 * If e.pageX is 437, then pageXband is 4 and so on.
 */
var pageXband = parseInt((max - e.pageX) / frequency); 

vol = maxVol - pageXband; // 'vol' is the difference between maxVol and pageXband.
vb.attr("src","images2/vb"+vol+".png");

你已经有好几个很好的答案说明了如何使用算术,但考虑到一种假设情况,即每种情况下的范围都不同,因此不适合于一个方便的公式,您仍然可以缩短代码,因为您在每种情况下设置的两个值直接相关,尽管不清楚您使用vol的目的:只需在每个分支中设置vol,然后在最终使用时设置vol该选项用于设置图像源。此外,虽然它不会使代码更短,但是如果不需要计算每个条件,则应该使用else

$("#bar").mousemove(function(e){
    var vol;
    if (e.pageX <=467 && e.pageX > 457)
       vol=10;
    else if (e.pageX <=457 && e.pageX > 447)
       vol=9;
    else if (e.pageX <=447 && e.pageX > 437)
       vol=8;
    // etc

    $(this).attr("src","images2/vb" + vol + ".png");
});
说到不计算每个条件,如果范围是连续的,则不需要每次都测试上限和下限:

$("#bar").mousemove(function(e){
    var vol;
    if (e.pageX > 467 || e.pageX < someMinimumValue)
       return; // or set default vol = ?
    else if (e.pageX > 457)
       vol=10;
    else if (e.pageX > 447)
       vol=9;
    else if (e.pageX > 437)
       vol=8;
    // etc

    $(this).attr("src","images2/vb" + vol + ".png");
});

它适用于定期和ir定期

$("#bar").mousemove(function(e){
    var vol = decide(e.pageX);
    $(this).attr("src","images2/vb" + vol + ".png");

});

function decide (val1) {
    switch (true) {
         case val1 >= 457 && val1 <= 467 : return 10;
         case val1 >= 447 && val1 <= 457 : return 9;
         case val1 >= 437 && val1 <= 447 : return 8;
         case val1 >= 427 && val1 <= 437 : return 7;
         case val1 >= 417 && val1 <= 427 : return 6;
         default : return 0;
    }
}

脚本的作用是什么?如果看起来特定于页面更改或加载时。你可以检查一下开关,但这需要很多检查。为什么每10像素就需要一次?我不知道如何缩短,但如果需要的话,你一定要用其他的。谢谢。我也很感激:你可以用:$bar.mousemovefunctiona{var b=Math.ceila.pageX-7/10-36;$this.attrsrc,images2/vb+b+.png}来进一步缩短它:我尝试过添加它,提醒12。图像仅为1到10。将min添加到vol计算中。效果非常好。这是一些漂亮的代码。你可以添加一些注释来解释它是如何工作的吗?你不需要在返回语句之后再添加break语句。是的,你是对的。但是,在switch case中使用break是一种很好的做法。标准做法是,对于有返回的case,不包含冗余break语句,尤其是在每个case都有返回的情况下。