我有一个侧边栏小部件,有一个图像背景。
在其上面有一个搜索输入表单。 我不希望在图像加载之前显示输入内容。
是否有一种方法像普通的img元素/对象那样附加CSS背景图像的load
事件处理程序?
我知道这可以在普通图像上完成,但我想将其保留为CSS背景,因为图像是精灵的一部分。 我正在使用jQuery,因此使用jQuery或纯DOM JS的解决方案同样好。
我有一个侧边栏小部件,有一个图像背景。
在其上面有一个搜索输入表单。 我不希望在图像加载之前显示输入内容。
是否有一种方法像普通的img元素/对象那样附加CSS背景图像的load
事件处理程序?
我知道这可以在普通图像上完成,但我想将其保留为CSS背景,因为图像是精灵的一部分。 我正在使用jQuery,因此使用jQuery或纯DOM JS的解决方案同样好。
您可以使用DOM / 隐藏图像来加载相同的图像,并绑定到load
事件。浏览器的缓存应该会避免重复加载图片,如果图片已经加载,事件应该立即触发...未经测试,但这是一个解决方案。
<div id="testdiv">
<input type="text" id="txt" style="display:none;" />
</div>
<img src="http://www.nasa.gov/sites/default/files/images/712130main_8246931247_e60f3c09fb_o.jpg" id="dummy" style="display:none;" alt="" />
Javascript:
$(function() {
$('#dummy').ready(function() {
alert('loaded');
$('#testdiv').css('background-image', 'url(http://www.nasa.gov/sites/default/files/images/712130main_8246931247_e60f3c09fb_o.jpg)');
$('#txt').show(1000);
});
});
CSS:
#testdiv {
background:#aaaaaa none no-repeat right top;
width: 400px;
height: 400px;
}
#txt{
margin-left: 180px;
margin-top: 140px;
}
注意:下面有一个评论说这个方法不起作用,因为你可以更改图像的url,但它仍然会触发已加载事件。实际上,根据当前代码,它基本上正常工作-它不检查你指向“图像”的url是否有效并且确实是一张图片,它只在img准备好并更改背景时触发事件。代码中的假设是您的url指向一个有效的图像,并且我认为除了问题之外不需要任何进一步的错误检查。
function onImageLoaded(url, callback) {
const img = new Image();
img.src = url;
img.onloadend = callback; //Image has loaded or failed
return;
}
它适用于背景图片和img标签。