我正在编写一个backbone.js 应用程序。
当用户按下“搜索”按钮时,我会显示一个 loading.gif 图像(通过使其阻塞),同时让 javascript 代码继续。javascript 代码完成后,我取消隐藏加载图像(将显示更改为无)。
我可以看到它在 Firefox 中运行。在 safari/和 chrome 中,直到 javascript 代码完成后才会应用 CSS 的更改,因此用户在执行搜索时看不到加载图像。
有任何解决这个问题的方法吗?
谢谢
我正在编写一个backbone.js 应用程序。
当用户按下“搜索”按钮时,我会显示一个 loading.gif 图像(通过使其阻塞),同时让 javascript 代码继续。javascript 代码完成后,我取消隐藏加载图像(将显示更改为无)。
我可以看到它在 Firefox 中运行。在 safari/和 chrome 中,直到 javascript 代码完成后才会应用 CSS 的更改,因此用户在执行搜索时看不到加载图像。
有任何解决这个问题的方法吗?
谢谢
我在加载图像时遇到了类似的问题,结果证明是因为图像尚未加载到浏览器中,并且无论出于何种原因,它直到其他操作完成才显示。我相信在我的情况下,XHR 以某种方式阻止了图像的加载或显示。从记忆中,这只发生在第一次显示加载图像时,之后就很好了。我最终在页面 html 中添加了一个元素来加载加载图像,然后用 javascript 隐藏它。这解决了问题..
有几件事让我觉得很奇怪..但首先回答你的问题:
大多数 DOM/css 更改在执行的 Javascript 返回之前不会应用。为了解决这个问题,您可以更改 DOM,然后设置超时以执行其余的 Javascript 代码。
前任:
// make your image visible
function continuation() {
// Put the javascript task that you need to execute here
}
// setTimeout will release execution control back to the browser so your CSS/DOM updates
// can be applied. Once those updates are applied, continuation will be called
// by the browser and your remaining javascript can run.
setTimeout(continuation, 0);
现在看起来很奇怪,您将拥有任何需要很长时间才能运行的 javascript,以至于您甚至有时间看到加载的 gif。如果您正在触发 XHR (ajax) 请求,那么查看加载图像是有意义的,但如果您这样做,那么您不应该遇到您所描述的问题。你的这个javascript任务到底是做什么的?