原生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对文本框值的判断示例
Mar 10 Javascript
JavaScript实现大数的运算
Nov 24 Javascript
JS+DIV+CSS实现仿表单下拉列表效果
Aug 18 Javascript
AngularJS基础 ng-disabled 指令详解及简单示例
Aug 01 Javascript
AngularJS入门教程引导程序
Aug 18 Javascript
JS遍历对象属性的方法示例
Jan 10 Javascript
关于使用js算总价的问题
Jun 23 Javascript
js 显示日期时间的实例(时间过一秒加1)
Oct 25 Javascript
jQuery中ajax获取数据赋值给页面的实例
Dec 31 jQuery
wx-charts 微信小程序图表插件的具体使用
Aug 18 Javascript
浅谈layer弹出层按钮颜色修改方法
Sep 11 Javascript
vue fetch中的.then()的正确使用方法
Apr 17 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
PHPMYADMIN 简明安装教程 推荐
2010/03/07 PHP
ThinkPHP实现多数据库连接的解决方法
2014/07/01 PHP
php给图片加文字水印
2015/07/31 PHP
Smarty日期时间操作方法示例
2016/11/15 PHP
php+ajax实现无刷新文件上传功能(ajaxuploadfile)
2018/02/11 PHP
详解PHP版本兼容之openssl调用参数
2018/07/25 PHP
Extjs TriggerField在弹出窗口显示不出问题的解决方法
2010/01/08 Javascript
浅析document.createDocumentFragment()与js效率
2013/07/08 Javascript
利用js给datalist或select动态添加option选项的方法
2018/01/25 Javascript
用Vue写一个分页器的示例代码
2018/04/22 Javascript
详解vue-cli3多环境打包配置
2019/03/28 Javascript
Javascript读取上传文件内容/类型/字节数
2019/04/30 Javascript
ant-design表单处理和常用方法及自定义验证操作
2020/10/27 Javascript
go和python调用其它程序并得到程序输出
2014/02/10 Python
使用url_helper简化Python中Django框架的url配置教程
2015/05/30 Python
python开发之文件操作用法实例
2015/11/13 Python
Python使用base64模块进行二进制数据编码详解
2018/01/11 Python
python 列表删除所有指定元素的方法
2018/04/19 Python
selenium 安装与chromedriver安装的方法步骤
2019/06/12 Python
使用Rasterio读取栅格数据的实例讲解
2019/11/26 Python
使用python-opencv读取视频,计算视频总帧数及FPS的实现
2019/12/10 Python
python GUI库图形界面开发之PyQt5图片显示控件QPixmap详细使用方法与实例
2020/02/27 Python
英国家喻户晓的折扣商场:TK Maxx
2017/05/26 全球购物
加拿大城市本地限时优惠:Buytopia.ca
2018/09/19 全球购物
世界上最大的皮肤科医生拥有和经营的美容网站:LovelySkin
2021/01/03 全球购物
J2ee常用的设计模式?说明工厂模式
2015/05/21 面试题
计算机个人求职信范例
2014/01/24 职场文书
煤矿机修工岗位职责
2014/02/07 职场文书
2014年两会学习心得范例
2014/03/17 职场文书
元旦晚会主持词
2014/03/24 职场文书
求职信怎么写
2014/05/23 职场文书
党的群众路线教育实践活动对照检查材料思想汇报
2014/09/19 职场文书
某集团股份有限公司委托书样本
2014/09/24 职场文书
2014年前台文员工作总结
2014/12/08 职场文书
《天使的翅膀》读后感3篇
2019/12/20 职场文书
浅谈Python 中的复数问题
2021/05/19 Python