JavaScript-延迟一组setTimeout活动
JavaScript - delay a set of setTimeout activities
我有一组对象要使用JavaScript中的setTimeout()函数在不同时间显示。我所做的是运行一个循环,为每个元素初始化一个setTimeout事件。
我用来为每个元素设置Timeout的代码:
for (i = currentIndex; i < this.items.length; i++) {
var object = "element#"+i;
var delay = 10*i;
this.keepDelay[id] = new Timer(function() {
$("#objectSet").css("display", "none").html(object).fadeIn("fast");
currentIndex = id;
}, delay);
}
Timer类是
function Timer(callback, delay) {
var timerId, start, remaining = delay;
// works
this.pause = function() {
window.clearTimeout(timerId);
remaining -= new Date() - start;
};
// works
this.resume = function() {
start = new Date();
id = currentIndex;
timerId = window.setTimeout(callback, remaining);
};
// does NOT work
this.speedup = function() {
remaining -= 100;
window.clearTimeout(timerId);
timerId = window.setTimeout(callback, remaining);
}
// does NOT work
this.slowdown = function() {
remaining += 100;
window.clearTimeout(timerId);
timerId = window.setTimeout(callback, remaining);
}
this.resume();
}
resume()
和pause()
方法确实有效。CCD_ 3尝试根据延迟值一个接一个地显示每个对象。pause()
是不言自明的。这两个工作得很好。
现在我想加快和减缓对象的延迟,我试着写speedup()和slowdown()方法,但不知何故它们不起作用。
看着代码,我不知道为什么它不会,也许我已经专注于它太久了,所以我需要从新的思维中寻求帮助。
您需要计算已经过去的时间,以便计算出设置新计时器的时间。以下是.speedup()
:的示例
this.speedup = function() {
window.clearTimeout(timerId);
var elapsed = new Date() - start;
remaining-= elapsed + 100;
if (remaining > 0) {
this.resume();
} else {
callback();
}
}
您可以对.slowdown()
执行类似的操作。
我突然想到,这可以做得简单一点:
this.speedup = function() {
this.pause();
remaining-= 100;
this.resume();
}
this.slowdown = function() {
this.pause();
remaining+= 100;
this.resume();
}
然后,将this.resume()
更改为这个,以确保remaining
不会变为负:
this.resume = function() {
start = new Date();
id = currentIndex;
if (remaining > 0) {
timerId = window.setTimeout(callback, remaining);
} else {
callback();
}
};
相关文章:
- fluxxor向一个flux实例添加一组以上的操作
- 我们怎样才能将内含子J用于一组特定的元素
- 使用linq.js按当前日期订购一组momentjs日期
- 正则表达式,从一组关键字中获取奇数
- 创建一组元素JointJS
- 如何在javascript中获取一组复选框值
- 一组(共组..)
- 使用JS将页面中的每个字母设置为随机颜色.为什么在页面的每个打开标记之前总是有一组额外的span标记
- 在一组复选框中,一次只允许选择一个
- 为什么在fabricjs中可选择的不适用于一组圆
- 如何在不刷新页面的情况下每次单击一组选项卡时刷新视图内容窗格
- 从一组具有相同起始和结束的所有段落的段落中提取包含特定字符串的段落
- 简单的Javascript文本编辑器或一组函数
- 基于日期范围的一组日期范围内的天数
- 处理对象数组并将它们以 4 个为一组进行分配
- 如何在 Javascript 中用一组字符拆分子字符串上的字符串
- 使一组对象与 jQuery 一起拖动
- 使用第 n 个类型设置一组八个元素的样式
- JavaScript-延迟一组setTimeout活动
- 如何从AJAX回调中的setTimeout()中调用存储在一组选项中的函数