0

我正在修改 jquery ui 滑块。我希望用户能够滑动到某些“停止点”,以滑块总宽度的百分比表示。因此,例如,如果我有 3 个停靠点,它们将均匀分布在 0、50 和 100 (%) 处。我将这些存储在数组 [0,50,100] 中。

当用户拖动滑块并释放时,我捕获滑块的当前值。因此,如果他滚动了 56% 的横条,他的 stopVal 为 56。

如何编写一个函数来确定这个 stopVal 最接近数组中的哪个数字?这是我的代码:

var optValArr = [0,50,100];

function slideStop( event, ui ) {
    var stopVal = ui.value;
    //NOW NEED TO FIND CLOSEST ARRAY VALUE TO stopVal   
}
4

4 回答 4

4

这个功能可以让你做到这一点:

Array.prototype.closest = function(value) {
   var i;

   function diff(n) {
      var diff = n - value;

      return diff < 0 ? -diff : diff;
   }

   var found = this[0],
       mindiff = diff(found);

   for (i = 1 ; i < this.length ; i++) {
      var currentdiff = diff(this[i]);

      if (currentdiff < mindiff) {
          found = this[i];
          mindiff = diff(found);
      }
   }

  return found;
}

现在你可以这样做:

var optValArr = [0,50,100];

function slideStop( event, ui ) {
    var stopVal = ui.value;
    //NOW NEED TO FIND CLOSEST ARRAY VALUE TO stopVal 


   stopVal = optValArr.closest(stopVal);
}

注意:有些人认为为本地类型定义原型很危险,因为如果两个库做同样的事情(就像全局变量一样),它可能会导致冲突。因此,如果您正在编写公共库,则应避免添加到本机类型的原型中。

于 2012-04-05T00:18:43.477 回答
3

试试这个:

var optValArr = [0,50,100];

function slideStop( event, ui ) {
    var stopVal = ui.value;
    var diff=101;
    var val =0;

    for(var i =0; i < optValArr.length; i++){
        var tmpDiff = Math.abs(stopVal - optValArr[i]);
        if(tmpDiff < diff){
           diff=tmpDiff;
           val = optValArr[i]
        }
    }             
}
slideStop("something", {"value":20});

演示:http: //jsfiddle.net/ggzZj/

于 2012-04-05T00:17:40.577 回答
1
var optValArr = [0,50,100];

function slideStop( event, ui ) {
    var stopVal = ui.value;
    var closestVal = optValArr.reduce(function (memo, curr) {
        var currDiff = Math.abs(curr - stopVal),
            memoDiff = Math.abs(memo - stopVal)

        return memoDiff < currDiff ? memoDiff : currDif
    }) 
}
于 2012-04-05T00:28:50.213 回答
0

“更接近”的另一个常见定义是基于差异的平方。但是,您可以通过简单地在原始数组中添加所需的数字来做到这一点,如下所示:

[10,40,50, my_number]

然后,对数组进行排序,然后选择要从右侧还是左侧最接近的位置。

你怎么看?

于 2012-04-05T00:23:19.013 回答