原生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 相关文章推荐
js中判断控件是否存在
Aug 25 Javascript
javascript模拟实现ajax加载框实例
Oct 15 Javascript
JSON与String互转的实现方法(Javascript)
Sep 27 Javascript
angular ng-repeat数组中的数组实例
Feb 18 Javascript
JSONP跨域请求
Mar 02 Javascript
微信小程序城市定位的实现实例(获取当前所在国家城市信息)
May 17 Javascript
jQuery实现简单的计时器功能实例分析
Aug 29 jQuery
vue中使用iview自定义验证关键词输入框问题及解决方法
Mar 26 Javascript
vue+vue-router转场动画的实例代码
Sep 01 Javascript
微信小程序动态增加按钮组件
Sep 14 Javascript
vue 指令之气泡提示效果的实现代码
Oct 18 Javascript
全面了解JavaScript的作用域链
Apr 03 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/08/08 PHP
微信扫描二维码登录网站代码示例
2013/12/30 PHP
PHP快速生成各种信息提示框的方法
2016/02/03 PHP
php监测数据是否成功插入到Mysql数据库的方法
2016/11/25 PHP
js form 验证函数 当前比较流行的错误提示
2009/06/23 Javascript
为你的网站增加亮点的9款jQuery插件推荐
2011/05/03 Javascript
浅谈EasyUI中Treegrid节点的删除
2015/03/01 Javascript
JS实现向表格中动态添加行的方法
2015/03/30 Javascript
不想让浏览器运行javascript脚本的方法
2015/11/20 Javascript
JavaScript生成验证码并实现验证功能
2016/09/24 Javascript
JS动态计算移动端rem的解决方案
2016/10/14 Javascript
深入理解javascript中concat方法
2016/12/12 Javascript
Javascript 详解封装from表单数据为json串进行ajax提交
2017/03/29 Javascript
浅谈angularJS的$watch失效问题的解决方案
2017/08/11 Javascript
微信页面弹出键盘后iframe内容变空白的解决方案
2017/09/20 Javascript
JavaScript学习笔记之图片库案例分析
2019/01/08 Javascript
小程序实现简单语音聊天的示例代码
2020/07/24 Javascript
Python工程师面试题 与Python基础语法相关
2016/01/14 Python
基于Django的ModelForm组件(详解)
2017/12/07 Python
Python实现PS滤镜特效Marble Filter玻璃条纹扭曲效果示例
2018/01/29 Python
python实现机器人行走效果
2018/01/29 Python
PyQt5 pyqt多线程操作入门
2018/05/05 Python
python广度优先搜索得到两点间最短路径
2019/01/17 Python
使用python打印十行杨辉三角过程详解
2019/07/10 Python
基于python调用psutil模块过程解析
2019/12/20 Python
关于torch.optim的灵活使用详解(包括重写SGD,加上L1正则)
2020/02/20 Python
有趣的Python图片制作之如何用QQ好友头像拼接出里昂
2020/04/22 Python
使用Keras画神经网络准确性图教程
2020/06/15 Python
解决keras使用cov1D函数的输入问题
2020/06/29 Python
使用python求斐波那契数列中第n个数的值示例代码
2020/07/26 Python
python热力图实现简单方法
2021/01/29 Python
室内设计专业学生的自我评价分享
2013/11/27 职场文书
工程售后服务承诺书
2014/05/21 职场文书
擅自离岗检讨书
2014/09/12 职场文书
Python之基础函数案例详解
2021/08/30 Python