原生javaScript实现图片延时加载的方法


Posted in Javascript onDecember 22, 2014

本文实例讲述了原生javaScript实现图片延时加载的方法。图片延时加载其实是有jquery插件了并且加载方法非常的简单并且合理了,但有朋友觉得加载jquery插件包太大了,于时自己写了一个,给各位分享一下。

首先,图片延时加载可以节省我们带宽,获取到更好的用户体验,尤其对于图片多的站点,这一点显得至关重要,下面就跟大家探讨一下图片延时加载原理和实现代码。

图片延时加载原理

图片延时加载原理是在html里面的图片src填的并不是真正的图片地址,而是以一种自定义属性把图片地址赋给img标签,如:src=”img/loading.gif” data-url=”img/1.jpg”,然后通过js判断浏览器滚动条事件,达到某处的时候把自定义属性里面的图片真实地址赋给当前img标签的src,从而实现图片动态的显示。在真正的项目中,这些图片的地址可以通过ajax传递过来,赋给img的自定义属性。

原生JS实现图片延时加载实例:

文字内容看起来终究有些枯燥,我写了一个简单的demo,现在把全部代码贴出来,需要的朋友可以直接复制过去,看一下代码就明白了。

<!DOCTYPE HTML>

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8">

<title>图片延迟加载</title>

<style>

    img{display:block;width:350px;height:245px;background:url(img/loading.gif) center center no-repeat}

</style>

</head>

<body>

<div id="div">

<img src="" alt="" data-url="img/11.jpg" class="test"><br>

<img src="" alt="" data-url="img/11.jpg" class="test"><br>

<img src="" alt="" data-url="img/11.jpg" class="test"><br>

<img src="" alt="" data-url="img/11.jpg" class="test"><br>

<img src="" alt="" data-url="img/11.jpg" class="test"><br>

<img src="" alt="" data-url="img/11.jpg" class="test"><br>

<img src="" alt="" data-url="img/11.jpg" class="test"><br>

<img src="" alt="" data-url="img/11.jpg" class="test"><br>

<img src="" alt="" data-url="img/11.jpg" class="test"><br>

<img src="" alt="" data-url="img/11.jpg" class="test"><br>

<img src="" alt="" data-url="img/11.jpg" class="test"><br>

<img src="" alt="" data-url="img/11.jpg" class="test"><br>

<img src="" alt="" data-url="img/11.jpg" class="test"><br>

<img src="" alt="" data-url="img/11.jpg" class="test"><br>

<img src="" alt="" data-url="img/11.jpg" class="test"><br>

<img src="" alt="" data-url="img/11.jpg" class="test"><br>

<img src="" alt="" data-url="img/11.jpg" class="test"><br>

<img src="" alt="" data-url="img/11.jpg" class="test"><br>

<img src="" alt="" data-url="img/11.jpg" class="test"><br>

<img src="" alt="" data-url="img/11.jpg" class="test"><br>

<img src="" alt="" data-url="img/11.jpg" class="test"><br>

<img src="" alt="" data-url="img/11.jpg" class="test"><br>

<img src="" alt="" data-url="img/11.jpg" class="test"><br>

<img src="" alt="" data-url="img/11.jpg" class="test"><br>

</div>

<script type="text/javascript">

var obj=document.getElementById("div").getElementsByTagName("img"),

h=window.innerHeight || document.documentElement.clientHeight;

for(var i=0;i<obj.length;i++){

    obj[i].url=obj[i].getAttribute("data-url");

    obj[i].top=obj[i].offsetTop;

    obj[i].flag=true;  //防止浏览器一直加载图片,这样图片加载成功后,滚动浏览器的时候就不会再加载图片了;

}

var fnLoad = function(obj){

    var t = document.body.scrollTop || document.documentElement.scrollTop; 

    if(t+h>obj.top+200&&obj.top>t){ //给个200为了提高让用户看到图片加载状态,更加友好

       setTimeout(function(){

         obj.src=obj.url;

         obj.flag=false;

       },500)

    }

}

window.onscroll = window.onload=function(){

    for(var i=0;i<obj.length;i++){

        if(obj[i].flag){

            fnLoad(obj[i]);

        }

    }

}

</script>

</body>

</html>

希望本文所述对大家的javascript程序设计有所帮助。

Javascript 相关文章推荐
对google个性主页的拖拽效果的js的完整注释[转]
Apr 10 Javascript
javascript 点击整页变灰的效果(可做退出效果)。
Jan 09 Javascript
javascript操作cookie_获取与修改代码
May 21 Javascript
纯JavaScript实现的完美渐变弹出层效果代码
Apr 02 Javascript
原生javascript获取元素样式属性值的方法
Dec 25 Javascript
jquery修改网页背景颜色通过css方法实现
Jun 06 Javascript
在JavaScript中处理字符串之link()方法的使用
Jun 08 Javascript
javascript数据结构之二叉搜索树实现方法
Nov 25 Javascript
js实现页面跳转的五种方法推荐
Mar 10 Javascript
jQuery 操作input中radio的技巧
Jul 18 Javascript
bootstrap警告框使用方法解析
Jan 13 Javascript
vue+echarts实现动态折线图的方法与注意
Sep 01 Javascript
使用JavaScript链式编程实现模拟Jquery函数
Dec 21 #Javascript
使用jQuery简单实现模拟浏览器搜索功能
Dec 21 #Javascript
编写简单的jQuery提示插件
Dec 21 #Javascript
不使用ajax实现无刷新提交表单
Dec 21 #Javascript
webapp框架AngularUI的demo改造之路
Dec 21 #Javascript
浅析webapp框架AngularUI的demo
Dec 21 #Javascript
AngularJS基础知识
Dec 21 #Javascript
You might like
用php过滤危险html代码的函数
2008/07/22 PHP
使用pthreads实现真正的PHP多线程(需PHP5.3以上版本)
2014/05/05 PHP
PHP匿名函数和use子句用法实例
2016/03/16 PHP
js 提交和设置表单的值
2008/12/19 Javascript
vue.js配合$.post从后台获取数据简单demo分享
2018/08/11 Javascript
vue 列表页跳转详情页获取id以及详情页通过id获取数据
2019/03/27 Javascript
JavaScript中的一些实用小技巧总结
2019/04/07 Javascript
layer父页获取弹出层输入框里面的值方法
2019/09/02 Javascript
Python 装饰器使用详解
2017/07/29 Python
python 随机数使用方法,推导以及字符串,双色球小程序实例
2017/09/12 Python
python中hashlib模块用法示例
2017/10/30 Python
flask + pymysql操作Mysql数据库的实例
2017/11/13 Python
Python之reload流程实例代码解析
2018/01/29 Python
使用Python向C语言的链接库传递数组、结构体、指针类型的数据
2019/01/29 Python
Python 复平面绘图实例
2019/11/21 Python
django自定义模板标签过程解析
2019/12/14 Python
pytorch 批次遍历数据集打印数据的例子
2019/12/30 Python
Pytorch 实现数据集自定义读取
2020/01/18 Python
Python API len函数操作过程解析
2020/03/05 Python
基于Python爬取51cto博客页面信息过程解析
2020/08/25 Python
解决Python 写文件报错TypeError的问题
2020/10/23 Python
Python实现Kerberos用户的增删改查操作
2020/12/14 Python
德国奢侈品网上商城:Mytheresa
2016/08/24 全球购物
有原因的手表:Flex Watches
2019/03/23 全球购物
Booking.com亚太地区:Booking.com APAC
2020/02/07 全球购物
Yahoo-PHP面试题2
2014/12/06 面试题
精伦电子Java笔试题
2013/01/16 面试题
求职信内容考虑哪几点
2013/10/05 职场文书
计算机软件个人的自荐信范文
2013/12/01 职场文书
先进德育工作者事迹材料
2014/01/24 职场文书
法律进学校实施方案
2014/03/15 职场文书
程序员求职信
2014/04/16 职场文书
幼儿园教师师德承诺书
2015/04/28 职场文书
小学语文教学随笔
2015/08/14 职场文书
写好求职信的技巧解密
2019/05/14 职场文书
Redis命令处理过程源码解析
2022/02/12 Redis