图片懒加载功能在一些图片比较多的站点中很是常见, 对于网站的访问速度有很大的帮助和提高, 同时能够减轻资源服务器的压力.javascript
这里我就用lozad.js来实现一个图片懒加载功能.css
<script type="text/javascript" src="https://cdn.jsdelivr.net/npm/lozad/dist/lozad.min.js"></script>
复制代码
# You can install lozad with npm
$ npm install --save lozad
# Alternatively you can use Yarn
$ yarn add lozad
# Another option is to use Bower
$ bower install lozad
复制代码
// using ES6 modules
import lozad from 'lozad'
// using CommonJS modules
var lozad = require('lozad')
复制代码
<img class="lozad" data-src="image.png" />
复制代码
// 基础使用
const observer = lozad(); // 元素默认为 '.lozad'
observer.observe();
复制代码
// 个性配置
const observer = lozad('.lozad',{
rootMargin: '30px 0px',
threshold: 1
});
observer.observe();
复制代码
// 添加生命周期
const observer = lozad('.lozad', {
load: function(el) { // 生命周期:加载图片前
console.log(el.getAttribute('data-name') + '加载前(start)')
// 须要自定义图片src
el.src = el.getAttribute('data-src')
},
loaded: function (el) { // 加载完毕,实际图片还在pending中,页面还没显示图片
console.log(el.getAttribute('data-name') + '加载完毕(end)')
console.log(el)
}
})
observer.observe() // 加载,若是有新图片加入,再次执行便可
复制代码
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<script type="text/javascript" src="https://cdn.jsdelivr.net/npm/lozad/dist/lozad.min.js"></script>
<style> img { display: inline-block; width: 300px; height: 300px; background-color: beige; } </style>
</head>
<body>
<ul>
<li>
<h2>第1张</h2>
<img data-name="第1张" class="lozad" data-src="http://5b0988e595225.cdn.sohucs.com/images/20181210/f3ecdb2198864d25bf05e54d7fc37ad7.jpeg" />
</li>
<li>
<h2>第2张</h2>
<img data-name="第2张" class="lozad" data-src="http://img3.imgtn.bdimg.com/it/u=2116967214,2723885965&fm=11&gp=0.jpg" />
</li>
<li>
<h2>第3张</h2>
<img data-name="第3张" class="lozad" data-src="http://img4.imgtn.bdimg.com/it/u=3021719368,4105741738&fm=11&gp=0.jpg" />
</li>
<li>
<h2>第4张</h2>
<img data-name="第4张" class="lozad" data-src="http://img2.imgtn.bdimg.com/it/u=3988069150,2895360584&fm=26&gp=0.jpg" />
</li>
<li>
<h2>第5张</h2>
<img data-name="第5张" class="lozad" data-src="http://img4.imgtn.bdimg.com/it/u=1994004472,3641688886&fm=26&gp=0.jpg" />
</li>
<li>
<h2>第6张</h2>
<img data-name="第6张" class="lozad" data-src="http://img0.imgtn.bdimg.com/it/u=3593732750,2636518232&fm=26&gp=0.jpg" />
</li>
<li>
<h2>第7张</h2>
<img data-name="第7张" class="lozad" data-src="http://img0.imgtn.bdimg.com/it/u=1572085073,3840873353&fm=26&gp=0.jpg" />
</li>
</ul>
<script> // // 基础使用 // const observer = lozad(); // observer.observe(); // // 个性配置 // const observer = lozad('.lozad',{ // rootMargin: '10px 0px', // threshold: 0.1 // }); // observer.observe(); // 添加生命周期 const observer = lozad('.lozad', { load: function(el) { // 生命周期:加载图片前 console.log(el.getAttribute('data-name') + '加载前(start)') // 须要自定义图片src el.src = el.getAttribute('data-src') }, loaded: function (el) { // 加载完毕,实际图片还在pending中,页面还没显示图片 console.log(el.getAttribute('data-name') + '加载完毕(end)') console.log(el) } }) observer.observe() // 加载,若是有新图片加入,再次执行便可 </script>
</body>
</html>
复制代码
lozad.js出了能够懒加载图片, 它还能实现视频懒加载、iframe懒加载、其余dom节点渐入效果等等功能html
详细的配置和更多功能请参照官网vue
配置详解见:java
rootMargin and thresholdes6
npm地址:npm
lozad.jsbash
其余文章:服务器
JS的防抖、节流函数dom