原生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 相关文章推荐
利用jQuery 实现GridView异步排序、分页的代码
Feb 06 Javascript
如何将JS的变量值传递给ASP变量
Dec 10 Javascript
javascript显示用户停留时间的简单实例
Aug 05 Javascript
JS小游戏之极速快跑源码详解
Sep 25 Javascript
四种参数传递的形式——URL,超链接,js,form表单
Jul 24 Javascript
JS使用cookie实现只出现一次的广告代码效果
Apr 22 Javascript
js截取字符串功能的实现方法
Sep 27 Javascript
JavaScript实现的DOM绘制柱状图效果示例
Aug 08 Javascript
Vue中的情侣属性$dispatch和$broadcast详解
Mar 07 Javascript
JavaScript解析JSON数据示例
Jul 16 Javascript
node.js事件轮询机制原理知识点
Dec 22 Javascript
使用webpack搭建vue环境的教程详解
Dec 31 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
关于Intype一些小问题的解决办法
2008/03/28 PHP
用PHP实现 上一篇、下一篇的代码
2012/09/29 PHP
深入HTTP响应状态码速查表的详解
2013/06/07 PHP
PHP实现UTF-8文件BOM自动检测与移除实例
2014/11/05 PHP
php计算函数执行时间的方法
2015/03/20 PHP
Laravel中unique和exists验证规则的优化详解
2018/01/28 PHP
Js 时间函数getYear()的使用问题探讨
2013/04/01 Javascript
JQUERY 设置SELECT选中项代码
2014/02/07 Javascript
jQuery 仿百度输入标签插件附效果图
2014/07/04 Javascript
node.js中的fs.write方法使用说明
2014/12/15 Javascript
基于jQuery实现收缩展开功能
2016/03/18 Javascript
关于RequireJS的简单介绍即使用方法
2016/10/20 Javascript
Bootstrap 设置datetimepicker在屏幕上面弹出设置方法
2017/03/21 Javascript
详解关于webpack多入口热加载很慢的原因
2019/04/24 Javascript
小程序实现tab标签页
2020/11/16 Javascript
动态实现element ui的el-table某列数据不同样式的示例
2021/01/22 Javascript
Python实现读取txt文件并画三维图简单代码示例
2017/12/09 Python
Window10+Python3.5安装opencv的教程推荐
2018/04/02 Python
查看django版本的方法分享
2018/05/14 Python
python实现列表中由数值查到索引的方法
2018/06/27 Python
python Flask 装饰器顺序问题解决
2018/08/08 Python
关于python导入模块import与常见的模块详解
2019/08/28 Python
深入浅析Python 中的sklearn模型选择
2019/10/12 Python
pygame库实现移动底座弹球小游戏
2020/04/14 Python
django model object序列化实例
2020/03/13 Python
CSS3中引入多种自定义字体font-face
2020/06/12 HTML / CSS
英国行业制服供应商:Alexandra
2019/09/14 全球购物
介绍一下内联、左联、右联
2013/12/31 面试题
幼师专业毕业生自荐信
2013/09/29 职场文书
教师自我鉴定范文
2013/11/10 职场文书
网上签名寄语活动留言
2014/01/18 职场文书
给小学生的新年寄语
2014/04/04 职场文书
卫生厅领导班子党的群众路线教育实践活动整改措施
2014/09/20 职场文书
2014年创卫工作总结
2014/11/24 职场文书
go原生库的中bytes.Buffer用法
2021/04/25 Golang
详解OpenCV曝光融合
2022/04/29 Python