原生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 毫秒转时间示例代码
Sep 22 Javascript
利用javascript打开模态对话框(示例代码)
Jan 11 Javascript
jquery实现页面虚拟键盘特效
Aug 08 Javascript
Bootstrap~多级导航(级联导航)的实现效果【附代码】
Mar 08 Javascript
js 模仿锚点定位的实现方法
Nov 19 Javascript
AngularJS实现动态添加Option的方法
May 17 Javascript
JS实现数组去重方法总结(六种方法)
Jul 14 Javascript
jQuery EasyUI 选项卡面板tabs的使用实例讲解
Dec 25 jQuery
React通过redux-persist持久化数据存储的方法示例
Feb 14 Javascript
vue 清空input标签 中file的值操作
Jul 21 Javascript
jquery简易手风琴插件的封装
Oct 13 jQuery
vue绑定class的三种方法
Dec 24 Vue.js
使用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中的Session对象如何使用
2015/09/25 PHP
PHP MVC框架路由学习笔记
2016/03/02 PHP
php数组指针操作详解
2017/02/14 PHP
phpstudy的php版本自由修改的方法
2017/10/18 PHP
Laravel 实现添加多语言提示信息
2019/10/25 PHP
Stop SQL Server
2007/06/21 Javascript
JSON 学习之JSON in JavaScript详细使用说明
2010/02/23 Javascript
js 无提示关闭浏览器页面的代码
2010/03/09 Javascript
jquery实现鼠标滑过小图时显示大图的方法
2015/01/14 Javascript
跟我学习javascript的undefined与null
2015/11/17 Javascript
JavaScript兼容性总结之获取非行间样式案例
2016/08/07 Javascript
JS焦点图,JS 多个页面放多个焦点图的实例
2016/12/08 Javascript
angularjs实现多张图片上传并预览功能
2017/02/24 Javascript
JS中getElementsByClassName与classList兼容性问题解决方案分析
2019/08/07 Javascript
基于javascript的无缝滚动动画1
2020/08/07 Javascript
[43:58]DOTA2上海特级锦标赛C组败者赛 Newbee VS Archon第二局
2016/02/27 DOTA
python3.7 sys模块的具体使用
2019/07/22 Python
pytorch中的自定义数据处理详解
2020/01/06 Python
keras在构建LSTM模型时对变长序列的处理操作
2020/06/29 Python
HTML5中的postMessage API基本使用教程
2016/05/20 HTML / CSS
html5 的a标签 Href 拨电话的写法
2013/11/04 HTML / CSS
可能这些是你想要的H5软键盘兼容方案(小结)
2019/04/23 HTML / CSS
联想美国官方商城:Lenovo美国
2017/06/19 全球购物
Farfetch香港官网:汇集全球时尚奢侈品购物平台
2017/11/26 全球购物
美国体育用品在线:Modell’s Sporting Goods
2018/06/07 全球购物
澳大利亚一站式数码相机商店:CameraPro
2020/03/09 全球购物
地理科学专业毕业生求职信
2013/10/15 职场文书
大学毕业生简单自荐信
2013/11/05 职场文书
大学生毕业自我鉴定
2013/11/06 职场文书
教育专业个人求职信
2013/12/02 职场文书
建筑班组长岗位职责
2014/01/02 职场文书
三严三实对照检查材料范文
2014/09/23 职场文书
党员转正大会主持词
2015/07/02 职场文书
python中Tkinter 窗口之输入框和文本框的实现
2021/04/12 Python
给numpy.array增加维度的超简单方法
2021/06/02 Python
R9700摩机记
2022/04/05 无线电