接着上面做一下补充:

1、dataset的用法,与attribute的区别

2、获取图片到页面顶部高度的正确方法

3、怎样处理已经显示的图片重复遍历的问题

4、 scroll事件的触发频率很快,怎么减小其处理函数 的调用频率

与dataset和getAttribute

1、它是html5自定义属性,低版本浏览器不兼容

2、html标签中定义:data-属性名,可设置多个

3、js中typeof img.dataset,值为object;

  获取所有自定义属性:img.dataset

  获取某个属性:img.dataset[属性名]

  添加某个属性:img.dataset[属性名]=值

  删除某个属性:delete img.dataset.属性名

4、与getAttribute和setAttribute相比,dataset更具语义 化,代码更简洁

获取图片到页面顶部高度的正确方法

function getTop(obj) {var h = 0;while (obj) {h += obj.offsetTop;obj = obj.offsetParent;}return h;
}

offsetParent(定位父级)的定义:与当前元素最近的非默认定位(position是static)的父级元素

已加载的图片不再遍历

var img = document.getElementsByTagName('img'),n = 0;
function lazyLoad() {var top =document.documentElement.clientHeight + (document.documentElement.scrollTop || document.body.scrollTop);for (var i = n;  i < img.length;  i++) {if (getTop(img[i]) < top) {setSrc(img[i]);n=i;}}
} 

最终效果:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title><style>.imgbox {width: 100%;min-height: 150px;margin: 20px 0;border: 1px solid red;}.imgbox img {width: 100%;}</style>
</head>
<body>
<div class="imgbox"><img data-src="http://pic.58pic.com/58pic/17/18/97/01U58PIC4Xr_1024.jpg"/></div>
<div class="imgbox"><img data-src="http://cover.read.duokan.com/mfsv2/download/fdsc3/p01N203pHTU7/Wr5314kcLAtVCi.jpg!t"/></div>
<div class="imgbox"><img data-src="http://77fkxu.com1.z0.glb.clouddn.com/20160308/1457402219_73571.jpg"/></div>
<div class="imgbox"><img data-src="http://cover.read.duokan.com/mfsv2/download/fdsc3/p01a3SXHo2hZ/XYAC5TLk4uYWXn.jpg!t"/></div>
<div class="imgbox"><img data-src="http://pic1.cxtuku.com/00/16/18/b3809a2ba0f3.jpg"/></div>
<div class="imgbox"><img data-src="http://img.bitscn.com/upimg/allimg/c150708/14363B06253120-6060O.jpg"/></div>
<div class="imgbox"><img data-src="http://pic.58pic.com/58pic/17/18/97/01U58PIC4Xr_1024.jpg"/></div>
<div class="imgbox"><img data-src="http://cover.read.duokan.com/mfsv2/download/fdsc3/p015trgKM7vw/H0iyDPPneOVrA4.jpg!t"/></div>
<div class="imgbox"><img data-src="http://77fkxu.com1.z0.glb.clouddn.com/20160308/1457402219_73571.jpg"/></div>
<div class="imgbox"><img data-src="http://imgsrc.baidu.com/baike/pic/item/2f9cbdcc5e0bcf5c00e9283b.jpg"/></div>
<div class="imgbox"><img data-src="http://pic1.cxtuku.com/00/16/18/b3809a2ba0f3.jpg"/></div>
<div class="imgbox"><img data-src="http://img.bitscn.com/upimg/allimg/c150708/14363B06253120-6060O.jpg"/></div>
<div class="imgbox"><img data-src="http://pic.58pic.com/58pic/17/18/97/01U58PIC4Xr_1024.jpg"/></div>
<div class="imgbox"><img data-src="http://cover.read.duokan.com/mfsv2/download/fdsc3/p015trgKM7vw/H0iyDPPneOVrA4.jpg!t"/></div>
<div class="imgbox"><img data-src="http://77fkxu.com1.z0.glb.clouddn.com/20160308/1457402219_73571.jpg"/></div>
<div class="imgbox"><img data-src="http://imgsrc.baidu.com/baike/pic/item/2f9cbdcc5e0bcf5c00e9283b.jpg"/></div>
<div class="imgbox"><img data-src="http://pic1.cxtuku.com/00/16/18/b3809a2ba0f3.jpg"/></div>
<div class="imgbox"><img data-src="http://img.bitscn.com/upimg/allimg/c150708/14363B06253120-6060O.jpg"/></div>
<div class="imgbox"><img data-src="http://pic.58pic.com/58pic/17/18/97/01U58PIC4Xr_1024.jpg"/></div>
<div class="imgbox"><img data-src="http://cover.read.duokan.com/mfsv2/download/fdsc3/p015trgKM7vw/H0iyDPPneOVrA4.jpg!t"/></div>
<div class="imgbox"><img data-src="http://77fkxu.com1.z0.glb.clouddn.com/20160308/1457402219_73571.jpg"/></div>
<div class="imgbox"><img data-src="http://imgsrc.baidu.com/baike/pic/item/2f9cbdcc5e0bcf5c00e9283b.jpg"/></div>
<div class="imgbox"><img data-src="http://pic1.cxtuku.com/00/16/18/b3809a2ba0f3.jpg"/></div>
<div class="imgbox"><img data-src="http://img.bitscn.com/upimg/allimg/c150708/14363B06253120-6060O.jpg"/></div>
<div class="imgbox"><img data-src="http://pic.58pic.com/58pic/17/18/97/01U58PIC4Xr_1024.jpg"/></div>
<div class="imgbox"><img data-src="http://cover.read.duokan.com/mfsv2/download/fdsc3/p015trgKM7vw/H0iyDPPneOVrA4.jpg!t"/></div>
<div class="imgbox"><img data-src="http://77fkxu.com1.z0.glb.clouddn.com/20160308/1457402219_73571.jpg"/></div>
<div class="imgbox"><img data-src="http://imgsrc.baidu.com/baike/pic/item/2f9cbdcc5e0bcf5c00e9283b.jpg"/></div>
<div class="imgbox"><img data-src="http://pic1.cxtuku.com/00/16/18/b3809a2ba0f3.jpg"/></div>
<div class="imgbox"><img data-src="http://img.bitscn.com/upimg/allimg/c150708/14363B06253120-6060O.jpg"/></div>
<div class="imgbox"><img data-src="http://pic.58pic.com/58pic/17/18/97/01U58PIC4Xr_1024.jpg"/></div>
<div class="imgbox" style="position:relative"><img data-src="http://cover.read.duokan.com/mfsv2/download/fdsc3/p015trgKM7vw/H0iyDPPneOVrA4.jpg!t"/></div>
<div class="imgbox" style="position:relative"><img data-src="http://77fkxu.com1.z0.glb.clouddn.com/20160308/1457402219_73571.jpg"/></div>
<div class="imgbox" style="position:relative"><img data-src="http://imgsrc.baidu.com/baike/pic/item/2f9cbdcc5e0bcf5c00e9283b.jpg"/></div>
<div class="imgbox" style="position:relative"><img data-src="http://pic1.cxtuku.com/00/16/18/b3809a2ba0f3.jpg"/></div>
<div class="imgbox" style="position:relative"><img data-src="http://img.bitscn.com/upimg/allimg/c150708/14363B06253120-6060O.jpg"/></div></body>
<script>var img = document.getElementsByTagName('img');var n = 0;function getTop(obj) {var h = 0;while (obj) {h += obj.offsetTop;obj = obj.offsetParent;}return h;}function setSrc(imgNode){var src='';if (imgNode.dataset) {src=imgNode.dataset.src;} else {src=imgNode.getAttribute('data-src');}imgNode.src=src;}function lazyLoad() {var top =document.documentElement.clientHeight + (document.documentElement.scrollTop || document.body.scrollTop);for (var i = n; i < img.length; i++) {console.log(top);if (getTop(img[i]) < top) {setSrc(img[i]);n=i;}}}window.onscroll = lazyLoad;window.onload=function () {window.onscroll();}</script>
</html>

View Code

发现还有一个问题没有处理: scroll事件的触发频率很快,怎么减小其处理函数 的调用频率,请看下一篇节流函数的介绍

转载于:https://www.cnblogs.com/aredleave/p/7573166.html

图片懒加载原理-实例二相关推荐

  1. 使用jQuery实现图片懒加载原理

    在网页中,常常需要用到图片,而图片需要消耗较大的流量.正常情况下,浏览器会解析整个HTML代码,然后从上到下依次加载的图片标签.如果页面很长,隐藏在页面下方的图片其实已经被浏览器加载了.如果用户不向下 ...

  2. js实现图片懒加载原理(marksheng)

    有时候一个网页会包含很多的图片,例如淘宝京东这些购物网站,商品图片多只之又多,页面图片多,加载的图片就多.服务器压力就会很大.不仅影响渲染速度还会浪费带宽.比如一个1M大小的图片,并发情况下,达到10 ...

  3. js实现图片懒加载原理

    有时候一个网页会包含很多的图片,例如淘宝京东这些购物网站,商品图片多只之又多,页面图片多,加载的图片就多.服务器压力就会很大.不仅影响渲染速度还会浪费带宽.比如一个1M大小的图片,并发情况下,达到10 ...

  4. js图片懒加载原理、实现及节流优化

    1.懒加载原理 在图片没有进入可视区域时,先给的src一个默认加载的图片,这样浏览器就不会发送请求了,等到图片进入可视区域再把真实的图片路径data-src给src. 2.具体实现 1. 效果 2. ...

  5. html图片懒加载,图片懒加载原理及实现

    原理: 先将img标签的src链接设为同一张图片(比如空白图片),然后给img标签设置自定义属性(比如 data-src),然后将真正的图片地址存储在data-src中,当JS监听到该图片元素进入可视 ...

  6. 图片懒加载原理及实现

    原理: 先将img标签的src链接设为同一张图片(比如空白图片),然后给img标签设置自定义属性(比如 data-src),然后将真正的图片地址存储在data-src中,当JS监听到该图片元素进入可视 ...

  7. 小程序swiper怎么让内容撑开高度_小程序瀑布流组件:支持翻页与图片懒加载

    电商小程序中,用到瀑布流的地方非常多,每次都写一个瀑布流,重复一次逻辑,作为程序员,肯定是非常不愿意的. 瀑布流的形式都是大同小异,不同的是瀑布流中每个模块的内容,随业务而变化. 所以,我们把瀑布流框 ...

  8. Vue自定义指令及实现图片懒加载指令

    一. 速识概念:   在我们使用 Vue 的过程中,遇到了很多方便我们操作的vue内置指令,以 v-xxx 表示.比如有 v-module,v-for,v-if,v-show 等等,每个指令都能实现一 ...

  9. js实现审批流_小程序瀑布流组件:支持翻页与图片懒加载

    电商小程序中,用到瀑布流的地方非常多,每次都写一个瀑布流,重复一次逻辑,作为程序员,肯定是非常不愿意的. 瀑布流的形式都是大同小异,不同的是瀑布流中每个模块的内容,随业务而变化. 所以,我们把瀑布流框 ...

最新文章

  1. reorder-list——链表、快慢指针、逆转链表、链表合并
  2. Ubuntu16下编译安装Open Babel2.4.1和python绑定
  3. 用户信息检索另一台服务器,客户机上一用户访问另一台机器上的informix数据库...
  4. AI算法 真的能算出人类的欲望吗?
  5. 简单实现几种常见的前端效果,附代码!
  6. 【AWSL】之Linux引导过程及服务控制(MBR、GRUB、runlevel、systemcl、init、ntsysv、chkconfig)
  7. 四轴PID控制算法详解(单环PID、串级PID)
  8. 华为云发起美食图片分类大赛!奖品丰厚还可免费使用云资源
  9. 关于childNodes的删除
  10. 深度学习笔记——生成模型
  11. mysql加索引后查询时间变长了(终于有头绪了)
  12. 【java学习之路】(javaWeb篇)002.CSS
  13. 我的dota之路(下)
  14. epel源mysql版本_centos网络yum源和epel源(2017可用首选)
  15. yum安装mysql和mysql源,配置mysql
  16. Chrome浏览器嗅探方法
  17. 机器学习算法(十) 根据幸福感问卷调查做预测
  18. 霸榜巨作、阿里内部顶级专家整理(Redis 5设计与源码分析)
  19. Alexa 排名万能查询系统
  20. 软考证书可积分落户、评职称、抵扣个税等,快来考一个吧!

热门文章

  1. 打死都要记住!微服务架构的常用设计模式!
  2. 关于 Java 性能调优的 11个简单技巧,多少人知道?
  3. Spring Security 4 使用@PreAuthorize,@PostAuthorize, @Secured, EL实现方法安全
  4. Java实现搜索回溯经典题目
  5. Android --- layout_marginStart和layout_marginEnd的详细讲解
  6. java filereader blob_二进制学习——Blob,ArrayBuffer、File、FileReader和FormData的区别
  7. 2020港澳台iptv直播软件_用什么便签软件准时提醒开学第一课2020直播开始?
  8. python做社会网络分析_社交网络分析(Social Network Analysis in Python)①
  9. Linux什么是文件IO,linux中文件IO
  10. 帆软报表等于空的时候不显示_查询结果为空时不显示报表内容