延迟加载带有优雅降级的图像(JavaScript)
Lazy loading of images with graceful degradation (JavaScript)
考虑一个带有一堆标签的HTML页面,每个标签都有自己的内容。我想将每个标签转换为JavaScript支持的幻灯片中的幻灯片。每个标签都可以包含图像,并且应该在这个幻灯片中延迟加载。我不希望所有的图片一次加载。
另一方面,没有启用JavaScript的用户和搜索引擎应该只看到标记和所有图像。当启用JavaScript时,如何避免图像加载,以及如何确保在未启用JavaScript时加载图像?
一种方法是用以下格式替换所有图像:
<img src="" data-src="myimage.png">
这个解决方案的问题是没有优雅的降级。
相反,我必须这样做:
<img src="myimage.png">
这样做的问题是,您无法阻止浏览器加载HTML页面中的所有图像。当文档准备好时,我尝试用几种方法修改HTML。例如,将图像中的所有src属性替换为data-src,清空整个body等等。
我真的要牺牲优雅的退化吗?
最简单的方法可能是复制<noscript>
标记中包含的图像标记并使用它们的src
属性。以上或以下,你可以有自定义的data-src
属性相同的标签,检测和延迟加载它们与Javascript。
可以同时包含两个版本:
<img src="" data-src="myimage.png">
<noscript>
<img src="myimage.png">
</noscript>
可能很好地将单独的<img>
标记关联在那里,以便您的JavaScript代码可以保持它们同步。例如:
<img src="" class='lazy' data-master="myimage">
<noscript>
<img id="myimage" class='super-sized interesting' src="myimage.png">
</noscript>
然后你的JS代码可以确保"脚本"图像拾取类等,这样你就不必手动保持两个版本更新(原谅jQuery的例子;当然,你可以这样做,但你想):
$('img.lazy').each(function() {
var $lazy = $(this),
master = $('#' + $lazy.data('master'))[0];
$lazy.src(master.src);
$lazy.className += master.className;
// etc
});
相关文章:
- 更改下拉菜单上的图像javascript/jquery
- Chrome:刷新页面后未呈现的背景图像 + JavaScript 重定向
- 更改背景图像 - JavaScript
- 目标 css:背景图像 Javascript
- 如何显示数组中的图像?JavaScript
- 淡入淡出两个图像[JavaScript]
- 获取图像ID并更改图像JavaScript
- 显示多个图像-javascript
- 在不损失质量的情况下调整图像JavaScript/jQuery的大小
- 选择某个列表项时弹出的图像-javascript
- 将生成的随机数存储在变量中,然后将该变量作为文件名调用以显示图像.Javascript
- 更改悬停时的图像Javascript
- 在reactjs中呈现本地图像/javascript片段
- 键下时的反向图像 - Javascript
- 将所有图像替换为一个图像 Javascript
- 单击显示随机图像(Javascript)
- 移动图像 ..JavaScript 将变量声明为字符串
- 直方图均衡(图像Javascript初学者)
- 预加载库图像.JavaScript(没有JQuery)
- 用不同的图像/按钮替换图像 - javascript