5

setinterval で mousedown イベントがあります。間隔の時間を可変にしたい。最初のものは 500、2 番目のものは 500/2 = 250 などです。ヒントはありますか?

$plus.mousedown(function(e) {
    increment(20)
    timeout = setInterval(function(){
        increment(20)
    }, 500);
});
$(document).mouseup(function(){
    clearInterval(timeout);
    return false;
});

乾杯!

編集:あいまいで申し訳ありません。マウスダウン中に間隔の時間を変更したい。したがって、マウスダウンが実行されている間、intervaltime が変化するはずです。したがって、マウスを1回クリックするたびにではなく、連続してクリックするたびに、もう一度リセットしてください。

4

2 に答える 2

7

遅延の変更をクリアし続けない限り、実際にはこれを行うことはできないので、同様のことを達成するsetInterval()ためにラッパーを書くこともできます:setTimeout()

function easingTimeout(delay, fn)
{
  var id,
  invoker = function() {
    fn();
    delay = Math.floor(delay / 2);
    if (delay) {
      id = setTimeout(invoker, delay);
    } else {
      id = null;
    }
  }

  // start it off
  id = setTimeout(invoker, delay);

  return {
    clear: function() {
      if (id) {
        clearTimeout(id);
        id = null;
      }
    }
}

使用するには:

var timeout;

$plus.mousedown(function(e) {
    increment(20);
    timeout = easingTimeout(500, function() {
        increment(20);
    });
});

$(document).mouseup(function(){
    timeout.clear();
    return false;
});
于 2013-02-19T23:47:12.480 に答える
1

このソリューションは jQuery に依存しません。

var timeoutInterval = 500;
var mousedown = false;

function incrementAndWait() {
  if (!mousedown) return;
  increment(20);
  timeout = setTimeout(incrementAndWait, timeoutInterval);
  timeoutInterval /= 2;
}

document.onmousedown = function() {
  timeoutInterval = 500; // Reset to 500 to allow multiple mousedown/mouseup
  mousedown = true;
  incrementAndWait();
};

document.onmouseup = function() {
  mousedown = false;
}

console.log((new Date).getTime(), 20);コンソールに表示される数値を確認するには、incrementAndWait メソッドに追加します。遊ぶのが楽しいもの:)

于 2013-02-20T00:00:10.637 に答える