javascript - 随指数时间递减的 Setinterval

标签 javascript jquery settimeout setinterval exponential

我有一个设置间隔的 mousedown 事件。我希望间隔时间可变。所以第一个是 500,第二个是 500/2 = 250,等等。有什么提示吗?

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

干杯!

编辑:对于歧义,我们深表歉意。我希望间隔时间在鼠标按下期间发生变化。因此,在执行 mousedown 时,间隔时间应该改变。因此,不是每次单击鼠标,而是每次连续单击,然后再次重置。

最佳答案

你不能用 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;
});

关于javascript - 随指数时间递减的 Setinterval,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14969657/

相关文章:

javascript - 增加一个 div 数据值,然后在 coffeescript 中再次设置它

javascript - NodeJS 在正确的时间获取变量的问题 [npm like module]

javascript - nodemailer sendMail 回调函数从未运行

jQuery:减少触发 mousemove 事件的频率

Javascript、Promises 和 setTimeout

javascript - 为显示的 webview 添加底部边框

jquery - 出现对话框时如何禁用背景

jquery - 如何在 Codeigniter 中使用 ajax、jQuery 裁剪图像?

Jquery在网页完整可见文本上使用正则表达式提取文本

javascript - 如何在更改选项卡(焦点)时暂停递归 setTimeout