快速实现JS图片懒加载(可视区域加载)示例代码

发布时间 - 2026-01-10 22:18:28    点击率:

js懒加载图片

如何提高网页加载速度?在网页中有许多img标签,这些标签就是图片,其属性src则是指向服务器地址,当浏览器从上往下读取到src标签中的地址时,浏览器就会开启线程,加载这张图片。而并不是等到整张页面都解析完成才加载图片。我们要做的就是加载用户可视范围内的图片。

js懒加载图片的目的

     1.网页优化,提高网页加载速度

     2.页面优化友好,提高SEO收录与排名

     3.提高用户体验,减少服务器压力

实例代码如下:

<!DOCTYPE html>
<html lang="en">

 <head>
 <meta charset="UTF-8">
 <title>图片懒加载(可视区域加载)</title>
 <style>
  * {
  padding: 0px;
  margin: 0px;
  }
  
  html,
  body {
  width: 100%;
  min-height: 100%;
  }
  
  #SB {
  margin: 0;
  padding: 0;
  list-style: none;
  }
  
  #SB .in {
  border: 1px solid red;
  margin: 10px;
  text-align: center;
  height: 400px;
  width: 400px;
  float: left;
  }
  
  .in img {
  border: none;
  vertical-align: middle;
  height: 400px;
  width: 400px;
  }
 </style>
 </head>

 <body>
 <ul id="SB">
  <li class="in"><img src="" data-imgurl="img/1.jpg"></li>
  <li class="in"><img src="" data-imgurl="img/2.jpg"></li>
  <li class="in"><img src="" data-imgurl="img/3.jpg"></li>
  <li class="in"><img src="" data-imgurl="img/4.jpg"></li>
  <li class="in"><img src="" data-imgurl="img/5.jpg"></li>
  <li class="in"><img src="" data-imgurl="img/6.jpg"></li>
  <li class="in"><img src="" data-imgurl="img/7.jpg"></li>
  <li class="in"><img src="" data-imgurl="img/8.jpg"></li>
  <li class="in"><img src="" data-imgurl="img/9.jpg"></li>
  <li class="in"><img src="" data-imgurl="img/10.jpg"></li>
  <li class="in"><img src="" data-imgurl="img/11.jpg"></li>
  <li class="in"><img src="" data-imgurl="img/12.jpg"></li>
  <li class="in"><img src="" data-imgurl="img/13.jpg"></li>
  <li class="in"><img src="" data-imgurl="img/14.jpg"></li>
  <li class="in"><img src="" data-imgurl="img/15.jpg"></li>
  <li class="in"><img src="" data-imgurl="img/16.jpg"></li>
  <li class="in"><img src="" data-imgurl="img/1.jpg"></li>
  <li class="in"><img src="" data-imgurl="img/2.jpg"></li>
  <li class="in"><img src="" data-imgurl="img/3.jpg"></li>
  <li class="in"><img src="" data-imgurl="img/4.jpg"></li>
  <li class="in"><img src="" data-imgurl="img/5.jpg"></li>
  <li class="in"><img src="" data-imgurl="img/6.jpg"></li>
  <li class="in"><img src="" data-imgurl="img/7.jpg"></li>
  <li class="in"><img src="" data-imgurl="img/8.jpg"></li>
  <li class="in"><img src="" data-imgurl="img/9.jpg"></li>
  <li class="in"><img src="" data-imgurl="img/10.jpg"></li>
  <li class="in"><img src="" data-imgurl="img/11.jpg"></li>
  <li class="in"><img src="" data-imgurl="img/12.jpg"></li>
  <li class="in"><img src="" data-imgurl="img/13.jpg"></li>
  <li class="in"><img src="" data-imgurl="img/14.jpg"></li>
  <li class="in"><img src="" data-imgurl="img/15.jpg"></li>
  <li class="in"><img src="" data-imgurl="img/16.jpg"></li>
  <li class="in"><img src="" data-imgurl="img/1.jpg"></li>
  <li class="in"><img src="" data-imgurl="img/2.jpg"></li>
  <li class="in"><img src="" data-imgurl="img/3.jpg"></li>
  <li class="in"><img src="" data-imgurl="img/4.jpg"></li>
  <li class="in"><img src="" data-imgurl="img/5.jpg"></li>
  <li class="in"><img src="" data-imgurl="img/6.jpg"></li>
  <li class="in"><img src="" data-imgurl="img/7.jpg"></li>
  <li class="in"><img src="" data-imgurl="img/8.jpg"></li>
  <li class="in"><img src="" data-imgurl="img/9.jpg"></li>
  <li class="in"><img src="" data-imgurl="img/10.jpg"></li>
  <li class="in"><img src="" data-imgurl="img/11.jpg"></li>
  <li class="in"><img src="" data-imgurl="img/12.jpg"></li>
  <li class="in"><img src="" data-imgurl="img/13.jpg"></li>
  <li class="in"><img src="" data-imgurl="img/14.jpg"></li>
  <li class="in"><img src="" data-imgurl="img/15.jpg"></li>
  <li class="in"><img src="" data-imgurl="img/16.jpg"></li>
 </ul>
 <script type="text/javascript">
  var aImages = document.getElementById("SB").getElementsByTagName('img'); //获取id为SB的文档内所有的图片
  loadImg(aImages);
  window.onscroll = function() { //滚动条滚动触发
  loadImg(aImages);
  };
  //getBoundingClientRect 是图片懒加载的核心
  function loadImg(arr) {
  for(var i = 0, len = arr.length; i < len; i++) {
   if(arr[i].getBoundingClientRect().top < document.documentElement.clientHeight && !arr[i].isLoad) {
   arr[i].isLoad = true; //图片显示标志位
   //arr[i].style.cssText = "opacity: 0;"; 
   (function(i) {
    setTimeout(function() {
    if(arr[i].dataset) { //兼容不支持data的浏览器
     aftLoadImg(arr[i], arr[i].dataset.imgurl);
    } else {
     aftLoadImg(arr[i], arr[i].getAttribute("data-imgurl"));
    }
    arr[i].style.cssText = "transition: 1s; opacity: 1;" //相当于fadein
    }, 500)
   })(i);
   }
  }
  }

  function aftLoadImg(obj, url) {
  var oImg = new Image();
  oImg.onload = function() {
   obj.src = oImg.src; //下载完成后将该图片赋给目标obj目标对象
  }
  oImg.src = url; //oImg对象先下载该图像
  }
 </script>
 </body>

</html>

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对的支持。


# js  # 图片懒加载原理  # 懒加载  # js实现图片懒加载  # js获取滚动距离的方法  # js/jquery获取浏览器窗口可视区域高度和宽度以及滚动条高度实现代码  # js获取浏览器的可视区域尺寸的实现代码  # js获取元素到可视区的距离、浏览器窗口滚动距离及元素距离浏览器顶部距离  # 加载  # 就会  # 则是  # 中有  # 这张  # 要做  # 不支持  # 这篇文章  # 谢谢大家  # 往下  # 将该  # 整张  # 滚动条  # 文档  # 完成后  # 有疑问  # margin  # title  # padding  # px 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Laravel项目如何进行性能优化_Laravel应用性能分析与优化技巧大全  DeepSeek是免费使用的吗 DeepSeek收费模式与Pro版本功能详解  简单实现jsp分页  在线教育网站制作平台,山西立德教育官网?  如何在沈阳梯子盘古建站优化SEO排名与功能模块?  Laravel如何与Pusher实现实时通信?(WebSocket示例)  米侠浏览器网页背景异常怎么办 米侠显示修复  打造顶配客厅影院,这份100寸电视推荐名单请查收  合肥制作网站的公司有哪些,合肥聚美网络科技有限公司介绍?  ,怎么在广州志愿者网站注册?  jQuery validate插件功能与用法详解  Laravel的.env文件有什么用_Laravel环境变量配置与管理详解  Laravel Pest测试框架怎么用_从PHPUnit转向Pest的Laravel测试教程  Laravel如何使用Gate和Policy进行授权?(权限控制)  网站制作企业,网站的banner和导航栏是指什么?  Laravel软删除怎么实现_Laravel Eloquent SoftDeletes功能使用教程  jQuery 常见小例汇总  Laravel N+1查询问题如何解决_Eloquent预加载(Eager Loading)优化数据库查询  宙斯浏览器文件分类查看教程 快速筛选视频文档与图片方法  佛山企业网站制作公司有哪些,沟通100网上服务官网?  香港服务器部署网站为何提示未备案?  laravel怎么为API路由添加签名中间件保护_laravel API路由签名中间件保护方法  如何基于云服务器快速搭建网站及云盘系统?  html5源代码发行怎么设置权限_访问权限控制方法与实践【指南】  千库网官网入口推荐 千库网设计创意平台入口  php结合redis实现高并发下的抢购、秒杀功能的实例  JavaScript实现Fly Bird小游戏  标题:Vue + Vuex + JWT 身份认证的正确实践与常见误区解析  今日头条AI怎样推荐抢票工具_今日头条AI抢票工具推荐算法与筛选【技巧】  如何挑选高效建站主机与优质域名?  Midjourney怎样加参数调细节_Midjourney参数调整技巧【指南】  Laravel如何使用Guzzle调用外部接口_Laravel发起HTTP请求与JSON数据解析【详解】  Laravel如何处理文件下载请求?(Response示例)  新三国志曹操传主线渭水交兵攻略  LinuxCD持续部署教程_自动发布与回滚机制  详解Android——蓝牙技术 带你实现终端间数据传输  南京网站制作费用,南京远驱官方网站?  Laravel项目怎么部署到Linux_Laravel Nginx配置详解  简单实现Android文件上传  Laravel Asset编译怎么配置_Laravel Vite前端构建工具使用  Win11怎么修改DNS服务器 Win11设置DNS加速网络【指南】  教你用AI将一段旋律扩展成一首完整的曲子  Laravel distinct去重查询_Laravel Eloquent去重方法  怎样使用JSON进行数据交换_它有什么限制  Win11怎样安装网易有道词典_Win11安装词典教程【步骤】  Laravel怎么配置S3云存储驱动_Laravel集成阿里云OSS或AWS S3存储桶【教程】  Chrome浏览器标签页分组怎么用_谷歌浏览器整理标签页技巧【效率】  Laravel如何使用Spatie Media Library_Laravel图片上传管理与缩略图生成【步骤】  PHP 500报错的快速解决方法  Laravel中的Facade(门面)到底是什么原理