【问题标题】:How to stop a function from running?如何阻止函数运行?
【发布时间】:2011-01-31 12:46:52
【问题描述】:

我有一个函数,但即使我调用stop(),它也会继续运行。 函数名称为function slide() { //codes here }

slide().stop();

如何阻止它运行?
停止后如何再次运行?
所以我将完全控制它。

【问题讨论】:

  • .slide 在 jQuery Core 或 jQuery UI 中都不是已知的方法。您是否使用了实现此方法的自定义插件,或者您可能指的是.slideUp.slideDown
  • slide() 是我的函数名,里面有很多代码。
  • jquery 的 stop 仅适用于 jquery 动画
  • 好的,那我怎样才能停止一个函数呢?因为它仍在后台运行。
  • 你在 slide 方法中做了什么?通常你不能停止函数的执行,因为执行是顺序的..

标签: jquery


【解决方案1】:

.stop 是一种停止在当前元素上异步(在后台)运行的动画的方法。它不会中断/停止任何其他未使用效果库的代码。

相反,您应该查看.queue,它可以让您设置可以清除或出列的自定义队列。

关于如何使用.queue 已经有了很好的答案,所以我将向您指出这个问题:Can somebody explain jQuery queue to me? - 看看 gnarf 的答案。

【讨论】:

  • 那我该怎么办?如果不是 stop()?
【解决方案2】:

如果它在您的幻灯片函数中达到某个条件,只需使用return; 语句退出该函数。然后重新启动它只需调用函数slide()。您不能使用函数外部的代码使其退出,它必须在函数内。

【讨论】:

  • 我使用了类似的东西,将布尔值传递给函数。如果它是假的,那么它会命中一个使用return; 的 if 语句,否则如果在函数中传递了一个真值,它将像往常一样运行。感谢您的想法。
【解决方案3】:

遇到了同样的问题,在阅读了 amurra 的最后一个答案后,这就是我所做的......

通过将全局变量附加到“窗口”对象来声明它。这将作为一个标志并决定是继续调用'slide_it()'函数还是停止它(返回)

window.slide_it = true;

$(element).on({

    mouseenter:
        function() {
            window.slide_it = true;
            slide_it();
        }

    mouseleave:
        function() {
            window.slide_it = false;
        }

});

function slide_it () {

    if( !window.slide_it )
        return false;

    $(element).stop().animate( 
        {
            'left':'-=5px'
        },
        100,
        function() { slide_it() }
    );

}

一旦你在 $(element) 上输入鼠标,slide_it() 函数就会自行迭代。只有当 window.slide_it 设置为 false 时它才会停止。因此,当“mouseleave”s 时,您只需将 window.slide_it 设置为 false

希望它可以帮助遇到问题的其他人!

【讨论】:

    【解决方案4】:

    如果您的函数是一个长时间运行的 javascript 进程,您应该在其中放置某种外部钩子来停止它的执行过程并在需要时继续执行。如果你有一个while循环,你应该检查外部条件以停止它的执行。如果您没有常规意义上的循环,则必须找到其他方法来检查函数的运行状态条件。

    通常不可能在 Javascript 中中断正在运行的函数。不是没有任何额外的代码。

    浏览器会通过询问用户是希望脚本继续执行还是停止它来中断长时间运行的函数(浏览器假定执行已挂起,就像在无限循环中一样)。

    如果您在 Javascript 中确实有一个长时间运行的函数,您应该将功能拆分为几个部分并使用 javascript 线程 技术,该技术通过 window.setTimeout(function, delay); 一个接一个地延迟执行短函数

    【讨论】:

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