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

注: 一部の人々は、ネイティブ型のプロトタイプを定義することは危険であると考えています。これは、2 つのライブラリが同じことを行うと競合が発生する可能性があるためです (グローバル変数のように)。したがって、公開ライブラリを作成している場合は、ネイティブ型のプロトタイプへの追加を避ける必要があります。

于 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

「近い」のもう 1 つの一般的な定義は、差の 2 乗に基づいています。ただし、次のように元の配列に必要な数値を追加するだけでそれを行うことができます。

[10,40,50, my_number]

次に、配列を並べ替えてから、右または左から最も近い位置が必要かどうかを選択します。

どう思いますか?

于 2012-04-05T00:23:19.013 に答える