JS给网站图片实现一个懒加载的方法
作者:鹏仔先生日期:2020-06-01 16:55:57浏览:771分类:JavaScript
大部分网站,都会给部分文章图片或者封面图片添加一个懒加载效果,从而减少一次性向服务器进行大量请求。
下面,鹏仔就给大家讲解下给网站添加懒加载教程,其实就是将图片src赋值为一张指定的图片,当用户滚动滚动条到可视区域图片时候,再去加载真正的图片。
css代码(鹏仔只是给图片设置了一个大小,具体自己设置)
<style> img { display: block; margin-bottom: 10px; width: 100px; } </style>
HTML代码
<body> <img src="指定的图片路径" data-src="最终要显示的图片路径"> <img src="指定的图片路径" data-src="最终要显示的图片路径"> <img src="指定的图片路径" data-src="最终要显示的图片路径"> <img src="指定的图片路径" data-src="最终要显示的图片路径"> <img src="指定的图片路径" data-src="最终要显示的图片路径"> </body>
在img标签中,把原本src指向的图片路径改为指定的一张图,在继续在img标签中 加上 data-src 将他指向最终要显示的图
src 为路径
data-src 为自定义属性
JS代码
<script> //函数绑定在 scroll 事件上,当页面滚动时,避免函数被高频触发, function throttle(fn, delay, atleast) { //进行去抖处理 var timeout = null, startTime = new Date(); return function() { var curTime = new Date(); clearTimeout(timeout); if(curTime - startTime >= atleast) { fn(); startTime = curTime; }else { timeout = setTimeout(fn, delay); } } } function lazyload() { var images = document.getElementsByTagName('img'); var len = images.length; //存储图片加载到的位置,避免每次都从第一张图片开始遍历 var n = 0; return function() { var seeHeight = document.documentElement.clientHeight; var scrollTop = document.documentElement.scrollTop || document.body.scrollTop; for(var i = n; i < len; i++) { if(images[i].offsetTop < seeHeight + scrollTop) { if(images[i].getAttribute('src') === '指定的图片路径') { images[i].src = images[i].getAttribute('data-src'); } n = n + 1; } } } } var loadImages = lazyload(); //初始化首页的页面图片 loadImages(); window.addEventListener('scroll', throttle(loadImages, 500, 1000), false); //函数节流(throttle)与函数去抖(debounce)处理, //500ms 的延迟,和 1000ms 的间隔,当超过 1000ms 未触发该函数,则立即执行该函数,不然则延迟 500ms 执行该函数 </script>
猜你还喜欢
- 09-14 nvm常用命令有哪些?nvm如何切换node版本?nvm如何下载node?
- 08-19 使用HBuilderX将vue或H5项目打包app
- 07-15 小程序嵌入网页向小程序跳转并传参,微信小程序中实现公众号授权获取openId
- 07-13 vue中实现文件批量打包压缩下载(以及下载跨域问题分析)
- 07-08 uniapp调用地图,进行位置查询,标记定位
- 11-05 js截取字符串前几位或者截取字符串后几位
- 10-25 js替换字符串某个字符,js修改字符串中指定字符
- 10-20 uniapp中text-indent不起作用,uniapp首行缩进不管用如何解决?
- 09-26 vue给单独组建的body添加类名
- 08-12 elemtnui 表格如何修改某行文字颜色
- 08-03 vue中调用百度地图 获取经纬度
- 07-09 uniapp小程序实现录音 uniapp小程序长按录音 点击播放等功能(CSS实现语音音阶动画效果)
取消回复欢迎 你 发表评论:
- 搜索
- 最新评论
-
你很喜欢评论?访客 评论于:11-09 是呀是呀鹏仔先生 评论于:08-19 这个站长文章写的很详细呀!鹏仔先生 评论于:08-19 ajax和fetch的区别:(1)、ajax是利用XMLHttpRequest对象来请求数据的,而fetch是wi鹏仔先生 评论于:08-03 区别:1、fetch没有办法原生监测请求的进度,而ajax基于原生的XHR开发,可以监测;2、和ajax相比,fetch鹏仔先生 评论于:08-03 欢迎大家添加鹏仔的微信,备注前端或后端,加入微信技术交流群来摸鱼鹏仔先生 评论于:07-15 少写了在components写入vueEasyPrint访客 评论于:04-13 好用访客 评论于:02-28 好用访客 评论于:11-16 生成事件建议写在this.$nextTick(()=˃{})里面访客 评论于:11-11
- 随机tag
暂无评论,来添加一个吧。