全网整合营销服务商

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

免费咨询热线: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种实现方式举例  # 加载  # 区内  # 小编  # 呈现在  # 的是  # 在此  # 也能  # 给大家  # 只需要  # 可以利用  # 所述  # 即在  # 给我留言  # 感谢大家  # 可以减少  # 两点  # 判断是否  # 疑问请  # 有任何  # 器中 


相关文章: 如何打造高效商业网站?建站目的决定转化率  企业微网站怎么做,公司网站和公众号有什么区别?  如何在建站宝盒中设置产品搜索功能?  php条件判断怎么写_ifelse和switchcase的使用区别【对比】  如何在景安服务器上快速搭建个人网站?  如何快速搭建高效服务器建站系统?  建站之星展会模板:智能建站与自助搭建高效解决方案  网站制作模板下载什么软件,ppt模板免费下载网站?  哪家制作企业网站好,开办像阿里巴巴那样的网络公司和网站要怎么做?  如何在Windows环境下新建FTP站点并设置权限?  如何在宝塔面板中修改默认建站目录?  如何在云指建站中生成FTP站点?  如何选择建站程序?包含哪些必备功能与类型?  邀请函制作网站有哪些,有没有做年会邀请函的网站啊?在线制作,模板很多的那种?  Python文件管理规范_工程实践说明【指导】  php能控制zigbee模块吗_php通过串口与cc2530 zigbee通信【介绍】  常州企业网站制作公司,全国继续教育网怎么登录?  建站之星2.7模板:企业网站建设与h5定制设计专题  ,sp开头的版面叫什么?  微网站制作教程,我微信里的网站怎么才能复制到浏览器里?  如何通过wdcp面板快速创建网站?  公司网站制作需要多少钱,找人做公司网站需要多少钱?  如何自己制作一个网站链接,如何制作一个企业网站,建设网站的基本步骤有哪些?  学生网站制作软件,一个12岁的学生写小说,应该去什么样的网站?  c# F# 的 MailboxProcessor 和 C# 的 Actor 模型  湖北网站制作公司有哪些,湖北清能集团官网?  建站为何优先选择香港服务器?  实现点击下箭头变上箭头来回切换的两种方法【推荐】  香港服务器网站搭建教程-电商部署、配置优化与安全稳定指南  建站之星Pro快速搭建教程:模板选择与功能配置指南  微课制作网站有哪些,微课网怎么进?  常州自助建站:操作简便模板丰富,企业个人快速搭建网站  如何零基础开发自助建站系统?完整教程解析  C#如何使用XPathNavigator高效查询XML  网站专业制作公司,网站编辑是做什么的?好做吗?工作前景如何?  网站企业制作流程,用什么语言做企业网站比较好?  南平网站制作公司,2025年南平市事业单位报名时间?  盐城做公司网站,江苏电子版退休证办理流程?  济南网站建设制作公司,室内设计网站一般都有哪些功能?  如何用wdcp快速搭建高效网站?  网站制作与设计教程,如何制作一个企业网站,建设网站的基本步骤有哪些?  测试制作网站有哪些,测试性取向的权威测试或者网站?  已有域名如何快速搭建专属网站?  ,怎么用自己头像做动态表情包?  网站制作报价单模板图片,小松挖机官方网站报价?  linux top下的 minerd 木马清除方法  如何快速搭建高效WAP手机网站吸引移动用户?  制作网站的模板软件,网站怎么建设?  如何零基础在云服务器搭建WordPress站点?  建站中国官网:模板定制+SEO优化+建站流程一站式指南 

您的项目需求

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