什么是懒加载,大白话就是只加载用户所看到区域的资源,那么懒加载怎么实现呢?
实现原理就是监听滚动轮,判断当前图片是否在可视区内(包括滚动高度),如果不在就则进行加载
那么就存在一个问题就是,频繁操作DOM,对性能极其不友好,所以我们需要进行节流控制~具体代码如下所示:
<!DOCTYPE html>
<html>
<head>
<title>图片lazyload</title>
<style>
img {
display: block;
width: 100%;
}
</style>
</head>
<body>
<img src="https://8.url.cn/edu/lego_modules/edu-ui/0.0.1/img/nohash/loading.gif" data-src="https://img.alicdn.com/tps/i4/TB1Njg2bjuhSKJjSspmSuwQDpXa.jpg">
<img src="https://8.url.cn/edu/lego_modules/edu-ui/0.0.1/img/nohash/loading.gif" data-src="https://gw.alicdn.com/bao/uploaded/i2/2958596375/TB10kTSRVXXXXajXFXXXXXXXXXX_!!0-item_pic.jpg">
<img src="https://8.url.cn/edu/lego_modules/edu-ui/0.0.1/img/nohash/loading.gif" data-src="https://gw.alicdn.com/bao/uploaded/i1/TB11mpAJVXXXXbtXVXXXXXXXXXX_!!0-item_pic.jpg">
<img src="https://8.url.cn/edu/lego_modules/edu-ui/0.0.1/img/nohash/loading.gif" data-src="https://gw.alicdn.com/bao/uploaded/i4/TB11DvzQXXXXXbQaFXXXXXXXXXX_!!0-item_pic.jpg">
<img src="https://8.url.cn/edu/lego_modules/edu-ui/0.0.1/img/nohash/loading.gif" data-src="https://gw.alicdn.com/bao/uploaded/i3/2807304908/TB1n.VeXm7PL1JjSZFHXXcciXXa_!!0-item_pic.jpg">
<img src="https://8.url.cn/edu/lego_modules/edu-ui/0.0.1/img/nohash/loading.gif" data-src="https://gw.alicdn.com/bao/uploaded/i2/TB1EGMPPFXXXXc2XXXXXXXXXXXX_!!0-item_pic.jpg">
<img src="https://8.url.cn/edu/lego_modules/edu-ui/0.0.1/img/nohash/loading.gif" data-src="https://gw.alicdn.com/bao/uploaded/i3/3310597052/TB1o4hQSpXXXXbraXXXXXXXXXXX_!!0-item_pic.jpg">
<img src="https://8.url.cn/edu/lego_modules/edu-ui/0.0.1/img/nohash/loading.gif" data-src="https://gw.alicdn.com/bao/uploaded/i4/1891815962/TB1zo5hfeEJL1JjSZFGXXa6OXXa_!!2-item_pic.png">
<img src="https://8.url.cn/edu/lego_modules/edu-ui/0.0.1/img/nohash/loading.gif" data-src="https://gw.alicdn.com/bao/uploaded/i1/TB1sdj1RFXXXXXEXVXXXXXXXXXX_!!0-item_pic.jpg">
<img src="https://8.url.cn/edu/lego_modules/edu-ui/0.0.1/img/nohash/loading.gif" data-src="https://gw.alicdn.com/bao/uploaded/i2/TB1uLbcPFXXXXchXFXXXXXXXXXX_!!0-item_pic.jpg">
<img src="https://8.url.cn/edu/lego_modules/edu-ui/0.0.1/img/nohash/loading.gif" data-src="https://gw.alicdn.com/bao/uploaded/i3/3055781561/TB1fqL6b8RRMKJjSZPhXXcZoVXa_!!0-item_pic.jpg">
<img src="https://8.url.cn/edu/lego_modules/edu-ui/0.0.1/img/nohash/loading.gif" data-src="https://gw.alicdn.com/bao/uploaded/i2/1113314630/TB1QLExhfNNTKJjSspcXXb4KVXa_!!0-item_pic.jpg">
<script>
function thorttle(fn,delay,altime) {
let startTime = new Date()
let timer = null
return function(){
let endTime = new Date()
timer && clearTimeout(timer)
if(endTime - startTime >= altime) {
fn()
startTime = endTime
} else {
timer = setTimeout(fn,delay)
}
}
}
const src = 'https://8.url.cn/edu/lego_modules/edu-ui/0.0.1/img/nohash/loading.gif'
function loadImgs() {
let img = document.getElementsByTagName("img")
let len = img.length
let n = 0
return function() {
let clientHeight = document.documentElement.clientHeight
let srcollTop = document.documentElement.scrollTop || document.body.scrollTop
for(let i = n;i < len; i++){
if(img[i].offsetTop < clientHeight + srcollTop){
console.log(img[i].offsetTop)
if(img[i].src === src){
img[i].src = img[i].dataset.src
}
n = n + 1
}
}
}
}
var load = loadImgs()
window.onload = function () {
load()
document.addEventListener("scroll",thorttle(load,500,1000))
}
</script>
</body>
</html>