原生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功能函数(2009-06-04更新)
Jun 04 Javascript
可简单避免的三个JS发布错误的详细介绍
Aug 02 Javascript
jquery计算出left和top,让一个div水平垂直居中的简单实例
Jul 13 Javascript
vue源码学习之Object.defineProperty对象属性监听
May 30 Javascript
Vue不能观察到数组length的变化
Jun 08 Javascript
使用jquery的cookie实现登录页记住用户名和密码的方法
Mar 13 jQuery
基于Vue 撸一个指令实现拖拽功能
Oct 09 Javascript
使用JavaScrip模拟实现仿京东搜索框功能
Oct 16 Javascript
vue引用外部JS的两种种方法
Jan 28 Javascript
Node.js API详解之 tty功能与用法实例分析
Apr 27 Javascript
基于Vue2实现移动端图片上传、压缩、拖拽排序、拖拽删除功能
Jan 05 Vue.js
JavaScript WeakMap使用详解
Feb 05 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代码审核的详细介绍
2013/06/13 PHP
php+Mysqli利用事务处理转账问题实例
2015/02/11 PHP
php中将一个对象保存到Session中的方法
2015/03/13 PHP
javascript 的Document属性和方法集合
2010/01/25 Javascript
更换select下拉菜单背景样式的实现代码
2011/12/20 Javascript
如何制作浮动广告 JavaScript制作浮动广告代码
2012/12/30 Javascript
封装html的select标签的js操作实例
2013/07/02 Javascript
jQuery简单实现提交数据出现loading进度条的方法
2016/03/29 Javascript
下一代Bootstrap的5个特点 超酷炫!
2016/06/17 Javascript
原生js获取浏览器窗口及元素宽高常用方法集合
2017/01/18 Javascript
flexslider.js实现移动端轮播
2017/02/05 Javascript
MUI  Scroll插件的使用详解
2017/04/13 Javascript
巧用weui.topTips验证数据的实例
2017/04/17 Javascript
使用Vue-Router 2实现路由功能实例详解
2017/11/14 Javascript
利用chrome浏览器进行js调试并找出元素绑定的点击事件详解
2021/01/30 Javascript
对angularJs中controller控制器scope父子集作用域的实例讲解
2018/10/08 Javascript
JS实现十分钟倒计时代码实例
2018/10/18 Javascript
Angular4.0动画操作实例详解
2019/05/10 Javascript
vue2.x 对象劫持的原理实现
2020/04/19 Javascript
JavaScript自定义超时API代码实例
2020/04/30 Javascript
JavaScript实现简单验证码
2020/08/24 Javascript
[01:31]DOTA2上海特级锦标赛 SECRET战队完整宣传片
2016/03/16 DOTA
在Python中利用Into包整洁地进行数据迁移的教程
2015/03/30 Python
一些Python中的二维数组的操作方法
2015/05/02 Python
TensorFlow实现简单卷积神经网络
2018/05/24 Python
python3连接MySQL数据库实例详解
2018/05/24 Python
python删除字符串中指定字符的方法
2018/08/13 Python
详解多线程Django程序耗尽数据库连接的问题
2018/10/08 Python
python利用Tesseract识别验证码的方法示例
2019/01/21 Python
Python pandas DataFrame操作的实现代码
2019/06/21 Python
Python 使用threading+Queue实现线程池示例
2019/12/21 Python
python图片验证码识别最新模块muggle_ocr的示例代码
2020/07/03 Python
表彰先进的通报
2014/01/31 职场文书
一年级小学生评语大全
2014/12/25 职场文书
雾霾停课通知
2015/04/24 职场文书
php字符串倒叙
2021/04/01 PHP