原生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 相关文章推荐
javascript得到XML某节点的子节点个数的脚本
Oct 11 Javascript
Extjs显示从数据库取出时间转换JSON后的出现问题
Nov 20 Javascript
jQuery实现监控页面所有ajax请求的方法
Dec 10 Javascript
js 点击a标签 获取a的自定义属性方法
Nov 21 Javascript
Vue 父子组件、组件间通信
Mar 08 Javascript
使用vue制作FullPage页面滚动效果
Aug 21 Javascript
AngularJS实现的根据数量与单价计算总价功能示例
Dec 26 Javascript
Vue2 模板template的四种写法总结
Feb 23 Javascript
Vue-router 中hash模式和history模式的区别
Jul 24 Javascript
vue做移动端适配最佳解决方案(亲测有效)
Sep 04 Javascript
Vue 表情包输入组件的实现代码
Jan 21 Javascript
Js类的构建与继承案例详解
Sep 15 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
MySQL数据源表结构图示
2008/06/05 PHP
php 阴历-农历-转换类代码
2012/01/16 PHP
PHP 提取图片img标记中的任意属性的简单实例
2013/12/10 PHP
linux系统下php安装mbstring扩展的二种方法
2014/01/20 PHP
PHP操作文件的一些基本函数使用示例
2014/11/18 PHP
ThinkPHP中使用ajax接收json数据的方法
2014/12/18 PHP
PHP简单实现二维数组赋值与遍历功能示例
2017/10/19 PHP
js拖动div 当鼠标移动时整个div也相应的移动
2013/11/21 Javascript
jQuery中:image选择器用法实例
2015/01/03 Javascript
jquery实现标题字体变换的滑动门菜单效果
2015/09/07 Javascript
jQuery实现打开页面渐现效果示例
2016/07/27 Javascript
使用BootStrap实现悬浮窗口的效果
2016/12/13 Javascript
JavaScript实现实时更新系统时间的实例代码
2017/04/04 Javascript
JS判断一个数是否是水仙花数
2017/06/11 Javascript
vue select选择框数据变化监听方法
2018/08/24 Javascript
JavaScript中的null和undefined用法解析
2019/09/30 Javascript
vue $set 给数据赋值的实例
2019/11/09 Javascript
[02:11]2016国际邀请赛中国区预选赛最美TA采访现场玩家
2016/06/28 DOTA
[56:48]FNATIC vs EG 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/16 DOTA
在Python中操作字典之fromkeys()方法的使用
2015/05/21 Python
Python json模块dumps、loads操作示例
2018/09/06 Python
Python中的集合介绍
2019/01/28 Python
Python编程学习之如何判断3个数的大小
2019/08/07 Python
美国创意礼品网站:UncommonGoods
2017/02/03 全球购物
Ticketmaster意大利:音乐会、节日、艺术和剧院的官方门票
2019/12/23 全球购物
旅游专业职业生涯规划范文
2014/01/13 职场文书
年终奖发放方案
2014/06/02 职场文书
5s标语大全
2014/06/23 职场文书
贸易经济专业自荐书
2014/06/29 职场文书
党的群众路线教育实践活动方案
2014/10/31 职场文书
小学六一儿童节活动总结
2015/05/05 职场文书
重阳节简报
2015/07/20 职场文书
2016年教师党员承诺书范文
2016/03/24 职场文书
Oracle安装TNS_ADMIN环境变量设置参考
2021/11/01 Oracle
Python中异常处理用法
2021/11/27 Python
MySQL自定义函数及触发器
2022/08/05 MySQL