js判断时间是否大于当前时间_页面性能优化之原生JS实现图片懒加载

在项目开发中,我们往往会遇到一个页面需要加载很多图片的情况。我们可以一次性加载全部的图片,但是考虑到用户有可能只浏览部分图片。所以我们需要对图片加载进行优化,只加载浏览器窗口内的图片,当用户滚动时,再加载更多的图片。这种加载图片的方式叫做图片懒加载,又叫做按需加载或图片的延时加载。这样做的好处是:1.可以加快页面首屏渲染的速度;2.节约用户的流量。

一.实现思路

1.图片img标签自定义一个属性data-src来存放真实的地址。

2.当滚动页面时,检查所有的img标签,判断是否出现在事业中,如果出现在视野中,继续进行判断,看齐是否被加载过了,如果没有加载,那就进行加载。

判断图片元素是否处于浏览器视野中的示意图(手绘):

7764fca6b821d40ab8d84507755282eb.png

二.根据思路完成代码如下:

 原生js实现图片懒加载
1ce50e55225d500037927cd7d36d1728.png 326de70571dcc838e8ac1c30d1407aa4.png eeea83eb79b06a4f65d8acb5906ee779.png 728d380924b460284bff54c67907888b.png d6e964df9020d82f7e5414b6a829b63b.png 02c706b0fef3b16440a2bd3903df3bab.png 6a32c1b8bf246c14fd81f079c96aa0c5.png d3b955024e0bca079233f5b1e3d1a768.png b62dc7a084b913b504917e6f5678cbb1.png 431619ef9de52d6d58001d630426fe5c.png 73e394da65bc520889e2753ed43fb742.png 4712b359d0b929938a27ee468639753d.png 9c8c1294b56552ce6ff61fcd49c61b15.png 151040aabb457430a7fd11893295616c.png 355bb0f5a2711b5fe92a82d065af7358.png eb217af35bebb0ce6500d36b5fb9f1bf.png

好了,在浏览器中运行一下,第一次进页面如果不滚动滚轮的话什么也看不到,所以第一次进页面需要调用checkShow(),处于视野中的图片也加载出来。

在代码最后加上:

// 第一次进页面加载处于视野中的图片 Array.prototype.slice.apply(document.getElementsByTagName('li')).forEach((li)=>{ let img=li.getElementsByTagName('img')[0]; // 判断当前img是否出现在了视野中 // 判断当前img是否被加载过了 if(checkShow(img) && !isLoaded(img)){ loadImg(img); } })

此时我们发现判断加载视野中的图片代码存在重复,直接封装成一个新的方法lazyRenderImg();

// window绑定滚动事件 window.addEventListener('scroll',function(){ // 遍历所有的img标签 lazyRenderImg(); });function lazyRenderImg(){ Array.prototype.slice.apply(document.getElementsByTagName('li')).forEach((li)=>{ let img=li.getElementsByTagName('img')[0]; // 判断当前img是否出现在了视野中 // 判断当前img是否被加载过了 if(checkShow(img) && !isLoaded(img)){ loadImg(img); } }) } // 第一次进页面加载处于视野中的图片 lazyRenderImg();

三.性能优化

问题:window.scroll 方法页面只要一滚动就会触发里面的方法,对性能影响很大

解决方法:当页面停止滚动的时候,再去执行页面中的方法,类似与函数节流(throttle)

Tips:函数节流:等时间间隔执行函数, 让一个函数不要执行得太频繁,减少一些过快的调用来节流。

// window绑定滚动事件 let timer; window.addEventListener('scroll',function(){ console.log('scroll') // 遍历所有的img标签 if(timer){ clearTimeout(timer) } timer=setTimeout(()=>{ console.log('lazyRenderImg...'); lazyRenderImg(); },300);
7c87eb0417b0fbee8322ab96f7e404cc.png

页面性能优化之图片懒加载就写这么多了,网页优化还有很多方法与技巧,前端路漫漫其修远兮,吾将上下而求索。

最后

以下是总结出来最全前端框架视频,包含: javascript/vue/react/angualrde/express/koa/webpack 等学习资料。

be224c9441d2378f1a0c9e3082dea686.png

【领取方式】

关注头条 前端全栈架构丶第一时间获取最新前端资讯学习

手机用户可私信关键词 【前端】即可获取全栈工程师路线和学习资料!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值