javascript - Chrome 扩展程序在 Javascript 循环运行时播放加载 Gif

标签 javascript google-chrome-extension

我有一个 JavaScript,它循环遍历 xml 来显示内容。大约需要 3-5 秒才能完成。同时,我想合并一个加载 gif,但是,该 gif 会在 JavaScript 完成之前加载动画。到时候我就想消失。 (出于测试目的,我没有让它消失,以确保 gif 实际上可以正常工作。下面我有一些可以显示和隐藏 gif 内容的方法,这样我就不需要帮助了。

我认为我的想法与 How to show loading gif image while content called via javascript is loading? 有关但不同的是,它不使用按钮来调用 JavaScript,而是在页面加载时调用。

在 .html 中

<div id="loading"><img src="loading.gif"/>Starting Content</div>

在 .js 中

function Loaded(quantity) {
  $(document).ready(function() {
        $("#loading").html("New Content");
  });
}

正如我所说,这个想法可以显示/隐藏 gif,只是 gif 无法制作动画,这违背了拥有它的目的。 :)

最佳答案

长时间运行的 JavaScript 作业会阻塞浏览器的 UI,包括图像动画。要查看实际效果:

  1. 转到http://www.ajaxload.info/然后单击“生成它!”制作 GIF 旋转器。

  2. 运行i=0; while(i < 100000000) i++;在您的浏览器控制台中。循环完成时图像将卡住。

为了防止这种情况发生,您需要使循环具有某种异步组件,如 Javascript - how to avoid blocking the browser while doing heavy work? 中所述。 (事实上​​,这个问题几乎与那个问题重复):

for(var i=0; i < 1000000; ++i) {
    setTimeout(function(i) {
        return function() { doSomethingHeavy(i); }
    }(i), 0);
}

这会将循环的步骤排队,但它允许 JavaScript 线程在循环迭代之间“休息”,从而允许 UI 线程为 GIF 制作动画。

关于javascript - Chrome 扩展程序在 Javascript 循环运行时播放加载 Gif,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14102968/

相关文章:

javascript - 无法在 Material UI TextField 中键入文本

javascript - 切换菜单立即消失

google-chrome - Chrome 扩展 - 每个页面加载多次注入(inject)内容脚本

javascript - Chrome 扩展,scrollTop=0 任何地方

javascript - 使用 Chrome 扩展身份获取 Oauth2 google 所需的数据。

javascript - 如何根据边框元素在winjs ListView 中删除焦点

javascript - 单击时禁用功能

javascript - JavaScript 中的 numpy.random.choice?

javascript - XMLHttpRequest 触发中止事件 - 为什么?

google-chrome - 将上下文菜单项添加到Chrome扩展程序浏览器操作按钮