事件似乎在超时第二循环被覆盖

时间:2011-11-17 09:13:23

标签: jquery events timeout unbind

我一直在制作一个简单的展示脚本,并且遇到了一个我无法自己解决的问题......

首先,粘贴一些代码:

    obj.timeout = function() {   

        $.doTimeout('showcase', config['timeout'], function() {
            //show preloader
            $.doTimeout('showcase');
            obj.addImage('next');
            var angle = 0;
            setInterval(function(){
                  angle+=3;
                 $(".showcase .preloader").rotate(angle);
            },10);
            $('.showcase .preloader').stop().fadeIn(config['speed']);

            $('.showcase img.next').load(function() {
                $('.showcase .preloader').stop().fadeOut(config['speed']);              
                obj.animateShowcase();
            });         
            return true;

        })
    };


    obj.init = function() {
        //bind events (stop the timer on window blur and showcase hover)

        $(window).bind('blur', function() {
            $.doTimeout('showcase');
        });
        $('section.showcase, .showcase .preloader').bind('mouseover', function() {
            $.doTimeout('showcase'); 
        });

        obj.timeout();   
        obj.loadData();

    };

我正在使用一个名为jQuery.doTimeout的jquery插件(http://benalman.com/projects/jquery-dotimeout-plugin),它应该更容易使用timout(到目前为止它确实如此)。

运行$ .doTimeout(id)会停止以前使用相同ID启动的超时。

展示工作,在正确的延迟后动画等等。我试图在有人盘旋在陈列柜后停止它,但它只适用于第一个'循环'...计时器停止,一切都很好。 不幸的是,在超时功能运行至少一次后,事件似乎解除了绑定...超时保持循环,但鼠标悬停或模糊事件停止工作......

我坐了几个小时,看不到解决方案......也许我只需要另外一双眼睛看看它!

提前致谢!!

1 个答案:

答案 0 :(得分:1)

我想问题是如果你的超时功能正在运行,它总是通过return true在最后重启。为什么不设置属性obj.showcase_active = true并让超时函数return obj.showcase_active而不是return true。然后在mouseover回调中,停止计时器并设置obj.showcase_active = false