是否可以限制setInterval在javascript中触发的时间?
Answers:
您可以clearInterval()在x次通话后致电:
var x = 0;
var intervalID = setInterval(function () {
// Your logic here
if (++x === 5) {
window.clearInterval(intervalID);
}
}, 1000);
为了避免全局变量,对上述内容的改进将是:
function setIntervalX(callback, delay, repetitions) {
var x = 0;
var intervalID = window.setInterval(function () {
callback();
if (++x === repetitions) {
window.clearInterval(intervalID);
}
}, delay);
}
然后,您可以setInvervalX()按以下方式调用新函数:
// This will be repeated 5 times with 1 second intervals:
setIntervalX(function () {
// Your logic here
}, 1000, 5);
clearInterval根据需要多次输入回调,并使它响应您喜欢的任何逻辑。无需返回布尔值即可达到相同的结果。
您可以设置一个调用超时clearInterval。这应该工作:
function setTimedInterval(callback, delay, timeout){
var id=window.setInterval(callback, delay);
window.setTimeout(function(){
window.clearInterval(id);
}, timeout);
}
我个人更喜欢使用setTimeout()间隔来达到相同的效果
// Set a function to run every "interval" seconds a total of "x" times
var x = 10;
var interval = 1000;
for (var i = 0; i < x; i++) {
setTimeout(function () {
// Do Something
}, i * interval)
}
不需要清理 clearInterval()
您可以将其围起来以避免变量泄漏,并且看起来很干净:)
// Definition
function setIntervalLimited(callback, interval, x) {
for (var i = 0; i < x; i++) {
setTimeout(callback, i * interval);
}
}
// Usage
setIntervalLimited(function() {
console.log('hit'); // => hit...hit...etc (every second, stops after 10)
}, 1000, 10)
这将清除10次通话后的间隔
<html>
<body>
<input type="text" id="clock" />
<script language=javascript>
var numOfCalls = 0;
var int=self.setInterval("clock()",1000);
function clock()
{
var d=new Date();
var t=d.toLocaleTimeString();
document.getElementById("clock").value=t;
numOfCalls++;
if(numOfCalls == 10)
window.clearInterval(int);
}
</script>
</form>
</body>
</html>
对于那些更喜欢setTimeout和热爱递归的人,这是我的建议;)
const setIntervalX = (fn, delay, times) => {
if(!times) return
setTimeout(() => {
fn()
setIntervalX(fn, delay, times-1)
}, delay)
}
然后根据建议,您可以setInvervalX()按以下方式调用新函数:
// This will be repeated every for 5 times with 1 second intervals:
setIntervalX(function () {
// Your logic here
}, 1000, 5);
我制作了一个小包,用于NodeJS。
https://www.npmjs.com/package/count-interval
它是setInterval(包括参数传递)的直接替代品,但是它需要一个附加count参数。本示例每秒打印一条消息,但仅打印3次。
const countInterval = require('./countInterval');
const timer = countInterval(() => {
console.log('fired!', new Date());
}, 1000, 3);