博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
js实现图片懒加载
阅读量:6710 次
发布时间:2019-06-25

本文共 2200 字,大约阅读时间需要 7 分钟。

概述

如果是一个图片列表页,虽然好看,但是相关图片的加载要耗费非常长的时间,等待图片一格一格的加载,实在让人抓狂,如何优化此类页面呢?

详细

代码下载:

笔者总结有两种方法优化(欢迎在文章评论中给我留言介绍其它方法):

1.利用ajax技术将此类页面做成瀑布流

2.图片懒加载

综上所述,如果在没有ajax支持的情况下,图片懒加载是一个非常好的选择。

一、准备工作

本例子实现图片懒加载功能,其中需要用到html5的data自定义属性dataset来获取某一个节点的值、动态创建节点creatElement和怎样判断节点到顶部的距离(offsetTop,offsetParent)等js方法:

 

     
描述 测试
data-*

data-* 属性用于存储私有页面后应用的自定义数据。

data-* 属性可以在所有的 HTML 元素中嵌入数据。

自定义的数据可以让页面拥有更好的交互体验(不需要使用 Ajax 或去服务端查询数据)。

data-* 属性由以下两部分组成:

  1. 属性名不要包含大写字母,在 data- 后必须至少有一个字符。

  2. 该属性可以是任何字符串

createElment createElement() 方法通过指定名称创建一个元素
offsetTop 返回当前元素的相对垂直偏移位置的偏移容器  
offsetParent 返回元素的偏移容器
 

 

 

二、程序实现

1、实现思路:

页面加载后只让文档可视区内的图片显示,其它不显示,随着用户对页面的滚动,判断其区域位置,生成img标签,让到可视区的图片加载出来(正所谓响应了党的号召:让一部分人先富起来,从而带动其他人富起来,最终实现共同富裕)。

 

2、相关技术掌握:

给img的父级加属性 (例如data-src),将图片的地址赋值给他,这样就生成img标签后再把data-src的值赋给img的src(通过dataset.src或者getAttribute('src'),再赋值给img.setAttribute('src'))

 

3、相关代码:

html部分

 

 

js部分

(1)获取节点和节点的“data-src”属性,继而判断此节点的子节点有没有创建img,没有则动态创建img标签将其“data-src”的值赋给img的src,有则不做任何处理

/* 获取节点 */    var oUl = document.getElementsByTagName('ul')[0];var aLi = oUl.getElementsByTagName('li');/* 创建img标签函数 */    function createImg(obj){       var src = '';        if(obj.dataset.src){        src = obj.dataset.src;    }else{        src = obj.getAttribute('data-src');    }        if(obj.children.length <= 1){                var img = document.createElement('img');        img.src = src;        obj.appendChild(img);    }}

 

(2)通过“offsetTop”来连续获取节点到文档顶部的距离并更新,直到节点再没有父级为止

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

 

(3)滚动实时计算所到区域计算“节点到顶部距离”与“滚动条滚动距离”的大小,当“滚动条滚动距离”大于“节点到顶部距离”时开始创建一个img((1)的函数)

window.onscroll = function(){        var t = document.documentElement.clientHeight + (document.body.scrollTop || document.documentElement.scrollTop);        for(var i=0;i

 

三、运行效果

文件截图:

image.png

 

运行时的截图:

image.png

 

 

代码下载:

注:本文著作权归作者,由demo大师发表,拒绝转载,转载需要作者授权

转载于:https://www.cnblogs.com/demodashi/p/8486513.html

你可能感兴趣的文章
lf 前后端分离 (3) 中间建跨域
查看>>
Python Day1
查看>>
警惕互联网与经济的双重泡沫
查看>>
Caddy服务器搭建和实现文件共享
查看>>
授予组件和控件许可权限
查看>>
fortitoken
查看>>
python中的字符串操作
查看>>
四则运算(挑战出题)解答之轮子哥版-2
查看>>
监听器 HttpSessionBindingListener
查看>>
Django学习笔记-2018.11.17
查看>>
列表转字典
查看>>
python Day 1 - 搭建开发环境
查看>>
原来还有这样一个东西,重来不知道过-linux ,ulimit
查看>>
IO多路复用之select总结
查看>>
机器学习基础-Logistic回归1
查看>>
ubuntu14.04/16.04无法设置成中文解决办法
查看>>
Eclipse的Debug各种视图介绍(二)
查看>>
servlet:servletContext简介和方法使用
查看>>
CSS属性 table 的 border-collapse 边框合并
查看>>
P1364 医院设置
查看>>