单击(jQuery)时暂停setTimeout
Pausing setTimeout when .click (jQuery)
我有一个jQuery脚本在几个div中滑动。代码如下。我有两个问题需要解决:
-
当用户单击选项卡时重置或添加计时器。此时,它可能会立即切换到下一张幻灯片,具体取决于它在循环中的位置。
-
当用户将鼠标悬停在特定幻灯片上时,暂停计时器(即清除超时,然后重新启动)。
为了实现这些,我给setTimeout一个变量($Timeout),并尝试清除Timeout,然后再次运行show_cycle_elem()。无论我尝试了多少种不同的方法(将我的其他事件,如点击,放入函数中,然后在setTimeout后立即调用它们,等等),它似乎都不能完全正常工作。
有什么想法吗?
$(document).ready( function(){
var theId = 0;
function navClass(it){
$('#hero nav a').removeClass('over');
$(it).addClass('over');
}
$.fn.cycle = function(timeout){
var $all_elem = $(this);
show_cycle_elem = function(){
if(theId == $all_elem.length) theId = 0;
$all_elem.hide().eq(theId).fadeIn();
navClass('#a' + theId);
var $theTimeout = setTimeout(function(){show_cycle_elem(++theId)}, timeout);
}
show_cycle_elem();
}
$('div.hero_slide').cycle(10000);
$('#hero nav a').click( function(party){
party.preventDefault();
theId = this.id.substr(1);
navClass($(this));
$('.hero_slide').hide();
$('#hero' + theId).fadeIn();
});
});
谢谢。
Hah看起来像是你试图用几个选项构建一个流体滑块。。。几个月前我就有了这个想法,我想这其实并不像看上去那么容易。对于初学者来说,我们使用的是jQuery,所以我们还不如用插件格式编写它,因为我们需要一个范围,在其中我们可以声明和使用随时间变化的变量。。。
我直接切入正题;如果你想使用幻灯片/暂停它们,你需要控制超时id,存储它并在需要时清除超时,以防止下一张幻灯片动画。。。
我花了一些时间来弄清楚,但我的工作版本只有一些非常基本的功能,但你至少可以启动/停止它,然后执行下一个/prev/rand:
http://jsfiddle.net/sg3s/RFJMy/218/
因此,如果你想制作一个插件/功能来完成你所描述的事情,你需要重写代码的大部分,以拥有一个能够在逻辑意义上处理中断的基础。
相关文章:
- setInteval vs setTimeout
- 如何临时暂停浏览器渲染,然后恢复整个页面
- jQuery循环在特定位置暂停
- 如何在chrome扩展中存储数据/结果,以及如何使用setTimeout使其只被调用一次
- NodeJS-readline暂停和恢复事件发射器(逐行读取)
- 最小化时暂停Javascript动画
- setTimeout可以与闭包内的函数一起使用吗
- Javascript setTimeout for an array
- jQuery:暂停按钮可以暂停所有其他操作
- 刷新后,setTimeout将工作或不工作
- tiltSlider播放/暂停视频元素(如果li有当前类)
- Canvas+svg路径动画,在路径中的特定点暂停一段时间,然后继续
- 继续使用javascript中的setTimeout
- jQuery-使用嵌套的setTimeout暂停循环
- 暂停&在循环中恢复setTimeout
- 单击(jQuery)时暂停setTimeout
- SetTimeout在警报时暂停
- 递归setTimeout()在后台暂停
- setTimeout不暂停循环中的迭代
- Node.js使用setTimeout()暂停和恢复流