【问题标题】:How to stop/override a Jquery TimeOut function?如何停止/覆盖 Jquery TimeOut 函数?
【发布时间】:2011-02-04 10:30:11
【问题描述】:

我有一个小的 jquery sn-p,它在屏幕顶部显示通知消息以响应页面上的用户操作。通知通常在 Ajax 操作之后显示,其中包含动态内容。

例如:

$("#mini-txt").html("Thank you!");
$("#mini").fadeIn("fast");
setTimeout(function() {$("#mini").animate({height: "hide", opacity: "hide"}, "medium");}, 3000);

通知运行良好,除非用户快速连续执行两个或多个操作,在这种情况下,TimeOut 函数会混淆自身,并且第二条消息似乎出现在前 3000 毫秒内。

如果执行了新操作,是否有办法“杀死”先前的通知。我对动作/选择器没有任何问题,只是 TimeOut 功能......要么停止它,要么以某种方式覆盖它。或者也许有更好的选择让消息在屏幕上停留几秒钟然后消失?

谢谢。

【问题讨论】:

    标签: javascript jquery ajax timeout notifications


    【解决方案1】:

    您可以使用.stop()

    停止当前正在运行的动画 在匹配的元素上。

    【讨论】:

      【解决方案2】:

      首先,存储setTimeout 函数的返回值:

      // Set the timeout
      var timeout = setTimeout(function()
          {
              // Your function here
          }, 2000);
      

      然后,当您准备好终止超时时...您只需调用 clearTimeout 并使用上一次调用 setTimeout 的存储值。

      // Then clearn the timeout
      clearTimeout(timeout);
      

      【讨论】:

      • 清除后会执行超时功能吗?
      【解决方案3】:

      jQuery 1.4 有一个内置的方法来处理动画延迟,你可以这样做:

      $("#mini-txt").html("Thank you!");
      $("#mini").fadeIn("fast").delay(3000).animate({height: "hide", opacity: "hide"}, "medium");
      

      然后当你想清理动画队列时,你可以这样做:

      $("#mini").stop(true);
      

      【讨论】:

        【解决方案4】:

        这将在延迟 500 毫秒的函数运行后清除超时

        var timeout = setTimeout(function(){
        
        /* YOUR FUNCTION */
        
        }, 500, function(){
           clearTimeout(timeout);
        });
        

        【讨论】:

          猜你喜欢
          • 2013-05-05
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-05-31
          • 1970-01-01
          • 1970-01-01
          • 2022-06-11
          相关资源
          最近更新 更多