好吧,标题几乎描述了我的问题:
如何在完全加载后动态加载背景图像?有时,我必须使用如此大的背景,以便浏览器下载它可能需要一段时间。我宁愿“在背景中加载它”并让它在满载时淡入。
我认为jQuery最好是使用,但我也希望我的背景能够在JavaScript被禁用的情况下出现。如果真的不可能,那就这样吧,但我认为是吗?
祝你好运, 阿特
修改
非常感谢!多年来我一直被这个问题所困扰,只是想不出一个简单易行的方法。
我将Jeffrey的Javascript解决方案转换为jQuery解决方案,因为jQuery的内置淡入淡出看起来非常棒。
我会在这里发布,以防其他人有同样的问题:
<script type='text/javascript' src='http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js'></script>
<script type='text/javascript'>
$(document).ready(function() {
$('#img').css('opacity','0').load(function() {
$(this).animate({
opacity: 1
}, 500);
});
});
</script>
<img src='yourimage.jpg' id='img'/>
答案 0 :(得分:7)
如果图片包含在img
元素中:
<img src="bg.jpg" id="img" onload="this.style.opacity='1'">
<script>
document.getElementById("img").style.opacity="0";
</script>
如果JavaScript被禁用,那么应该正常加载图像,但只有在加载时才显示它,假设它已启用。
有一点需要注意(我忽略了):如果某个浏览器的display
属性为none
,则某些浏览器甚至不会尝试加载图像。这就是为什么这个方法使用opacity
属性。
答案 1 :(得分:3)
禁用JS时无法执行此操作。但是,您可以做的是在CSS中设置背景图像,然后使用以下脚本(假设元素具有ID myelem
)。
(function() {
var elm = document.getElementById('myelem'),
url = 'background image URL here';
elm.style.backgroundImage = "none";
var tmp = new Image();
tmp.onload = function() {
elm.style.backgroundImage = "url('"+url+"')";
// or insert some other special effect code here.
};
tmp.src = url;
})();
编辑:尽管如此,请确保您的背景图像是最佳的。如果它们是PNG,请尝试使用尽可能小的颜色表进行索引,或者确保在没有透明度的情况下删除Alpha通道。如果它们是JPEG,请尝试调整压缩。
答案 2 :(得分:1)
检查此页面上的示例: http://www.w3schools.com/jsref/event_img_onload.asp
使用“image.onload”只会在图像准备就绪时启动代码
答案 3 :(得分:1)
如果没有javascript,您就无法拥有事件,因此您无法知道图像是否已加载,至少对于第一次渲染而言。
你也可以使用css预加载(将图像作为背景放在隐藏的div中),但这样可以在你第一次刷新时更好,而不是在加载时。
答案 4 :(得分:1)
您可以为图像设置变量,加载后,将其设置为正文背景:
var my_bg = new Image();
my_bg.src = "url(mybackground.png)";
document.style.backgroundImage = my_bg;
答案 5 :(得分:1)
您正在寻找的是onLoad方法的图像。如果您使用display:none设置图像,则不会显示该图像。要解决可能缺少javascript的问题,请执行以下操作:
<body style="background-image:url(image.png);">
<img src="image.png" style="display:none" onLoad="changeBackground();" />
</body>
<script>
document.body.style.backgroundImage = "";
function changeBackground(){
document.body.style.backgroundImage = "url(image.png)";
}
</script>
这样,如果没有启用javascript,bg将正常加载。如果是,它将显示在最后