javascript - spin.js 在 IE 和 FF 上长时间运行线程时停止旋转

标签 javascript jquery spin.js

我的代码:

$(document).ready(function () {
    $("#divContent").hide();
    $("#divProcessing").spin();

    $("#divProcessing").show();

    setTimeout(function () {
        Longrunningfunction1
        Longrunningfunction2
        Longrunningfunctionn

        //All done
        $("#divProcessing").hide();
        $("#divContent").show();
        $("#divContent").style = "margin-top:60px;height:100%;display:''";

        $("#tabbed-nav").data('zozoTabs').refresh();
    }, 0);
});

使用上面的 SetTimeout,我设法使 Processing div 正常运行,即显示,然后在一切完成时隐藏和显示 Content div。 问题是在 IE 和 FF 中,微调器会在一段时间后停止旋转。在 Chrome 中,它运行完美,微调器继续运行。

我试过:

  • 强制重绘 Processing div
  • 使用不同的 js 微调器(比 spin.js 更糟糕的行为——它们从未出现过)
  • 使用 css3 动画代替 spin.js(从不制作动画)
  • 额外的设置超时
  • setintervals 以尝试让 ui 重绘。

到目前为止没有任何效果。除了将我长期运行的流程转移到新 View 之外,我还能做些什么吗?我知道这些问题与 js 是单线程有关,但由于 chrome 没问题,我认为可能有解决方案。 谢谢。

最佳答案

首先我要注意:JavaScript 不是单线程的。只是在浏览器上,只有一个主要的 UI JavaScript 线程。但是 JavaScript 这种语言几乎对线程的概念保持沉默,并且可以(并且已经)在其他环境中以多线程方式实现。

一些浏览器也将相同的 UI 线程用于非 JavaScript 任务,看起来 spin.js 要么依赖 JavaScript(因为它谈论关键帧的东西),要么受到主 UI 线程繁忙的影响。

解决方案是将长时间运行的函数从主 UI 线程移到 web worker 中。如果可能的话。出于多种原因,这很好,尤其是当工作人员执行其工作时,您的 UI 会保持响应。

网络 worker 是 well supported在现代浏览器中,但在 v4.4.4 之前的 IE8 或 IE9 和 Android 浏览器中不支持。

关于javascript - spin.js 在 IE 和 FF 上长时间运行线程时停止旋转,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32397228/

相关文章:

javascript - Vue.js:数据不是 react 性的,并且在方法内没有正确更新

javascript - spin.js 顶部选项不起作用

javascript - spin.js 在长时间运行的任务期间不会显示,但在我单步执行调试器时会显示

javascript - 将 spin.js 微调器插入到 div 中?

javascript - IE7 : li's behaving badly

javascript - bower 错误 : Unable to find suitable version for angular

javascript - jquery删除除了点击的那个之外的所有div

javascript - jQuery FormBuilder - 在默认字段上禁用属性

javascript - 检查所有下拉列表是否为空 jQuery

c# - jQuery DropDown间距问题