2011-11-17 55 views
0

我一直工作在一个简单的展示脚本,撞到了一个问题,我不能让过去的就我自己...事件似乎得到覆盖在超时第二环

首先,生病粘贴一些代码:使用

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(http://benalman.com/projects/jquery-dotimeout-plugin)一个jQuery插件,这是应该让使用更方便timout(它确实,到目前为止, )。

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

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

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

在此先感谢!

回答

1

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

+0

令人惊叹的东西哥们!奇迹般有效!我只是成为你最大的粉丝..救生员! – pgrzyb