jfr*_*d00 38
fadeIn()实际HTML标记中图像的唯一可靠方法是在HTML标记中设置onload处理程序,如下所示:
<div id="image">
<img id="preload" onload="fadeIn(this)" src="http://farm8.staticflickr.com/7227/7007769551_3b5b1640ea_b.jpg" style="display:none;" />
</div>
<script>
// this function must be defined in the global scope
window.fadeIn = function(obj) {
$(obj).fadeIn(1000);
}
</script>
Run Code Online (Sandbox Code Playgroud)
这里的工作演示:http://jsfiddle.net/jfriend00/X82zY/
这样做,你不需要给每个图像一个id或类.只需在标记中设置样式和事件处理程序即可.
您必须将事件处理程序放在标记中的原因是,如果您等到页面的javascript运行,则可能为时已晚.图像可能已经加载(特别是如果它在浏览器缓存中),因此您可能错过了该onload事件.如果将处理程序放在HTML标记中,则不会错过该onload事件,因为在图像开始加载之前已分配处理程序.
如果您不想在javascript中放置事件处理程序,那么您可以执行类似这样的操作,在实际HTML中使用占位符作为图像,并使用javascript创建实际图像标记并插入它们并拉出图像占位符的网址:
<div>
<span class="fadeIn" data-src="http://farm8.staticflickr.com/7227/7007769551_3b5b1640ea_b.jpg"></span>
</div>
<script>
$(document).ready(function() {
$(".fadeIn").each(function() {
var src = $(this).data("src");
if (src) {
var img = new Image();
img.style.display = "none";
img.onload = function() {
$(this).fadeIn(1000);
};
$(this).append(img);
img.src = src;
}
});
});
</script>
Run Code Online (Sandbox Code Playgroud)
工作演示:http://jsfiddle.net/jfriend00/BNFqM/
第一个选项将使您的图像加载更快(因为图像加载在页面解析后立即开始),但第二个选项使您可以对该过程进行更多编程控制.
纯Java脚本和CSS解决方案:
巧妙地使用过渡效果。
let images = document.getElementsByTagName("img");
for (let image of images) {
image.addEventListener("load", fadeImg);
image.style.opacity = "0";
}
function fadeImg() {
this.style.transition = "opacity 2s";
this.style.opacity = "1";
}Run Code Online (Sandbox Code Playgroud)
<img src="http://lorempixel.com/400/200/">
<img src="http://lorempixel.com/g/400/200/">
<img src="http://lorempixel.com/400/200/sports/">Run Code Online (Sandbox Code Playgroud)