原生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库 开发规则
Jan 31 Javascript
node.js中的console.timeEnd方法使用说明
Dec 09 Javascript
JavaScript中的toString()和toLocaleString()方法的区别
Feb 15 Javascript
老生常谈ES6中的类
Jul 31 Javascript
移动端触摸滑动插件swiper使用方法详解
Aug 11 Javascript
Vue列表渲染的示例代码
Nov 01 Javascript
微信小程序 拍照或从相册选取图片上传代码实例
Aug 28 Javascript
100行代码实现vue表单校验功能(小白自编)
Nov 19 Javascript
在 Vue 中使用 JSX 及使用它的原因浅析
Feb 10 Javascript
JS常用排序方法实例代码解析
Mar 03 Javascript
vue实现div可拖动位置也可改变盒子大小的原理
Sep 16 Javascript
react合成事件与原生事件的相关理解
May 13 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文本数据库的搜索方法
2006/10/09 PHP
php防盗链的常用方法小结
2010/07/02 PHP
IIS 7.5 asp Session超时时间设置方法
2017/04/17 PHP
PHP性能分析工具xhprof的安装使用与注意事项
2017/12/19 PHP
FireFox与IE 下js兼容触发click事件的代码
2008/11/20 Javascript
Google AJAX 搜索 API实现代码
2010/11/17 Javascript
jQuery学习笔记[1] jQuery中的DOM操作
2010/12/03 Javascript
在JavaScript的AngularJS库中进行单元测试的方法
2015/06/23 Javascript
浅析JavaScriptSerializer类的序列化与反序列化
2016/11/22 Javascript
jQuery元素选择器实例代码
2017/02/06 Javascript
解析Vue2.0双向绑定实现原理
2017/02/23 Javascript
纯js实现动态时间显示
2020/09/07 Javascript
JavaScript异步加载问题总结
2018/02/17 Javascript
详解IOS微信上Vue单页面应用JSSDK签名失败解决方案
2018/11/14 Javascript
vue2 中二级路由高亮问题及配置方法
2019/06/10 Javascript
微信小程序搜索框样式并实现跳转到搜索页面(小程序搜索功能)
2020/03/10 Javascript
微信小程序实现列表左右滑动
2020/11/19 Javascript
[04:55]完美世界副总裁蔡玮:DOTA2的自由、公平与信任
2013/12/18 DOTA
python使用datetime模块计算各种时间间隔的方法
2015/03/24 Python
利用Python实现简单的相似图片搜索的教程
2015/04/23 Python
python获取从命令行输入数字的方法
2015/04/29 Python
Python编程入门的一些基本知识
2015/05/13 Python
rabbitmq(中间消息代理)在python中的使用详解
2017/12/14 Python
使用python模拟高斯分布例子
2019/12/09 Python
python利用datetime模块计算程序运行时间问题
2020/02/20 Python
Python改变对象的字符串显示的方法
2020/08/01 Python
HTML5 Canvas 旋转风车绘制
2017/08/18 HTML / CSS
康帕斯酒店预订:Compass Hospitality(支持中文)
2018/08/23 全球购物
反腐倡廉警示教育活动总结
2014/05/05 职场文书
酒店管理毕业生自荐信
2014/05/25 职场文书
2014年食品安全工作总结
2014/12/04 职场文书
公务员政审材料
2014/12/23 职场文书
基层医务人员三严三实心得体会
2016/01/05 职场文书
Python实现视频中添加音频工具详解
2021/12/06 Python
python 离散点图画法的实现
2022/04/01 Python