【发布时间】:2017-04-05 20:25:33
【问题描述】:
*注意:这与 img 标签无关。这完全是一个关于 CSS 背景图像的问题。
我正在尝试制作一个不错的基于 ajax 的模板,它不会刷新页面,而是交换特定 div 中的内容。一切都运行良好,除了背景图像在新加载的 div 显示给用户时从未完全加载。我希望这个过程看起来像这样:
- HTML 内容已加载。
- CSS 图像开始异步加载。
- 回调函数运行完成。
为了测试,我推迟了展示,只是为了确保图像在函数完成之前有时间加载。即使有 5 秒的额外时间,它仍然会在加载前显示一秒钟的空白框,无论延迟多长时间。这使我得出结论,流程必须更像这样:
- HTML 内容已加载。
- 回调函数运行完成。
- CSS 图像开始异步加载。
“加载”事件似乎没有考虑 CSS 图像,并且似乎没有任何事件允许脚本等待 CSS 图像完成加载。
我什至尝试通过遍历每个元素来绕过它,检查背景图像的存在,然后为每个元素创建一个带有加载事件的新 Image(),但是不用说,这超出了调用堆栈。
所以我的问题是,在继续执行脚本之前,我如何才能简单地等待所有背景图像完全显示?
【问题讨论】:
-
注意
<div>没有load事件,您能提供您的请求代码吗?听起来您正在回调中设置图像/加载 css -
我不知道加载事件会受到这样的限制,感谢您提供的信息。 pageDiv 位于 body 中,css 链接位于 head 中。 css 永远不会刷新,但 pageDiv 中的 html 内容会被卸载并替换为新页面的 html。替换内部 html 完全不应该影响 css 引用。
-
我了解您给出的示例是尝试解决您的问题,但它永远不会起作用,因为您正在使用外部
.load的回调来创建加载事件处理程序 @ 987654324@,不执行。另外,在测试时,您是否用括号正确关闭它?您知道 jQuery 有 2 个.load方法(其中一个已弃用)? -
这是一个混乱的解决方法,我并不引以为豪,哈哈。由于脚本是同步的,我基本上打算在一个 while 循环中捕获脚本,直到通过设置 var loaded = true; 触发事件。无论如何,它仍然没有工作。我知道如果没有一些额外的东西,事件监听器不会占用脚本。
-
其实,不管前面的评论,我在想一个不同的时间点。这个事件监听器不需要立即执行,因为在它触发之前,div 无论如何都会被隐藏。
标签: javascript jquery css ajax image