- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个执行某些计算的 JavaScript 函数。它需要一段时间才能完成,所以我想在计算时向用户显示一个“等待栏”或微调器。但是,这不起作用。写不写都没关系
<button onclick="showSpinner();performCalculations();hideSpinner();">
或
function performCalculations()
{
showSpinner();
[performCalculations...]
hideSpinner();
}
然后
<button onclick="performCalculations();">
就好像 JavaScript 记下了必须在所有计算完成后显示微调器、执行计算,然后显示和隐藏微调器的注释!
我有一个模糊的想法,认为这与时间有关,我担心我想要的东西可能根本不可能用 JavaScript 实现。例如显示正在运行的函数的运行输出——我知道那是不可能的。这是同一件事吗?
我认为我不应该使用 setTimeout 或 setInterval - 我不想浪费用户的时间。
我已经尝试实现 spin.js,但我无法让它工作。
如果之前有人问过这个问题,我真的很抱歉 - 我已经尝试搜索它,但我找不到任何与我的问题相似的东西。
最佳答案
Nicholas Zakas 曾经说过:
The browser UI thread is responsible for both UI updates and Javascript execution.... Only one can happent at a time
编辑: 我最初认为 spinner 函数没有立即执行,因为它们被超时延迟了,这是一个有效的点并且可能会发生,但这里的罪魁祸首是 js 单线程,因为不仅计时器被推迟并添加到稍后执行时间排队,但是ui也变了,所以js会优先完成所有在ui中没有变化的代码(纯js),在我的例子中是循环,所以它会完成这个循环然后make更改用户界面。正如您在以下时间轴中看到的,ui 更改(紫色和绿色)发生在循环完成(黄色)之后
但是如果我们通过超时将循环添加到执行队列,它将在 ui 更改后执行,所以这可能是这种情况下的唯一修复(我能想到),检查下一张图片你可以看到区别。
因为它是一个 JavaScript 微调器,所以在内部它应该使用 setInterval,这样做的目的是将函数添加到队列中,根据设计,JavaScript 首先执行未超时的代码,当它完成时到那个队列并捕获那里的东西并执行它。因此,更简单的解决方案是使用 css 微调器,您只需显示和隐藏它的 div。
另一种解决方案可能是在计算中添加一个小的超时。
function performCalculations()
{
showSpinner();
setTimeout(function(){
[performCalculations...]
hideSpinner();
}, 0);
}
这是一个有效的 jsfiddle,证明了这一点并且它有效。 http://jsfiddle.net/621tcqh6/3/
注意:有时您必须单击两次才能显示微调器,这似乎是 jsFiddle 的问题,而不是代码本身的问题,因为我在本地进行了测试,但并没有发生这种情况
我应该说这只是基于我所知道的理论,如果你创建一个 jsfiddle,我可以测试它。希望它有助于理解为什么会发生这种情况。
关于javascript - Loader(spinner.js) 在计算完成后显示,即使它首先被调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28752776/
我正在使用 webpack 开始我的学习之路,但遇到了一个问题,我认为这是由 extract-loader 引起的。 .当webpack抓取我的HTML文件时,似乎无法正常编译,在使用import.m
我正在使用 tomcat 8,在 tomcat-home/config/catalina.properties ,有关于的部分 common.loader, server.loader and sha
在使用 import 语句时,我对区分 sass-loader 和 css-loader 有点困惑。据我所知,css loader resolve import statment(@import) 和
我的 webpack 加载器数组中有这个加载器: { test: /\.scss$/, exclude: /node_modules/, loaders: ExtractTextPlugin('sty
我对 url-loader 、 file-loader 和 image-loader 感到很困惑。谁能解释一下 url-loader 、 file-loader 和 image-loader 的区别是
我有 page.css @imports index.css。 page.css 和 index.css 都有 display: flex Webpack.config.js 包含: module:
我在 webpack 中使用生产模式构建的多入口点最终 bundle 中导出的多入口编译 js 文件始终包含加载器内容。如何消除它们以及为什么包含它们? 重现 git clone https://gi
模板加载器找到模板但未加载模板 TemplateDoesNotExist at /cardpayment/ cardpayment.html Request Method: GET Reque
当我尝试运行 gradle tR (tomcatRun) 时出现此错误 A child container failed during start java.util.concurrent.Execu
Failed to start component [StandardEngine[Tomcat].StandardHost[localhost].StandardContext[/projectna
我计划将 Webpack 用于一个项目,并且我正在使用 Html-loader + file-loader 设置我的工作流程,以获取带有图像动态 src 的生产 html 文件,正如 Colt Ste
我有一个巨大的 csv 文件,其中包含数百万条记录,我想使用 python 脚本将它加载到 Netezza 数据库中。我尝试了简单的插入查询,但速度非常非常慢。可以指出一些示例 python 脚本或一
我想将 ts-loader 与 babel-polyfill 一起使用,但不使用 babel-loader。但是当我尝试构建该项目时,我收到了此错误。谁能告诉我我缺少什么。 ERROR in ./sr
下面是我的 webpack.config.js 和 package.json module.exports = { entry: "./entry.js", output: { fi
我在两台不同的 PC 上遇到了一个问题。对于我的项目,我为开发安装了以下依赖项:(webpack webpack-cli @babel/core @babel/preset-env @babel/pr
模板文件保存在app目录下,但渲染时引发TemplateDoesNotExist异常: 模板加载器事后分析如下: Django 尝试按以下顺序加载这些模板: Using loader django.t
PHPUnit 手册说: If you point the PHPUnit command-line test runner to a directory it will look for *Test
我正在开发一个需要 html 的角度应用程序要提取为纯 HTML 文件的文件,同时应检查任何 要求这些图像(作为 Assets )。另外,图片是基于根路径的(所以 /images/something.
我们在 sql 加载器中遇到了问题。我们正在尝试将一个大约 46 亿行(近 340 GB)的数据文件加载到 2 个 oracle 表中,基于一些使用 Sql Loader 的条件。但是在加载了 42
我将 CSS 模块与 webpack css-loader 一起使用,然后将它们与 mini-css-extract-plugin 捆绑在一起。 这是我的配置的样子: { test: /\.c
我是一名优秀的程序员,十分优秀!