做的图像旋转的效果,但是连续点击,图像就混乱啦,所以想限制点击事件的频率或者是不允许连续点击
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>throttle</title>
</head>
<body>
<div id='demo' style='height:100px;width:200px;border:1px solid #ff0'></div>
<button id='btn'>按钮</button>
<script>
var COUNT = 0,
demo = document.getElementById('demo');
function testFn() {
demo.innerHTML += 'testFN 被调用了 ' + ++COUNT + '次<br>';
}
var throttle = function(fn, delay, atleast) {
var timer = null;
var previous = null;
return function() {
var now = +new Date();
if (!previous) previous = now;
if (atleast && now - previous > atleast) {
fn();
// 重置上一次开始时间为本次结束时间
previous = now;
clearTimeout(timer);
} else {
clearTimeout(timer);
timer = setTimeout(function() {
fn();
previous = null;
}, delay);
}
}
};
document.getElementById('btn').onclick = throttle(testFn, 500, 1000);
</script>
</body>
</html>
8 回答5.1k 阅读✓ 已解决
6 回答3.9k 阅读✓ 已解决
5 回答3.1k 阅读✓ 已解决
9 回答3k 阅读
5 回答6.7k 阅读✓ 已解决
4 回答2.4k 阅读✓ 已解决
3 回答1.5k 阅读✓ 已解决
Underscore 中有个方法:
_.throttle
就是做这件事情的。你可以直接用它或者参考一下它的实现。写了一个简易版的,大概是这样:
思想就是将一个函数包装成一个新函数,新函数内置一个计时器,用来控制原函数的调用频率。