单击(jQuery)时暂停setTimeout

Pausing setTimeout when .click (jQuery)

本文关键字:暂停 setTimeout jQuery 单击      更新时间:2023-09-26

我有一个jQuery脚本在几个div中滑动。代码如下。我有两个问题需要解决:

  1. 当用户单击选项卡时重置或添加计时器。此时,它可能会立即切换到下一张幻灯片,具体取决于它在循环中的位置。

  2. 当用户将鼠标悬停在特定幻灯片上时,暂停计时器(即清除超时,然后重新启动)。

为了实现这些,我给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/

因此,如果你想制作一个插件/功能来完成你所描述的事情,你需要重写代码的大部分,以拥有一个能够在逻辑意义上处理中断的基础。