Javascript 单击时暂停设置超时(jQuery)

Javascript 单击时暂停设置超时(jQuery),javascript,jquery,slider,settimeout,slide,Javascript,Jquery,Slider,Settimeout,Slide,我有一个jQuery脚本在几个div中滑动。代码如下。我有两个问题需要解决: 当用户单击选项卡时重置或添加计时器。此时,它可能会立即切换到下一张幻灯片,具体取决于它在循环中的位置 当用户将鼠标悬停在特定幻灯片上时暂停计时器(即,清除超时,然后重新启动计时器) 为了完成这些操作,我给了setTimeout一个变量($theTimeout),并尝试清除超时,然后再次运行show_cycle_elem()。无论我尝试了多少种不同的方法(通过将我的其他事件(如单击)放入函数中,然后在setTimeout

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

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

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

  • 为了完成这些操作,我给了setTimeout一个变量($theTimeout),并尝试清除超时,然后再次运行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();
    });
    });
    

    谢谢。

    哈,看起来你正在尝试用几个选项来构建流体滑块。。。几个月前我就有了这个想法,但我觉得这并不像看上去那么容易。对于初学者来说,我们使用jQuery,所以我们可以用插件格式编写它,因为我们需要一个范围,在这个范围内我们可以声明和使用随时间随意变化的变量

    我就开门见山了;如果您想使用幻灯片/暂停幻灯片,您需要控制超时id,存储它并在需要时清除超时,以防止下一个幻灯片动画

    这是我的工作版本,它只有一些非常基本的功能,但你至少可以启动/停止它,然后执行next/prev/rand:


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

    也许我今天看不到有什么好处,但是你的clearTimeout在哪里?我没有包括任何我试图清除超时的东西,因为他们都不工作。事实上,我的问题是,如果您想在任何地方使用$theTimeout,我应该在哪里以及如何使用
    clearTimeout($theTimeout)
    ,然后您必须将其声明为全局。首先,您需要在一个范围内声明
    $theTimeout
    ,您可以在清除它时访问该范围-不一定是全局的:例如,您可以将它声明在与
    theId
    相同的位置。对,但是如果它嵌套在show_cycle\u elem()的内部,在cycle()的内部,我该怎么做呢?我是否执行
    var$theTimeout
    var theId=0
    下,然后在show_cycle_elem()中将$theTimeout设置为setTimeout(…)?