实现图片懒加载

23 篇文章 0 订阅
订阅专栏
3 篇文章 0 订阅
订阅专栏

图片懒加载就是当图片非常多,一屏无法完全显示的时候,我们就会把暂时看不到的图片,延时等滚轴滚动到时再进行加载,也算是一种性能优化,图片分开下载就是大幅度提高了首次加载页面的速度,例如就像一些电商网站的商品显示一样,下面我们就来实现一下图片的懒加载。

1.不使用懒加载

我们首先写出基本的html页面,代码如下如图所示:

<!DOCTYPE html>
    <head>
        <style>
            img{
                width: 40%;
                height: 360px;
            }
        </style>
    </head>
    <body>
        <div>他年若遂凌云志,敢笑黄巢不丈夫</div>
        <div>他年若遂凌云志,敢笑黄巢不丈夫</div>
        <div>他年若遂凌云志,敢笑黄巢不丈夫</div>
        <div>他年若遂凌云志,敢笑黄巢不丈夫</div>
        <div>他年若遂凌云志,敢笑黄巢不丈夫</div>
        <div>他年若遂凌云志,敢笑黄巢不丈夫</div>
        <div>他年若遂凌云志,敢笑黄巢不丈夫</div>


       <div><img src="./hkk.jpg" /></div>
       <div><img src="./lufei.jpg"/></div>
       <div><img src="./timg.jpg"/></div>
        <script>
           
        </script>
    </body>

 显示如下所示:

                                     

 

 2.监听图片高度实现懒加载

实现思路就是当图片距离浏览器顶部的高度小于浏览器视窗的高度时我们就加载出图片。

那我们首先就不应该把图片显示出来,解决方案就是使用data-*属性,这是标签的自定义属性,就保证了开始不会执行,方便我们替换src属性来显示图片,下面我们来写js代码:

const imags = document.querySelectorAll('img');

            window.addEventListener('scroll', () => {
                imags.forEach((img) => {
                const imgTop = img.getBoundingClientRect().top; // 获取每张图片到浏览器顶部的距离
                    if (imgTop < window.innerHeight) {
                        const imgSrc = img.getAttribute('data-src'); // 拿到自定义属性的值
                        img.setAttribute('src', imgSrc);
                        console.log('加载');
                    }
                })
            })

这样我们就实现了懒加载,但是会有一个问题,就是这种监听的方法会一直重复触发加载的动作,即使资源已经加载完毕了,如下图,所以我们选择下面的方式,也是推荐使用的方法。 

3.IntersectionObserver

这是浏览器提供的构造函数,用于观察元素是否对于屏幕的可视区域可见,使用observe方法进行监听,unobserve方法取消监听,这样就是避免重复触发的问题:

const images = document.querySelectorAll('img');

            const callback = (enteries) => {
                enteries.forEach((e) => {
                    if (e.isIntersecting) { // 内置参数(boolean)是否能在浏览器中看到
                        const img = e.target;
                        const imgSrc = img.getAttribute('data-src');
                        img.setAttribute('src', imgSrc);
                        observe.unobserve(img);
                        console.log('加载');   
                    }
                })
            }

            const observe = new IntersectionObserver(callback);
            images.forEach((image) => {
                observe.observe(image);
            })

 

总结

        第二种懒加载的方式推荐使用,不会造成资源的浪费,给浏览器的压力没那么大,移动端也同样适用。

angular实现图片实例代码
01-19
这两天一直纠结angular的图片插件中无法自拔。在使用过程深深感到js学艺不精的痛苦,想修改源码又不会修改,只能尽力压榨如何使用插件上。这里主要谈谈在使用插件的过程遇到的一些问题。  一)我使用的是...
实现图片的5种方式
maidu_xbd的博客
05-24 7133
offsetTop(图像距离顶部的高度)-scrollTop(页面被卷去的高度)
什么是,如何实现图片或列表
study_way的博客
06-11 1050
只在数据或内容即将进入视口或即将需要的时候才。提高页面速度和响应速度。只当前用户需要或将要浏览到的数据,避免一次性大量不必要的数据。节省用户流量。只用户浏览到的数据,避免用户未浏览的数据,特别是对于移动端用户来说可以节省流量。优化用户体验。避免一次性大量数据导致页面卡顿,appear突然出现,样式渲染跳跃等影响用户体验的问题。实现的弊端有:首屏会较慢,而一些关键数据又需要首屏,需要权衡。
图片的原理--三种方法实现
weixin_43872282的博客
03-02 4312
3.设置img的默认src为一张1px*1px,很小很小的gif透明图片(所有的img都用这一张,只会发送一次请求),之所以需要是透明的,是需要透出通过background设置的背景图(一张loading.png,就是一个转圈圈的背景效果图)目前流行的做法是滚动动态,也就是,显示在屏幕之外的图片默认不,随着页面的滚动,图片进入了显示的范围,则触发图片显示。5.等到图片进入视口后,利用js提取data-url的真实图片地址赋值给src属性,就会去发送请求图片,真正实现了按需
【前端】图片的原理和三种实现方式
热门推荐
qq_44947815的博客
06-14 2万+
图片的原理和实现方法
什么事图片?如何实现图片
tyxjolin的专栏
04-05 3485
图片是指在网页中,当用户滚动页面时才图片的一种技术。相对于传统的图片方式,可以减少初始页面的时间,提高网站的响应速度。尤其对于移动设备和网络条件较差的用户,可以显著地提高用户的体验。
微信小程序实现图片的示例代码
08-28
本篇文章主要介绍了微信小程序实现图片的示例代码,实现的原理是通过页面预图片,对用户体验度会有一定的提高,具有一定的参考价值,有兴趣可以了解一下
js实现图片效果
10-19
主要为大家详细介绍了js实现图片效果,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
JQuery实现图片demo
07-31
JQuery实现图片demo,实现图片图片两种方式。
vue实现图片的方法分析
10-15
主要介绍了vue实现图片的方法,结合实例形式分析了vue.js图片插件安装、使用方法与相关操作注意事项,需要的朋友可以参考下
图片(lazyload)的几种方式
djwhwj的博客
10-09 2413
当页面中有很多图片时,全部需要很多时间,而且会消耗很多渲染资源,为了解决这个问题,强用户体验,我们先将看得到的区域中的图片
图片的几种实现方式
Wonder
03-22 4005
原理 在页面中有很多图片的时候,图片就需要很多时间,很耗费服务器性能,不仅影响渲染速度还会浪费带宽,为了解决这个问题,提高用户体验,所以就出现了这种方式来减轻服务器的压力,即优先可视区域的内容,其他部分等进入了可视区域再,从而提高性能。 思路 图片是根据src进行的,在图片没有进入可视区域时,先不给src赋值(或者可以先给一个很小的loading图),等到图片进入可视区域再给src赋真正的值。图片的真实地址可以先存储在data-src中。 实现 <di...
vue实现图片的五种方式
weixin_43913643的博客
09-18 3606
推荐使用插件
移动端处理图片
dishujuan8959的博客
07-12 211
//照片墙图片 function lazyLondImg() { var lazyImgs = $(".js-lazyLoad"), //需要图片 lazyIndex = 0, //到的图片index curHeight = document.documentElement.clientHeight, //初始页面高度...
图片, Vue-Lazyload实现
nilmao的博客
03-21 2689
1.图片 1.1.什么是图片 图片 图片就是在页面打开的时候,不要一次性全部显示页面所有的图片,而是只显示当前视口内的图片,一般在移动端使用(PC端主要是前端分页或者后端分页)。 优点:页面速度快、可以减轻服务器的压力、节约了流量,用户体验好; 1.2.为什么要使用? 很多页面,内容很丰富且很长,图片较多。比如说各种商城页面。这些页面图片数量多,而且比较大,少说百来K,多则上兆。要是页面入就一次性完毕,可能会等待较长的时间,没有丝滑的使用体验。 1.3.
移动端插件-图片、预
jingde528的博客
12-08 274
移动端插件-图片、预
关于图片延迟的解决方案(针对移动端)
weixin_34183910的博客
12-30 156
2019独角兽企业重金招聘Python工程师标准>>> ...
前后端交互图片
......
10-19 186
index.js文件代码如下 $(function(){ var num =1; imgList(num) var flag = true //滚动条触底后,再次请求数据 $(window).scroll(function(){ // 获取当前视口的高度 var _h = $(this).height() //获取当前页面的高度 var h = $(document).height()
实现图片(及优化相关)
cai niaoyihao_的博客
07-04 1304
工作之余想要休闲一下(看-美-女-图),但是又觉得单纯休闲不利于自身进步,于是 ……
vue2实现图片
最新发布
10-23
Vue2中实现图片可以使用Intersection Observer API方法和VueLazyload插件。具体步骤如下: 1. 在main.js中引入VueLazyload插件,并注册插件。 2. 在需要图片上添v-lazy指令,并将lazyImg替换为需要...

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
写文章

热门文章

  • js读取txt文件中的内容 27988
  • react文件预览插件react-file-viewer 7832
  • css禁用图片的样式显示 6764
  • 报错:Cannot find module ‘xxx.svg‘ or its corresponding type declarations.ts(2307) 5996
  • CryptoJS加密解密 5815

分类专栏

  • JS 23篇
  • 前端打包下载 1篇
  • 个人总结 14篇
  • 个人工作总结 9篇
  • websocket 1篇
  • nodeJS 4篇
  • 算法 1篇
  • 前端性能优化 3篇
  • es6/7/8/9 2篇
  • webpack 1篇
  • css3 2篇
  • vue2.0 1篇
  • stylus预编译器 1篇
  • reactJs 18篇

最新评论

  • MD格式字符串中的超链接改为打开新页面跳转

    2401_84249979: 我不是机器人,兄弟

  • MD格式字符串中的超链接改为打开新页面跳转

    起来改bug: 你个机器人,加什么微信

  • MD格式字符串中的超链接改为打开新页面跳转

    2401_84249979: 能加个微信吗

  • jszip实现多层目录以及目录下文件打包

    起来改bug: 嗯,对的表情包,已修改

  • jszip实现多层目录以及目录下文件打包

    游吟焰火: 非常感谢,很有帮助!表情包 指出一个错的地方 递归的地方return downloadAsZip(item.path, zip) 应该传递newFold也就是return downloadAsZip(item.path, newFold)

最新文章

  • [vite:terser] terser not found. Since Vite v3, terser has become an optional dependency...
  • 如何把npm切换成yarn管理项目
  • 使用nvm版本管理工具
2024年6篇
2023年19篇
2022年27篇
2021年19篇
2020年7篇
2019年4篇
2018年2篇
2017年3篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值

深圳SEO优化公司淄博关键词按天扣费公司绵阳设计公司网站推荐包头网站优化按天收费报价营口网页设计公司朝阳网络广告推广仙桃优化报价四平外贸网站制作报价常州关键词按天扣费白山企业网站制作报价商洛网站推广工具定西百度seo报价吕梁网络营销钦州网站开发多少钱秦皇岛百度竞价包年推广公司临猗百度爱采购多少钱天津网站制作设计鞍山网站推广价格本溪SEO按效果付费价格恩施建网站推荐永州设计公司网站推荐抚州网站建设设计公司巴中营销型网站建设多少钱盐田网站改版多少钱汕尾百度关键词包年推广多少钱宁波百度seo哪家好保山SEO按天扣费哪家好宝鸡网站优化按天计费价格昭通SEO按天计费公司文山网站seo优化公司长沙百度竞价公司歼20紧急升空逼退外机英媒称团队夜以继日筹划王妃复出草木蔓发 春山在望成都发生巨响 当地回应60岁老人炒菠菜未焯水致肾病恶化男子涉嫌走私被判11年却一天牢没坐劳斯莱斯右转逼停直行车网传落水者说“没让你救”系谣言广东通报13岁男孩性侵女童不予立案贵州小伙回应在美国卖三蹦子火了淀粉肠小王子日销售额涨超10倍有个姐真把千机伞做出来了近3万元金手镯仅含足金十克呼北高速交通事故已致14人死亡杨洋拄拐现身医院国产伟哥去年销售近13亿男子给前妻转账 现任妻子起诉要回新基金只募集到26元还是员工自购男孩疑遭霸凌 家长讨说法被踢出群充个话费竟沦为间接洗钱工具新的一天从800个哈欠开始单亲妈妈陷入热恋 14岁儿子报警#春分立蛋大挑战#中国投资客涌入日本东京买房两大学生合买彩票中奖一人不认账新加坡主帅:唯一目标击败中国队月嫂回应掌掴婴儿是在赶虫子19岁小伙救下5人后溺亡 多方发声清明节放假3天调休1天张家界的山上“长”满了韩国人?开封王婆为何火了主播靠辱骂母亲走红被批捕封号代拍被何赛飞拿着魔杖追着打阿根廷将发行1万与2万面值的纸币库克现身上海为江西彩礼“减负”的“试婚人”因自嘲式简历走红的教授更新简介殡仪馆花卉高于市场价3倍还重复用网友称在豆瓣酱里吃出老鼠头315晚会后胖东来又人满为患了网友建议重庆地铁不准乘客携带菜筐特朗普谈“凯特王妃P图照”罗斯否认插足凯特王妃婚姻青海通报栏杆断裂小学生跌落住进ICU恒大被罚41.75亿到底怎么缴湖南一县政协主席疑涉刑案被控制茶百道就改标签日期致歉王树国3次鞠躬告别西交大师生张立群任西安交通大学校长杨倩无缘巴黎奥运

深圳SEO优化公司 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化