我有一个带有setinterval的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期间改变间隔的时间。因此,在执行mousedown时,间隔时间应该改变。因此,不是每次单击鼠标,而是每次连续点击,然后再次重置。答案 0 :(得分:5)
除非你继续清除延迟更改,否则你不能用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;
});
答案 1 :(得分: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方法,以查看控制台上的数字。有趣的事情:)