【发布时间】:2010-05-24 14:13:30
【问题描述】:
我有一个包含多个画廊的页面,包括手风琴和滑块。问题是页面需要永远加载。有没有一种方法可以将图像包装在一些代码中或对其应用一个类以强制它仅在其他所有内容加载后才加载?
【问题讨论】:
标签: javascript jquery html css
我有一个包含多个画廊的页面,包括手风琴和滑块。问题是页面需要永远加载。有没有一种方法可以将图像包装在一些代码中或对其应用一个类以强制它仅在其他所有内容加载后才加载?
【问题讨论】:
标签: javascript jquery html css
当然可以。用“#”替换你的 img src 属性,并添加一个自定义属性,如下所示:
<img src="#" data-delayedsrc="/img/myimage.png" />
然后,在页面加载时添加一个 javascript 行,执行如下操作:
$('img').each(function(){
$(this).attr('src', $(this).data('delayedsrc'));
});
【讨论】:
如果您使用的是 jQuery(我假设您是这样标记的),请查看 Lazy Load Plugin for jQuery。它会延迟加载视口之外的图像,直到用户滚动到它们为止。
2015 年更新:此插件曾一度损坏,但现在可以再次使用。最后一条评论说了这么多,但我几乎错过了它,因为它隐藏在折叠的 cmets 中。
【讨论】:
延迟加载图像(和 iFrame)的一种简单方法是结合使用纯 JS、jQuery.data() 和自定义 HTML5 data-* 属性。图像的 src 最初可以指向加载的 GIF。 data-* 属性包含您最终要加载的图像的 URL 路径。纯 JS 设置延迟(下例中为 3000 毫秒),然后执行 jQuery.data(),将图像的 src 设置为预期图像。
下面的示例使用 class="load-delay" 对每个图像执行。
现场示例:http://seandebutts.com/2013/07/03/html5-delay-loading-images-iframes/
代码
JS 和 jQuery:
$(document).ready(function () {
setTimeout(function () {
$('.load-delay').each(function () {
var imagex = $(this);
var imgOriginal = imagex.data('original');
$(imagex).attr('src', imgOriginal);
});
}, 3000);
});
HTML 和 jQuery 库:
<!DOCTYPE html>
<html lang="en" xmlns="http://www.w3.org/1999/xhtml">
<head>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.1/jquery.min.js"></script>
<meta charset="utf-8" />
</head>
<body>
<h1>Loading-Delayed Image</h1>
<img class="load-delay" src="http://i.imgur.com/7ZMlu3C.gif" data-original="http://oi42.tinypic.com/9sqmaf.jpg" />
</body>
</html>
【讨论】:
在 HTML 中只保留一张图片,以便查看者可以开始使用,然后使用 jQuery 和
注入其余图片$(document).ready(function() {
//load rest of the images
});
您还可以使用事件加载器和 AJAX 或“按需加载”,只需构建一个简单的回调函数,如果它是自动旋转画廊或点击加载。
【讨论】: