延迟加载由 appendChild() 在 javascript/leaflet 中附加的图像
Lazy loading images that are appended by appendChild() in javascript/leaflet
我正在开发一个网站,http://atlantaartmap.com,该网站使用传单/地图框来绘制亚特兰大周围的街头艺术。图像详细信息是从 geojson 文件中读取的。当传单阅读地理时,我将缩略图附加到底部的导航栏,该导航栏也链接到相应的地图标记。附加图像而不是硬编码它们允许我更新单个文件以更改页面的各个方面。
我正在尝试在这些图像上使用延迟加载,但它似乎不适用于使用 java 脚本附加的项目。有什么提示吗?
这是我正在测试的页面的懒惰版本:http://atlantaartmap.com/lazy.html
这是该网站的正常版本:http://atlantaartmap.com
提前谢谢。
编辑:为了澄清起见,我希望延迟加载脚本避免加载图像,直到它们在窗口内。
我会扔掉插件并自己做,这实际上非常简单。您创建一个图像元素,将加载图像作为源,将其作为子元素附加到您的(链接)元素:
var image = new Image();
image.src = 'images/loading.gif';
link.appendChild(image);
接下来,您将使用实际图像作为源创建另一个图像元素,但不需要将其附加到任何内容。只需侦听要触发的 onload 事件,然后交换源:
var original = new Image();
original.src = feature.properties.image;
original.onload = function () {
image.src = original.src;
}
这应该像一个魅力。现在你可以省略jQuery和插件,这样加载起来就少了两个依赖资产,所以你的页面加载速度也更快。双赢局面,如果你问我;)
下面是 JSFiddle 上概念的示例:http://jsfiddle.net/waud32ta/
我真的建议你试试懒惰的大小。与其他懒惰加载器不同,它是一个自初始化脚本,可自动检测新元素及其可见性。因此,您无需在此处调用或配置任何内容。只需将图像附加到类lazyload
,然后将源添加到 data-src
属性。就是这样:
<img src="spinner.gif" data-src="image.jpg" class="lazyload" />
这是一个简单的演示。
window.lazySizesConfig = window.lazySizesConfig || {};
window.lazySizesConfig.expand = 40;
window.lazySizesConfig.addClasses = true;
document.querySelector('.add').onclick = function(){
document.querySelector('.scroll-doc').innerHTML = document.querySelector('.template').innerHTML;
};
.scroll-area {
overflow-x: auto;
overflow-y: hidden;
position: relative;
width: 80%;
margin: auto;
padding: 2px 2px 10px;
}
.scroll-doc {
display: table;
position: relative;
text-align: left;
}
.scroll-item {
display: table-cell;
vertical-align: middle;
padding: 10px;
}
.intrinsic {
position: relative;
padding-bottom: 75%;
height: 0px;
}
.lazyload,
.lazyloading {
opacity: 0;
}
.lazyloaded {
opacity: 1;
transition: opacity 300ms;
}
.add {
font-size: large;
font-weight: bold;
}
<script src="http://afarkas.github.io/lazysizes/lazysizes.min.js"></script>
<button type="button" class="add">add to scroll area</button>
<div class="scroll-area">
<div class="scroll-doc"></div>
</div>
<script type="text/html" class="template">
<div class="scroll-item">
<div class="intrinsic">
<img
class="lazyload"
data-src="http://lorempixel.com/400/300/animals/1"
alt="" />
</div>
</div>
<div class="scroll-item">
<div class="intrinsic">
<img
class="lazyload"
data-src="http://lorempixel.com/400/300/animals/2"
alt="" />
</div>
</div>
<div class="scroll-item">
<div class="intrinsic">
<img
class="lazyload"
data-src="http://lorempixel.com/400/300/animals/3"
alt="" />
</div>
</div>
<div class="scroll-item">
<div class="intrinsic">
<img
class="lazyload"
data-src="http://lorempixel.com/400/300/animals/4"
alt="" />
</div>
</div>
<div class="scroll-item">
<div class="intrinsic">
<img
class="lazyload"
data-src="http://lorempixel.com/400/300/animals/5"
alt="" />
</div>
</div>
<div class="scroll-item">
<div class="intrinsic">
<img
class="lazyload"
data-src="http://lorempixel.com/400/300/animals/6"
alt="" />
</div>
</div>
<div class="scroll-item">
<div class="intrinsic">
<img
class="lazyload"
data-src="http://lorempixel.com/400/300/animals/7"
alt="" />
</div>
</div>
<div class="scroll-item">
<div class="intrinsic">
<img
class="lazyload"
data-src="http://lorempixel.com/400/300/animals/8"
alt="" />
</div>
</div>
<div class="scroll-item">
<div class="intrinsic">
<img
class="lazyload"
data-src="http://lorempixel.com/400/300/animals/9"
alt="" />
</div>
</div>
<div class="scroll-item">
<div class="intrinsic">
<img
class="lazyload"
data-src="http://lorempixel.com/400/300/food/1"
alt="" />
</div>
</div>
<div class="scroll-item">
<div class="intrinsic">
<img
class="lazyload"
data-src="http://lorempixel.com/400/300/food/2"
alt="" />
</div>
</div>
<div class="scroll-item">
<div class="intrinsic">
<img
class="lazyload"
data-src="http://lorempixel.com/400/300/food/3"
alt="" />
</div>
</div>
<div class="scroll-item">
<div class="intrinsic">
<img
class="lazyload"
data-src="http://lorempixel.com/400/300/food/4"
alt="" />
</div>
</div>
<div class="scroll-item">
<div class="intrinsic">
<img
class="lazyload"
data-src="http://lorempixel.com/400/300/food/5"
alt="" />
</div>
</div>
<div class="scroll-item">
<div class="intrinsic">
<img
class="lazyload"
data-src="http://lorempixel.com/400/300/food/6"
alt="" />
</div>
</div>
<div class="scroll-item">
<div class="intrinsic">
<img
class="lazyload"
data-src="http://lorempixel.com/400/300/food/7"
alt="" />
</div>
</div>
<div class="scroll-item">
<div class="intrinsic">
<img
class="lazyload"
data-src="http://lorempixel.com/400/300/food/8"
alt="" />
</div>
</div>
<div class="scroll-item">
<div class="intrinsic">
<img
class="lazyload"
data-src="http://lorempixel.com/400/300/food/9"
alt="" />
</div>
</div>
</script>
尝试调用
$("img.navthumb").lazyload();
在使用 JavaScript 方法 appendChild() 动态注入缩略图代码后。
另外,如果您发布JSFiddle,我将能够更好地帮助您。
希望对您有所帮助!!
好的,到目前为止,您已经强调应该避免使用jQuery。但我认为可以使用只包含您真正需要的逻辑的微插件。其中之一是正义的懒惰。它是一个延迟加载库,没有外部依赖项,并提供紧凑的图像加载代码。
首先,您必须定义占位符:
<span data-src="path/to/image" data-alt="some alt text"
data-title="some title"
class="justlazy-placeholder">
</span>
也可以将占位符定义为 img-tag 以对 SEO 更加友好。另一个功能是加载具有srcset属性的响应式图像。
第二步是通过javascript初始化延迟加载:
Justlazy.registerLazyLoadByClass("justlazy-placeholder"{
// defines that the image will be loaded
// 200 pixels before it gets visible
threshold: 200
});
- 如何使用url加载程序在webpack中导入多个图像
- nodejs-expressjs上传图像并显示它们
- 使用JSP从服务器检索和显示图像
- 角度:在ng重复上切换图像
- 画廊图像未显示
- Phonegap-(安卓/iphone)多个图像的图像库出现问题
- Javascript排序的图像弹出窗口..可以't单独弹出
- 画布数据到图像
- Windows8应用程序(html&Javascript):从图片库(除了文件选择器)显示图像的另一种方式
- 使图像在单击时展开到不大于浏览器
- Html页面上的多个Base64图像和平滑加载
- UIAutomation放大图像
- 使用javascript在Flash中加载外部图像
- 可以在这里为背景图像设置滤镜吗
- 当图像转换为本地存储的DataURL时,EXIF被删除
- 使用 js 将背景图像设置为 HTML
- Javascript将图像src更改为淡入淡出
- 无法在本地计算机中将画布另存为图像
- 压缩phonegap中ios的图像插件
- 延迟加载由 appendChild() 在 javascript/leaflet 中附加的图像