2011-10-17 40 views
1

我正在使用自动滚动脚本,我正在使用jquery中的函数移动到菜单上的单击元素。我使用setInterval单击菜单上的每个项目。直到现在一切正常。但是,当我需要停止setInterval时,问题出现了,我的意思是,如果用户单击其中一个元素,请停止setInterval。用户单击自动滚动脚本时清除setInterval

我有两个问题或问题的你要跟

  1. 这是做一个自动滚屏的正确方法?
  2. 如果不是,如果你给我一点线索,我会非常感激。如果这是正确的方法,如何知道点击事件是由用户还是脚本触发的?

好吧。谢谢阅读。我正在使用的代码是下一个,正如我所说,正在工作正常,以循环滑动。非常感谢。就像一个旁注:对于客户请愿书,我不能使用jquery插件来创建滑块,所以我必须手动完成。

$('.slider-controls a').live('click',function(e){ 
      moveSlider($(this).attr('href'),e); 

      return false; 
     }); 

     function moveSlider(toDiv,elem){ 
      var nextPos = $(toDiv).position().top; 
      $('.slider-total').animate({ 
       top: -nextPos 
      }, 700); 

      $('.slider-total div').removeClass('activo'); 
      $(toDiv).addClass('activo'); 
     } 

     var autoSlider = setInterval(function(){ 
      var slideNext; 

      if (!($('.slider-total .activo').next().attr('id'))){ 
       slideNext = '#' + $('.slider-total .post:first').attr('id'); 
      } else { 
       slideNext = '#' + $('.slider-total .activo').next().attr('id'); 
      } 

      $('a[href='+slideNext+']').click(); 
     },4000); 

回答

2

可以通过调用clearInterval()传递间隔的id清除间隔,从setInterval()函数返回。在你的情况下,它将是:

clearInterval(autoSlider); 
+0

是的。我知道它实际上停止了我的setInterval。我需要的是当用户点击一个项目时停止setInterval。我可以在$('。slider-controls a')中使用clearInterval(autoSlider)。live('click');功能。这里的问题是脚本本身正在点击每个项目,所以如果我以这种方式使用它,则滑块只会动画到第二个项目。 – Chuy

+0

你的'setInterval'函数直接调用'moveSlider'。然后你可以在'click'事件中清除超时,因为它来自用户。总是试图提取你的逻辑来分离你可以从事件或你的JavaScript调用的方法,而不是“假装”成为用户 –