全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

前端图片懒加载(lazyload)的实现方法(提高用户体验)

定义

图片懒加载又称图片延时加载、惰性加载,即在用户需要使用图片的时候加载,这样可以减少请求,节省带宽,提高页面加载速度,相对的,也能减少服务器压力。

惰性加载是程序人性化的一种体现,提高用户体验,防止一次性加载大量数据,而是根据用户需要进行资源的请求。

实现

懒加载的难点在于确定某张图片是否是用户需要的资源,在浏览器中,用户需要的是可视区内的资源,因此我们只需要判断图片是否已经呈现在可视区内,当图片呈现在可视区内时,获取图片的真实地址并赋给该图片即可(图片宽高需要指定,可以利用padding处理)。

判断是否存在于可视区

浏览器视口高度

待加载资源距离视口顶端位置

通过以上两点即可判断图片是否位于可视区内。

var nodes = document.querySelectorAll('img[data-src]'),
  elem = nodes[0],
  rect = elem.getBoundingClientRect(),
  vpHeight = document.documentElement.clientHeight;
if(rect.top < vpHeight && rect.bottom>=0) {
 console.log('show')
}

之后获取图片的真实地址

<img src="loading.gif" alt="" data-src="1.gif">
...
<script data-filtered="filtered">
  var src = elem.dataset.src;
</script>

把真实地址赋给图片

var img = new Image();
img.onload = function(){
 elem.src = img.src;
}
img.src = src;

完整代码

var scrollElement = document.querySelector('.page'),
  viewH = document.documentElement.clientHeight;
function lazyload(){
 var nodes = document.querySelectorAll('img[data-src]');
 Array.prototype.forEach.call(nodes,function(item,index){
  var rect;
  if(item.dataset.src==='') return;
  rect = item.getBoundingClientRect();
  if(rect.bottom>=0 && rect.top < viewH){
    (function(item){
     var img = new Image();
     img.onload = function(){
      item.src = img.src;
     }
     img.src = item.dataset.src
     item.dataset.src = ''
    })(item)
  }
 })
}
lazyload();
scrollElement.addEventListener('scroll',throttle(lazyload,500,1000));
function throttle(fun, delay, time) {
  var timeout,
    startTime = new Date();
  return function() {
    var context = this,
      args = arguments,
      curTime = new Date();
    clearTimeout(timeout);
    if (curTime - startTime >= time) {
      fun.apply(context, args);
      startTime = curTime;
    } else {
      timeout = setTimeout(fun, delay);
    }
  };
};

总结

以上所述是小编给大家介绍的前端图片懒加载(lazyload)的实现方法(提高用户体验),希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!


# 图片懒加载lazyload  # 前端必会的图片懒加载(三种方式)  # js前端实现图片懒加载(lazyload)的两种方式  # 前端JS图片懒加载原理方案详解  # 前端图片懒加载的原理与3种实现方式举例  # 加载  # 区内  # 小编  # 呈现在  # 的是  # 在此  # 也能  # 给大家  # 只需要  # 可以利用  # 所述  # 即在  # 给我留言  # 感谢大家  # 可以减少  # 两点  # 判断是否  # 疑问请  # 有任何  # 器中 


相关文章: 设计网站制作公司有哪些,制作网页教程?  c# 在高并发下使用反射发射(Reflection.Emit)的性能  电商平台网站制作流程,电商网站如何制作?  如何用花生壳三步快速搭建专属网站?  网站制作知乎推荐,想做自己的网站用什么工具比较好?  详解免费开源的DotNet二维码操作组件ThoughtWorks.QRCode(.NET组件介绍之四)  制作网站的模板软件,网站怎么建设?  学校建站服务器如何选型才能满足性能需求?  如何设计高效校园网站?  高防服务器:AI智能防御DDoS攻击与数据安全保障  建站之星客服服务时间及联系方式如何?  免费ppt制作网站,有没有值得推荐的免费PPT网站?  建站之星后台密码遗忘?如何快速找回?  可靠的网站设计制作软件,做网站设计需要什么样的电脑配置?  如何高效生成建站之星成品网站源码?  如何用已有域名快速搭建网站?  网站设计制作企业有哪些,抖音官网主页怎么设置?  网站制作公司哪里好做,成都网站制作公司哪家做得比较好,更正规?  如何选择高效便捷的WAP商城建站系统?  高防服务器租用首荐平台,企业级优惠套餐快速部署  GML (Geography Markup Language)是什么,它如何用XML来表示地理空间信息?  如何选择高效可靠的多用户建站源码资源?  如何在Golang中指定模块版本_使用go.mod控制版本号  如何通过虚拟主机快速完成网站搭建?  定制建站平台哪家好?企业官网搭建与快速建站方案推荐  官网自助建站系统:SEO优化+多语言支持,快速搭建专业网站  如何在阿里云域名上完成建站全流程?  建站之星后台管理系统如何操作?  子杰智能建站系统|零代码开发与AI生成SEO优化指南  如何快速启动建站代理加盟业务?  番禺网站制作公司哪家值得合作,番禺图书馆新馆开放了吗?  香港服务器选型指南:免备案配置与高效建站方案解析  c++怎么实现高并发下的无锁队列_c++ std::atomic原子变量与CAS操作【详解】  如何快速搭建高效可靠的建站解决方案?  如何获取PHP WAP自助建站系统源码?  制作网站的过程怎么写,用凡科建站如何制作自己的网站?  如何在西部数码注册域名并快速搭建网站?  建站主机数据库如何配置才能提升网站性能?  网站制作的方法有哪些,如何将自己制作的网站发布到网上?  装修招标网站设计制作流程,装修招标流程?  制作公司内部网站有哪些,内网如何建网站?  头像制作网站在线观看,除了站酷,还有哪些比较好的设计网站?  如何在阿里云虚拟机上搭建网站?步骤解析与避坑指南  建站主机如何安装配置?新手必看操作指南  c++ stringstream用法详解_c++字符串与数字转换利器  如何制作算命网站,怎么注册算命网站?  车管所网站制作流程,交警当场开简易程序处罚决定书,在交警网站查询不到怎么办?  如何通过PHP快速构建高效问答网站功能?  制作网站的基本流程,设计网站的软件是什么?  seo网站制作优化,网站SEO优化步骤有哪些? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。