等待CSS中的背景图像完全加载

use*_*770 10 javascript css jquery

我有一个使用外部CSS加载的外部背景图像的Web应用程序.现在,可以在图像完全渲染之前使用应用程序,从而创建奇怪的视觉效果.

如何在图像完全加载之前暂停脚本执行?

它可以使用普通的JavaScript或jQuery.因为图像是在外部CSS中加载的,所以我读过的正常触发器不起作用.

ade*_*neo 29

如果你有一个带背景图片的元素,就像这样

<div id="test" style="background-image: url(link/to/image.png)"><div>
Run Code Online (Sandbox Code Playgroud)

您可以通过获取图像URL并使用onload处理程序将其用于javascript中的图像对象来等待加载背景

var src = $('#test').css('background-image');
var url = src.match(/\((.*?)\)/)[1].replace(/('|")/g,'');

var img = new Image();
img.onload = function() {
    alert('image loaded');
}
img.src = url;
if (img.complete) img.onload();
Run Code Online (Sandbox Code Playgroud)

  • 大!我不清楚正则表达式在做什么? (2认同)
  • @MatheusJardimB-CSS中的背景图像始终添加url(...),正则表达式获取url(...)内的内容,换句话说,图像的来源,替换将删除所有内容引号,因为某些浏览器在返回时也会添加引号,即`url(“ ...”)` (2认同)
  • @MichaelScheper - 这是一个常见的解决方法,IE没有在缓存的图像上触发onload事件.它可能不再需要了,因为较新版本的IE没有这个问题,但我总是添加它只是为了确保无论如何. (2认同)

Cod*_*ick 0

查看类似问题答案

我编写了一个插件,可以在图像加载到元素中时触发回调,或者每个加载的图像触发一次。

它与 类似$(window).load(function() { .. }),但它允许您定义要检查的任何选择器。如果您只想知道#content(例如)中的所有图像何时加载,那么这个插件就是适合您的。

它还支持加载 CSS 中引用的图像,例如background-imagelist-style-image等。

waitForImages jQuery 插件

用法示例

 $('selector').waitForImages(function() {
     alert('All images are loaded.');
 });
Run Code Online (Sandbox Code Playgroud)

jsFiddle 上的示例

GitHub 页面上提供了更多文档。