图片的懒加载 Love The Way You Lie 2022-01-31 01:53 326阅读 0赞 ## 图片懒加载 ## ### 网页上图片点到哪里图片就加载到哪里,不用一次性加载完成 ### #### html主要页面 #### 直接引入js文件,src改成data-src就可以直接进行图片的懒加载 <!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>首页</title> <style> html, body { margin: 0px; padding: 0px; } ul { margin: 0px; padding: 0px; } li { list-style: none; font-size: 0; } li img { min-height: 200px; //给个最小高度,防止图片多次加载 height: 100%; width: 100%; } </style> </head> <body> <ul> <li><img data-src="../home_page/01.jpg" /></li> <li><img data-src="../home_page/02.jpg" /></li> <li><img data-src="../home_page/03.jpg" /></li> <li><img data-src="../home_page/04.jpg" /></li> <li><img data-src="../home_page/05.jpg" /></li> <li><img data-src="../home_page/06.jpg" /></li> <li><img data-src="../home_page/07.jpg" /></li> </ul> <script src="../script/lazy-load.js"></script> <!-- <script src="../script/lazy.image.min.js"></script> <script> LazyImage.init(); </script> --> </body> </html> #### js引入代码 #### // 图片懒加载 var LazyLoad = /** @class */ (function () { function LazyLoad(options) { this.scrollListenerFn = this.scrollListenerFn.bind(this); this.resizeListenerFn = this.resizeListenerFn.bind(this); } LazyLoad.prototype.init = function (params) { this.initParams(params); if (!this.lazyImages) { return; } this.throttleTimer = null; this.defaultImg && this.addDefaultImg(); this.resizeListenerFn(); this.bindEvent(); }; // 初始化外部参数 LazyLoad.prototype.initParams = function (params) { var elements = params.elements; if (!elements.length) { return; } var imgs = Array.prototype.slice.call(elements, 0); var reg = /(^|\s)lazy-bg(\s|$)/; // let reg = new RegExp('(^|\\s)' + 'lazy-bg' + '(\\s|$)')lazy-load imgs.forEach(function (img) { if (reg.test(img.className)) { img.isBg = true; } }); // 再次调用init时,无需进行部分参数初始化 if (this.lazyImages) { this.lazyImages.length !== 0 && this.removeEvent(); this.lazyImages = this.lazyImages.concat(imgs); return; } // 需要懒加载的图片 this.lazyImages = imgs; // 加载时显示的默认图 this.defaultImg = params.defaultImg; // 视口提前距离 this.distance = params.distance || 0; // 存储真实地址的标签 this.tag = params.tag || 'data-src'; // 节流间隔 this.throttle = params.throttle || 200; }; LazyLoad.prototype.bindEvent = function () { document.addEventListener('scroll', this.scrollListenerFn); window.addEventListener('resize', this.resizeListenerFn); window.addEventListener('orientationchange', this.resizeListenerFn); }; LazyLoad.prototype.removeEvent = function () { document.removeEventListener('scroll', this.scrollListenerFn); window.removeEventListener('resize', this.resizeListenerFn); window.removeEventListener('orientationchange', this.removeEventListener); }; LazyLoad.prototype.getWH = function () { this.W = document.documentElement.clientWidth || window.innerWidth; this.H = document.documentElement.clientHeight || window.innerHeight; }; LazyLoad.prototype.scrollListenerFn = function () { var _this = this; if (this.throttleTimer) { return; } this.throttleTimer = setTimeout(function () { _this.throttleTimer = null; _this.lazyLoad(); }, this.throttle); }; //需要获取宽高 LazyLoad.prototype.resizeListenerFn = function () { var _this = this; if (this.throttleTimer) { return; } this.throttleTimer = setTimeout(function () { _this.throttleTimer = null; _this.getWH(); _this.lazyLoad(); }, this.throttle); }; LazyLoad.prototype.isInView = function (image) { var top = image.getBoundingClientRect().top; var left = image.getBoundingClientRect().left; var right = image.getBoundingClientRect().right; var bottom = image.getBoundingClientRect().bottom; // console.log(left <= this.W + this.distance && right >= 0 - this.distance); if (getComputedStyle(image).display !== 'none') { if (top <= this.H + this.distance && bottom >= 0 - this.distance) { return true; } else { return false; } } else { return false; } }; LazyLoad.prototype.lazyLoad = function () { var _this = this; this.lazyImages.forEach(function (image) { if (_this.isInView(image)) { _this.loader(image); } }); }; LazyLoad.prototype.loader = function (image) { var img = new Image(); var imgUrl = image.getAttribute(this.tag); var self = this; img.onload = function (e) { self.succ(image, imgUrl); }; img.src = imgUrl; }; LazyLoad.prototype.addDefaultImg = function () { var _this = this; this.lazyImages.forEach(function (image) { image.isBg ? (image.style.backgroundImage = "url('" + _this.defaultImg + "')") : image.setAttribute('src', _this.defaultImg); }); }; LazyLoad.prototype.succ = function (image, imgUrl) { image.isBg ? (image.style.backgroundImage = "url('" + imgUrl + "')") : (image.src = imgUrl); this.lazyImages = this.lazyImages.filter(function (img) { return img !== image; }); if (this.lazyImages.length === 0) { this.removeEvent(); } }; LazyLoad.prototype.fail = function () { }; LazyLoad.prototype._hasClass = function (el, className) { var reg = new RegExp('(^|\\s)' + className + '(\\s|$)'); return reg.test(el.className); }; return LazyLoad; }()); let lazy = new LazyLoad(); lazy.init({ elements: document.getElementsByTagName('img')}) // setTimeout(function () { // lazy.init({ // elements: document.getElementsByTagName('img') // }); // }, 500)
相关 图片懒加载 ![watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3Nvbmds 青旅半醒/ 2022年11月16日 13:41/ 0 赞/ 325 阅读
相关 图片懒加载 function lazyLoadImg() { var img = document.getElementsByTagName('img'); s 谁践踏了优雅/ 2022年09月28日 13:05/ 0 赞/ 388 阅读
相关 图片懒加载 在一个项目中,如果同时加载的图片太多的话,会导致页面卡顿,这个时候就会用到懒加载。懒加载的实现原理是监听浏览器的滚动条事件,先加载出前面几张图片,然后当滚动条滚动的时候再依次加 分手后的思念是犯贱/ 2022年06月17日 13:49/ 0 赞/ 171 阅读
相关 图片懒加载 1.引入js jquery.lazyload.js(如下) / Lazy Load - jQuery plugin for lazy loading 缺乏、安全感/ 2022年06月16日 06:44/ 0 赞/ 491 阅读
相关 图片懒加载 懒加载的意义[(在线demo预览)][demo] 尽管很多公司的网页都有一些限制,比如页面的最大的图片大小不得大于50k,也有很多图片优化工具fis3、gulp等等,但是 痛定思痛。/ 2022年06月04日 07:58/ 0 赞/ 529 阅读
相关 图片懒加载 在实际的项目开发中,我们通常会遇见这样的场景:一个页面有很多图片,而首屏出现的图片大概就一两张,那么我们还要一次性把所有图片都加载出来吗?显然这是愚蠢的,不仅影响页面渲染速度, 偏执的太偏执、/ 2022年05月28日 02:07/ 0 赞/ 549 阅读
相关 图片懒加载 <!--<!doctype html>--> <!--<html lang="en">--> <!--<head>--> <!--<me 亦凉/ 2022年05月23日 12:19/ 0 赞/ 487 阅读
相关 图片懒加载 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> r囧r小猫/ 2022年05月21日 06:54/ 0 赞/ 531 阅读
相关 图片懒加载 \[外链图片转存失败(img-vbwUXXxJ-1563574134995)([https://upload-images.jianshu.io/upload\_images/ 川长思鸟来/ 2021年09月30日 00:24/ 0 赞/ 847 阅读
还没有评论,来说两句吧...