【发布时间】:2013-12-03 06:29:46
【问题描述】:
我在这里找到了关于如何暂停和恢复 setTimeout 的好答案。很有用。
但是如何解决一个类似的问题,但要使用 setTimeouts 数组? 我需要单击任何元素以暂停,然后在单击上次停止的数组中的 setTimeout 后恢复,依此类推。
到目前为止,我的代码可以正常工作,只是它会在开始时恢复超时设置。有没有办法检查哪个 setTimeout 元素暂停并在此时再次恢复?我认为 var fadeTrailer 的第二个定义必须减去那些已经激活的元素。不知何故,它应该与索引一起使用。但我不知道怎么做。感谢您的帮助!
//automatic fader
fadeTrailer = [
setTimeout( function() {
//first action
}, 9500),
setTimeout( function() {
//second action )
}, 19000),
setTimeout( function() {
//third action
}, 32000),
];
$("#Trailer").on( 'click.resumeTrailerFade', function() { resumeTrailerFade(); } );
功能恢复
function resumeTrailerFade() {
$.each( fadeTrailer, function(i, timer) {
clearTimeout(timer);
} );
fadeTrailer = [
setTimeout( function() {
//first action
}, 9500),
setTimeout( function() {
//second action )
}, 19000),
setTimeout( function() {
//third action )
}, 32000),
];
};
我希望这是在这里执行此操作的正确方法。对初学者来说很好但也很困难的论坛;-) 我现在所做的是,我在开始时声明了一个时间轴变量:
var fadingTimeline = [
setTimeout( function() {
//anything
fadeState = 0;
}, 9500),
setTimeout( function() {
//anything
fadeState = 1;
}, 19000),
setTimeout( function() {
//anything
fadeState = 2;
}, 32000),
];
那我先出场了:
//automatic fader
fadeTrailer = fadingTimeline;
// interrupts automatic fader and restarts it (to give user time to stay on each work when clicking elements in it)
$("#Trailer").on( 'click.resumeTrailerFade', function() { resumeTrailerFade(); } );
然后对于 resumeTrailerFade() 我尝试使用 fadeState 变量按索引 grep 元素数组,例如:
function resumeTrailerFade() {
$.each( fadeTrailer, function(i, timer) {
clearTimeout(timer);
} );
//filter timeline array for already passed setTimeouts
fadeTrailerRemain = $.grep( fadingTimeline, function(n) {
return ( n.index < fadeState );
});
}
我知道最后一部分是愚蠢的代码,只是为了解释我的想法。 是否有人能够遵循我的想法并将其放入真正的工作代码中?太棒了!
【问题讨论】:
-
当您创建超时时,您可以将超时保存在变量中,例如:var t1 = setTimeout(); ....然后你可以将它们保存在一个数组中,如果暂停则添加一个标志
-
我想您是在问如何将 fadeTrailer 索引传递给 resumeTrailerFade?你能发布你的标记吗?
-
是的,我看到了这个答案,如果只有一个 setTimeout,我可以将它用于我的目的,但我在这里有一组 setTimeouts,所以我问如何为此调整类似的任务。到目前为止,感谢您提供有趣的 cmets!我会尝试了解这些标志。
-
我在最后的原始问题中添加了一个新代码
标签: javascript jquery settimeout resume