在你的实际HTML标记中,唯一可靠的方法来执行fadeIn()
一个图片是在HTML标记中设置一个onload
处理程序,像这样:
<div id="image">
<img id="preload" onload="fadeIn(this)" src="https://photos.smugmug.com/photos/i-NLws86p/0/b356e43a/L/i-NLws86p-S.jpg" style="display:none;" />
</div>
<script>
window.fadeIn = function(obj) {
$(obj).fadeIn(1000);
}
</script>
这里有一个工作演示:https://jsfiddle.net/jfriend00/X82zY/
这种方法的好处是您不需要给每个图像设置ID或类。只需在标记中设置样式和事件处理程序即可。
之所以必须将事件处理程序放在标记中,是因为如果等到页面上的JavaScript运行时再添加事件处理程序,则可能为时已晚。图像可能已经加载完成(特别是如果它在浏览器缓存中),因此您可能会错过 onload
事件。如果您将处理程序放置在HTML标记中,则不会错过 onload
事件,因为处理程序在图像开始加载之前就被分配了。
如果您不想将事件处理程序放在JavaScript中,则可以像这样使用占位符来实现:在实际HTML中使用占位符并使用JavaScript创建实际的图像标签并插入它们,并从占位符中获取图像URL:
<div>
<span class="fadeIn" data-src="https://photos.smugmug.com/photos/i-NLws86p/0/b356e43a/L/i-NLws86p-S.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>
工作演示:https://jsfiddle.net/jfriend00/BNFqM/
第一个选项可以更快地加载您的图像(因为图像加载在页面解析时立即开始),但第二个选项可以让您对该过程具有更多的程序控制权。
$(document).ready()
函数中。我很高兴选项2适用于您,但如果您想找出为什么其他事情不起作用,选项1也可以。 - jfriend00this.style.display = "inline";
在普通的 JavaScript 中使其可见。 - jfriend00