【问题标题】:Stop a Function, jQuery停止函数,jQuery
【发布时间】:2011-08-14 03:32:00
【问题描述】:

我正在使用这个闪烁功能

(function($)
{
  $.fn.blink = function(options)
   {
       var defaults = { delay:500 };
       var options = $.extend(defaults, options);

       return this.each(function()
       {
           var obj = $(this);
           setInterval(
            function(){
               if($(obj).css("visibility") == "visible") {
                  $(obj).css('visibility','hidden');
               }
               else{
                  $(obj).css('visibility','visible');
               }
             },
            options.delay);
        });
    }
}(jQuery))

$("#bootUp p").blink({delay:300});  

我希望它在 window.load 上停止

我不知道该怎么做,究竟是什么?任何帮助将非常感激。谢谢!

【问题讨论】:

    标签: jquery die


    【解决方案1】:

    Live Demo

    您需要跟踪从 setInterval 返回的整数,然后为它们中的每一个进行 clearInterval。

    var intervals = new Array();
    
    (function($)
    {
      $.fn.blink = function(options)
       {
           var defaults = { delay:500 };
           var options = $.extend(defaults, options);
    
           return this.each(function()
           {
               var obj = $(this);
               intervals[intervals.length] = setInterval(
                function(){
                   if($(obj).css("visibility") == "visible") {
                      $(obj).css('visibility','hidden');
                   }
                   else{
                      $(obj).css('visibility','visible');
                   }
                 },
                options.delay);
            });
        }
    }(jQuery))
    
    $("#bootUp p").blink({delay:300});
    $("#bootUp2 p").blink({delay:300});
    
    $(document).ready(function(){
        for(var i=0;i<intervals.length;i++){
            clearInterval(intervals[i]);
        } 
    });
    

    【讨论】:

    • @duttka,我通过 jshint 运行它但失败了?
    • 更新了 jsfiddle 上的一个实例。来自 jshint 的一些(不是全部)错误在您发布的原始代码中:p
    • 如果您不止一次拨打blink,这将不起作用,对吧?
    • @Emmett 如果你打算这样做,那么将 var i 保留在 blink 函数之外,以便它附加更多的间隔而不是在索引 0 处覆盖。或者只使用 interval.length 而不是 i跨度>
    • @druttka 更好的方法可能是让blink 返回一个 id 数组,而不是依赖于全局变量。
    【解决方案2】:

    最正确的解决方案是存储setInterval返回的id,然后用clearInterval清除它们。但是,更简单/无脑的方法只是:

    $("#bootUp p").replaceWith($("#bootUp p").clone());
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多