若是可使用谷歌,推荐查看延迟加载图像和视频javascript
使用JavaScript实现的思想:监听用户滚动的状态,若是用户滚动的可视区域中有须要显示的图片,就须要把对应图片的src
写入到img
标签中,浏览器会自动加载图片而且显示。css
<!-- 将图片的正确连接保存到data-src中 --> <img data-src="http://img.pconline.com.cn/images/upload/upc/tx/wallpaper/1301/05/c0/17135331_1357355776882.jpg" class="lazy-image" />
class lazyImage { constructor() { // 获取到页面中全部的img标签,而且将伪数组变为数组 this.imgs = Array.from(document.querySelectorAll('img')); this.imgsLength = this.imgs.length; // window.onscroll = this.debounce(this.onScrollEvent.bind(this), 200); window.addEventListener( 'scroll', // 回调函数的this指向全局,须要手动绑定构造函数中的this // this.onScrollEvent.call(this); // 能够写成节流/防抖函数,提升性能 this.debounce(this.onScrollEvent.bind(this), 200) ); // 页面一进入就须要查看可视范围内的图片 this.init(); } onScrollEvent() { // 须要监听鼠标滑过的高度 let imgs = this.imgs; let height = document.documentElement.clientHeight; imgs.forEach((item, index) => { if (item) { let imgShow = item.getBoundingClientRect(); if (imgShow.top < height) { let src = item.dataset.src; item.setAttribute('src', src); // 防止数组的塌陷问题 imgs[index] = null; } } else { this.imgsLength--; if (this.imgsLength == 0) { // 已经所有显示,须要remove滑动事件 document.removeEventListener('scroll', this.onScrollEvent); } } }); } init() { // 须要使用到IntersectionObserver,异步观察目标元素的方法,须要考虑到兼容性的问题 if ('IntersectionObserver' in window) { var intersectionObserver = new IntersectionObserver(function(entries) { entries.forEach((entry, index) => { if (entry.isIntersecting) { let lazyImage = entry.target; lazyImage.src = lazyImage.dataset.src; //中止对一个对象的关查 intersectionObserver.unobserve(lazyImage); } }); }); this.imgs.forEach(item => { intersectionObserver.observe(item); }); } else { this.onScrollEvent(); } } debounce(func, wait = 200) { let timeout; return function() { let context = this; let args = arguments; if (timeout) clearTimeout(timeout); timeout = setTimeout(() => { func.apply(context, args); }, wait); }; } } new lazyImage();
img
上面有一个loading
的属性,它可以指定浏览器如何加载图形html
eager
当即加载图像,无论它是否在可视视口(visible viewport)以外(默认值)。java
lazy
延迟加载图像,直到它和视口接近到一个计算获得的距离,由浏览器定义。web
使用方法:<img loading="lazy" src="" width="400" height="400" alt="">
数组
若是须要本身测试的话,去找大量的图片也很差找,我这是在浏览网站的时候发现的一个demo
,直接复制,而后在网络那里看请求的发送浏览器
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <meta http-equiv="X-UA-Compatible" content="ie=edge" /> <title>图片懒加载--使用img属性</title> <meta name="viewport" content="initial-scale=1,maximum-scale=1, minimum-scale=1" /> <script type="text/javascript"> document.documentElement.style.fontSize = (document.documentElement.clientWidth / 640) * 100 + 'px'; </script> <link rel="stylesheet" href="./style.css" /> </head> <body> <img loading="lazy" src="https://placekitten.com/400/400" width="400" height="400" alt="" /> <img loading="lazy" src="https://placekitten.com/401/401" width="401" height="401" alt="" /> <img loading="lazy" src="https://placekitten.com/402/402" width="402" height="402" alt="" /> <img loading="lazy" src="https://placekitten.com/403/403" width="403" height="403" alt="" /> <img loading="lazy" src="https://placekitten.com/404/404" width="404" height="404" alt="" /> <img loading="lazy" src="https://placekitten.com/405/405" width="405" height="405" alt="" /> <img loading="lazy" src="https://placekitten.com/406/406" width="406" height="406" alt="" /> <img loading="lazy" src="https://placekitten.com/407/407" width="407" height="407" alt="" /> <img loading="lazy" src="https://placekitten.com/408/408" width="408" height="408" alt="" /> <img loading="lazy" src="https://placekitten.com/409/409" width="409" height="409" alt="" /> <img loading="lazy" src="https://placekitten.com/410/410" width="410" height="410" alt="" /> <img loading="lazy" src="https://placekitten.com/411/411" width="411" height="411" alt="" /> <img loading="lazy" src="https://placekitten.com/412/412" width="412" height="412" alt="" /> <img loading="lazy" src="https://placekitten.com/413/413" width="413" height="413" alt="" /> <img loading="lazy" src="https://placekitten.com/414/414" width="414" height="414" alt="" /> <img loading="lazy" src="https://placekitten.com/415/415" width="415" height="415" alt="" /> <img loading="lazy" src="https://placekitten.com/416/416" width="416" height="416" alt="" /> <img loading="lazy" src="https://placekitten.com/417/417" width="417" height="417" alt="" /> <img loading="lazy" src="https://placekitten.com/418/418" width="418" height="418" alt="" /> <img loading="lazy" src="https://placekitten.com/419/419" width="419" height="419" alt="" /> <img loading="lazy" src="https://placekitten.com/420/420" width="420" height="420" alt="" /> <img loading="lazy" src="https://placekitten.com/421/421" width="421" height="421" alt="" /> <img loading="lazy" src="https://placekitten.com/422/422" width="422" height="422" alt="" /> <img loading="lazy" src="https://placekitten.com/423/423" width="423" height="423" alt="" /> <img loading="lazy" src="https://placekitten.com/424/424" width="424" height="424" alt="" /> <img loading="lazy" src="https://placekitten.com/425/425" width="425" height="425" alt="" /> <img loading="lazy" src="https://placekitten.com/426/426" width="426" height="426" alt="" /> <img loading="lazy" src="https://placekitten.com/427/427" width="427" height="427" alt="" /> <img loading="lazy" src="https://placekitten.com/428/428" width="428" height="428" alt="" /> <img loading="lazy" src="https://placekitten.com/429/429" width="429" height="429" alt="" /> <img loading="lazy" src="https://placekitten.com/430/430" width="430" height="430" alt="" /> <img loading="lazy" src="https://placekitten.com/431/431" width="431" height="431" alt="" /> <img loading="lazy" src="https://placekitten.com/432/432" width="432" height="432" alt="" /> <img loading="lazy" src="https://placekitten.com/433/433" width="433" height="433" alt="" /> <img loading="lazy" src="https://placekitten.com/434/434" width="434" height="434" alt="" /> <img loading="lazy" src="https://placekitten.com/435/435" width="435" height="435" alt="" /> <img loading="lazy" src="https://placekitten.com/436/436" width="436" height="436" alt="" /> <img loading="lazy" src="https://placekitten.com/437/437" width="437" height="437" alt="" /> <img loading="lazy" src="https://placekitten.com/438/438" width="438" height="438" alt="" /> <img loading="lazy" src="https://placekitten.com/439/439" width="439" height="439" alt="" /> <img loading="lazy" src="https://placekitten.com/440/440" width="440" height="440" alt="" /> <img loading="lazy" src="https://placekitten.com/441/441" width="441" height="441" alt="" /> <img loading="lazy" src="https://placekitten.com/442/442" width="442" height="442" alt="" /> <img loading="lazy" src="https://placekitten.com/443/443" width="443" height="443" alt="" /> <img loading="lazy" src="https://placekitten.com/444/444" width="444" height="444" alt="" /> <img loading="lazy" src="https://placekitten.com/445/445" width="445" height="445" alt="" /> <img loading="lazy" src="https://placekitten.com/446/446" width="446" height="446" alt="" /> <img loading="lazy" src="https://placekitten.com/447/447" width="447" height="447" alt="" /> <img loading="lazy" src="https://placekitten.com/448/448" width="448" height="448" alt="" /> <img loading="lazy" src="https://placekitten.com/449/449" width="449" height="449" alt="" /> <img loading="lazy" src="https://placekitten.com/450/450" width="450" height="450" alt="" /> <img loading="lazy" src="https://placekitten.com/451/451" width="451" height="451" alt="" /> <img loading="lazy" src="https://placekitten.com/452/452" width="452" height="452" alt="" /> <img loading="lazy" src="https://placekitten.com/453/453" width="453" height="453" alt="" /> <img loading="lazy" src="https://placekitten.com/454/454" width="454" height="454" alt="" /> <img loading="lazy" src="https://placekitten.com/455/455" width="455" height="455" alt="" /> <img loading="lazy" src="https://placekitten.com/456/456" width="456" height="456" alt="" /> <img loading="lazy" src="https://placekitten.com/457/457" width="457" height="457" alt="" /> <img loading="lazy" src="https://placekitten.com/458/458" width="458" height="458" alt="" /> <img loading="lazy" src="https://placekitten.com/459/459" width="459" height="459" alt="" /> <img loading="lazy" src="https://placekitten.com/460/460" width="460" height="460" alt="" /> <img loading="lazy" src="https://placekitten.com/461/461" width="461" height="461" alt="" /> <img loading="lazy" src="https://placekitten.com/462/462" width="462" height="462" alt="" /> <img loading="lazy" src="https://placekitten.com/463/463" width="463" height="463" alt="" /> <img loading="lazy" src="https://placekitten.com/464/464" width="464" height="464" alt="" /> <img loading="lazy" src="https://placekitten.com/465/465" width="465" height="465" alt="" /> <img loading="lazy" src="https://placekitten.com/466/466" width="466" height="466" alt="" /> <img loading="lazy" src="https://placekitten.com/467/467" width="467" height="467" alt="" /> <img loading="lazy" src="https://placekitten.com/468/468" width="468" height="468" alt="" /> <img loading="lazy" src="https://placekitten.com/469/469" width="469" height="469" alt="" /> <img loading="lazy" src="https://placekitten.com/470/470" width="470" height="470" alt="" /> <img loading="lazy" src="https://placekitten.com/471/471" width="471" height="471" alt="" /> <img loading="lazy" src="https://placekitten.com/472/472" width="472" height="472" alt="" /> <img loading="lazy" src="https://placekitten.com/473/473" width="473" height="473" alt="" /> <img loading="lazy" src="https://placekitten.com/474/474" width="474" height="474" alt="" /> <img loading="lazy" src="https://placekitten.com/475/475" width="475" height="475" alt="" /> <img loading="lazy" src="https://placekitten.com/476/476" width="476" height="476" alt="" /> <img loading="lazy" src="https://placekitten.com/477/477" width="477" height="477" alt="" /> <img loading="lazy" src="https://placekitten.com/478/478" width="478" height="478" alt="" /> <img loading="lazy" src="https://placekitten.com/479/479" width="479" height="479" alt="" /> <img loading="lazy" src="https://placekitten.com/480/480" width="480" height="480" alt="" /> <img loading="lazy" src="https://placekitten.com/481/481" width="481" height="481" alt="" /> <img loading="lazy" src="https://placekitten.com/482/482" width="482" height="482" alt="" /> <img loading="lazy" src="https://placekitten.com/483/483" width="483" height="483" alt="" /> <img loading="lazy" src="https://placekitten.com/484/484" width="484" height="484" alt="" /> <img loading="lazy" src="https://placekitten.com/485/485" width="485" height="485" alt="" /> <img loading="lazy" src="https://placekitten.com/486/486" width="486" height="486" alt="" /> <img loading="lazy" src="https://placekitten.com/487/487" width="487" height="487" alt="" /> <img loading="lazy" src="https://placekitten.com/488/488" width="488" height="488" alt="" /> <img loading="lazy" src="https://placekitten.com/489/489" width="489" height="489" alt="" /> <img loading="lazy" src="https://placekitten.com/490/490" width="490" height="490" alt="" /> <img loading="lazy" src="https://placekitten.com/491/491" width="491" height="491" alt="" /> <img loading="lazy" src="https://placekitten.com/492/492" width="492" height="492" alt="" /> <img loading="lazy" src="https://placekitten.com/493/493" width="493" height="493" alt="" /> <img loading="lazy" src="https://placekitten.com/494/494" width="494" height="494" alt="" /> <img loading="lazy" src="https://placekitten.com/495/495" width="495" height="495" alt="" /> <img loading="lazy" src="https://placekitten.com/496/496" width="496" height="496" alt="" /> <img loading="lazy" src="https://placekitten.com/497/497" width="497" height="497" alt="" /> <img loading="lazy" src="https://placekitten.com/498/498" width="498" height="498" alt="" /> <img loading="lazy" src="https://placekitten.com/499/499" width="499" height="499" alt="" /> </body> </html>