图片懒加载原理与具体实现

图片懒加载原理与具体实现一 目的我们首先要清楚为什么要使用图片懒加载 要来解决什么问题 当我们页面中有大量的图片时 如果打开页面再去加载的话将会加载很长时间 这样会让用户在看到具体的页面之前退出就会失去很多的用户 我们就要使用图片懒加载来解决这个问题 二 实现过程对于图片过多的页面 为了加速页面加载速度 所以很多时候我们需要将页面内未出现在可视区域内的图片先不做加载 等到滚动到可视区域后再去加载 这样子对于页面加

一、目的

我们首先要清楚为什么要使用图片懒加载,要来解决什么问题?当我们页面中有大量的图片时,如果打开页面再去加载的话将会加载很长时间,这样会让用户在看到具体的页面之前退出就会失去很多的用户,我们就要使用图片懒加载来解决这个问题。

二、实现过程

对于图片过多的页面,为了加速页面加载速度,所以很多时候我们需要将页面内未出现在可视区域内的图片先不做加载, 等到滚动到可视区域后再去加载。这样子对于页面加载性能上会有很大的提升,也提高了用户体验。

三、原理

先将页面中的img标签src指向一张小图片或者src为空,然后定义data-src(这个属性可以自定义命名,我才用data-src)属性指向真实的图片。src指向一张默认的图片,否则当src为空时也会向服务器发送一次请求。可以指向loading的地址。要指定长宽高。当载入页面时,先把可视区域内的img标签的data-src属性值负给src,然后监听滚动事件,把用户即将看到的图片加载。这样便实现了懒加载。

这里需要注意的是data-src是html5新加入的api

具体的代码实现:

 
   
   Document 
    
   图片懒加载原理与具体实现 图片懒加载原理与具体实现 图片懒加载原理与具体实现 图片懒加载原理与具体实现 图片懒加载原理与具体实现 图片懒加载原理与具体实现 图片懒加载原理与具体实现 图片懒加载原理与具体实现 图片懒加载原理与具体实现 图片懒加载原理与具体实现 图片懒加载原理与具体实现  //offsetTop:当前对象到其上级层顶部的距离.不能对其进行赋值.设置对象到页面顶部的距离请用style.top属性. //offsetWidth :当前对象的宽度.与style.width属性的区别在于:如对象的宽度设定值为百分比宽度,则无论页面变大还是变小,style.width都返回此百分比,而offsetWidth则返回在不同页面中对象的宽度值而不是百分比值 //offsetHeight 是自身元素的宽度。( 包括边线的高) //scrollHeight 是内部元素的绝对宽度,包含内部元素的隐藏的部分。) //scrollTop:对象的最顶部到对象在当前窗口显示的范围内的顶边的距离.即是在出现了纵向滚动条的情况下,滚动条拉动的距离.scrollTop:设置或获取位于对象最顶端和窗口中可见内容的最顶端之间的距离(简单地说就是滚动后被隐藏的高度。) //clientHight:内容可视区域的高度,也就是说页面浏览器中可以看到内容的这个区域的高度,一般是最后一个工具条以下到状态栏以上的这个区域,与页面内容无关(即使内容只有一行)。 //clientTop:元素上边框的厚度,当没有指定边框厚底时,一般为0。  
  

四、优化—节流处理

(如果直接将函数绑定在scroll事件上,当页面滚动时,函数会被高频触发,这非常影响浏览器的性能。我想实现限制触发频率,来优化性能。)

什么是节流?
函数在一定的时间段内只能执行一次

 //节流的实现,实现采用闭包 function throttle(fn,delay){ var previos = 0; return function(){ var now = Date.now(); var _this = this; var args = arguments; if(now-previous>0){ fn.apply(_this,args) previous = now; } } } 

应用到图片懒加载是这样

// 简单的节流函数 //fun 要执行的函数 //delay 延迟 //time 在time时间内必须执行一次 function throttle(fun, delay, time) { var timeout, startTime = new Date(); return function() { var context = this, args = arguments, curTime = new Date(); clearTimeout(timeout); // 如果达到了规定的触发时间间隔,触发 handler if (curTime - startTime >= time) { fun.apply(context, args); startTime = curTime; // 没达到触发间隔,重新设定定时器 } else { timeout = setTimeout(fun, delay); } }; }; // 实际想绑定在 scroll 事件上的 handler function lazyload(event) { for (var i = n; i < imgNum; i++) { if (img.eq(i).offset().top < parseInt($(window).height()) + parseInt($(window).scrollTop())) { if (img.eq(i).attr("src") == "default.jpg") { var src = img.eq(i).attr("data-src"); img.eq(i).attr("src", src); n = i + 1; } } } } // 采用了节流函数 window.addEventListener('scroll',throttle(lazyload,500,1000)); 
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/225739.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月17日 上午8:38
下一篇 2026年3月17日 上午8:39


相关推荐

  • 西门子s7300编程实例_西门子300编程入门

    西门子s7300编程实例_西门子300编程入门一、十字路口的交通指挥信号灯布置如下图:1、控制要求(1)信号灯系统由一个启动开关控制,当启动开关接通时,该信号灯系统开始工作,当启动开关关断时,所有信号灯都熄灭。(2)南北绿灯和东西绿灯不能同时亮。如果同时亮应关闭信号灯系统,并立刻报警。(3)南北红灯亮维持25s。在南北红灯亮的同时东西绿灯也亮,并维持20s。到20s时,东西绿灯闪亮,闪亮3s后熄灭,此时,东西黄灯亮,并维持…

    2025年10月23日
    7
  • 用python语言实现人工智能猴子摘香蕉的问题_人工智能实验报告大全:猴子摘香蕉问题的VC编程实现等八次 -…[通俗易懂]

    用python语言实现人工智能猴子摘香蕉的问题_人工智能实验报告大全:猴子摘香蕉问题的VC编程实现等八次 -…[通俗易懂]人工智能课内实验报告(8次)学院:自动化学院班级:智能1501姓名:刘少鹏(34)学号:06153034目录课内实验1:猴子摘香蕉问题的VC编程实现????????1课内实验2:编程实现简单动物识别系统的知识表示???5课内实验3:盲目搜索求解8数码问题?????????18课内实验4:回溯算法求解四皇后问题???…

    2026年4月13日
    5
  • k8s+docker微服务架构_docker查看容器

    k8s+docker微服务架构_docker查看容器docker+k8微服务容器化实战

    2025年8月1日
    7
  • 列举6个常见且实用的Web前端性能优化方法[通俗易懂]

    列举6个常见且实用的Web前端性能优化方法[通俗易懂]在如今这个信息爆炸的时代,人们的节奏总是快速的,对于一个网站的耐心毕竟是有限的可怜的,如果网站不进行优化必定会流失相当一部分的客户,带来不必要的损失。那么从Web前端的性能优化上来说有哪些常见、实用的方法呢?下面小千就列举6个常见且实用的Web前端性能优化方法。1、使用CDNCDN(内容分发网络)部署在各大运营商机房,当用户通过浏览器请求资源时可以直接反馈给用户,极大的减轻了服务器数据中心的压力。本质上CDN也是一种缓存,如果你的所在地距离某个CDN节点很近,那么网站响应的速度提升也是非常明显的。另外

    2022年6月23日
    25
  • Dify、n8n、扣子、Fastgpt、Ragflow到底该怎么选?超详细指南来了

    Dify、n8n、扣子、Fastgpt、Ragflow到底该怎么选?超详细指南来了

    2026年3月12日
    17
  • JAVA中的栈和堆

    JAVA中的栈和堆转 https www cnblogs com ibelieve618 p 6380328 htmlJAVA 在程序运行时 在内存中划分 5 片空间进行数据的存储 分别是 1 寄存器 2 本地方法区 3 方法区 4 栈 5 堆 基本 栈 stack 和堆 heap 这两个概念很重要 不了解清楚 后面就不用学了 以下是这几天栈和堆的学习记录和心得 得些记录下来 以后有学到新的 会慢慢补充

    2026年3月18日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号