原生js页面滚动延迟加载图片


Posted in Javascript onDecember 20, 2015

本文实例为大家讲解了javascript瀑布流代码,即js页面滚动延迟加载图片,分享给大家供大家参考,具体代码如下

<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>原生Js页面滚动延迟加载图片</title>
<style type="text/css">
* 
{
 margin:0;
 padding:0
}
img.scrollLoading 
{
 border:1px solid #ccc;
 display:block;
 margin-top:10px;
}
</style>
</head>
<body>
<div id="content"></div>
</body>
</html>
<script type="text/javascript"> 
var _CalF = { 
 $:function(object){//选择器 
 if(object === undefined ) return; 
 var getArr = function(name,tagName,attr){ 
 var tagName = tagName || '*', 
 eles = document.getElementsByTagName(tagName), 
 clas = (typeof document.body.style.maxHeight === "undefined") ? "className" : "class";//ie6 
 attr = attr || clas, 
 Arr = []; 
 for(var i=0;i<eles.length;i++){ 
 if(eles[i].getAttribute(attr)==name){ 
 Arr.push(eles[i]); 
 } 
 } 
 return Arr; 
 }; 
 if(object.indexOf('#') === 0){ //#id 
 return document.getElementById(object.substring(1)); 
 }
 else if(object.indexOf('.') === 0){ //.class 
 return getArr(object.substring(1)); 
 }
 else if(object.match(/=/g)){ //attr=name
 return getArr(object.substring(object.search(/=/g)+1),null,object.substring(0,object.search(/=/g))); 
 }
 else if(object.match(/./g)){ //tagName.className 
 return getArr(object.split('.')[1],object.split('.')[0]); 
 } 
 }, 
 getPosition : function(obj) { //获取元素在页面里的位置和宽高 
 var top = 0, 
 left = 0, 
 width = obj.offsetWidth, 
 height = obj.offsetHeight; 
 while(obj.offsetParent){ 
 top += obj.offsetTop; 
 left += obj.offsetLeft; 
 obj = obj.offsetParent; 
 } 
 return {"top":top,"left":left,"width":width,"height":height}; 
 } 
}; 
 
//添加图片list 
var _temp = []; 
for (var i = 1; i < 21; i ++) { 
 _temp.push('<img class="scrollLoading" data-src="http://images.cnblogs.com/cnblogs_com/Darren_code/311197/o_' + i + '.jpg" src="http://images.cnitblog.com/blog/150659/201306/23160223-c81dd9aa9a2a4071a47b0ced2c9118bc.gif" /><br />图片' + i); 
} 
_CalF.$("#content").innerHTML = _temp.join(""); 
 
function scrollLoad(){ 
 this.init.apply(this, arguments); 
} 
scrollLoad.prototype ={ 
 init : function(className){ 
 var className = "img."+className, 
 imgs = _CalF.$(className), 
 that = this; 
 this.imgs = imgs; 
 that.loadImg(); 
 window.onscroll = function(){ 
 that.time = setTimeout(function(){ 
 that.loadImg(); 
 },400); 
 } 
}, 
loadImg : function(){ 
var imgs = this.imgs.reverse(), //获取数组翻转 
len = imgs.length; 
if(imgs.length===0){ 
 clearTimeout(this.time); 
 return; 
} 
for(var j=len-1;j>=0;j--){ //递减 
 var img = imgs[j], 
 imgTop = _CalF.getPosition(img).top, 
 imgSrc = img.getAttribute("data-src"), 
 offsetPage = window.pageYOffset ? window.pageYOffset : window.document.documentElement.scrollTop,//滚动条的top值 
 bodyHeight = document.documentElement.clientHeight; //body的高度 
 if((offsetPage+bodyHeight/2) > (imgTop-bodyHeight/2)){ 
 img.src = imgSrc; 
 this.imgs.splice(j,1); 
 } 
 } 
 } 
} 
 
var img1 = new scrollLoad("scrollLoading"); 
</script>

希望本文所述对大家学习javascript程序设计有所帮助。

Javascript 相关文章推荐
javascript中的对象创建 实例附注释
Feb 08 Javascript
jQuery实现的调整表格行tr上下顺序
Jan 10 Javascript
详解ECharts使用心得总结
Dec 06 Javascript
jQuey将序列化对象在前台显示地实现代码(方法总结)
Dec 13 Javascript
基于JS实现翻书效果的页面切换样式
Feb 16 Javascript
canvas绘图不清晰的解决方案
Feb 28 Javascript
js获取浏览器的各种属性
Apr 27 Javascript
Vue.js鼠标悬浮更换图片功能
May 17 Javascript
ES6中javascript实现函数绑定及类的事件绑定功能详解
Nov 08 Javascript
Vue实现调节窗口大小时触发事件动态调节更新组件尺寸的方法
Sep 15 Javascript
推荐一个基于Node.js的表单验证库
Feb 15 Javascript
jQuery列表动态增加和删除的实现方法
Nov 05 jQuery
javascript实现的网站访问量统计代码
Dec 20 #Javascript
js实现n秒倒计时后才可以点击的效果
Dec 20 #Javascript
图解js图片轮播效果
Dec 20 #Javascript
谈谈我对JavaScript原型和闭包系列理解(随手笔记6)
Dec 20 #Javascript
基于jquery实现页面滚动到底自动加载数据的功能
Dec 19 #Javascript
js点击按钮实现带遮罩层的弹出视频效果
Dec 19 #Javascript
js获取本机操作系统类型的两种方法
Dec 19 #Javascript
You might like
PHP源码之 ext/mysql扩展部分
2009/07/17 PHP
php绘图之加载外部图片的方法
2015/01/24 PHP
Yii使用migrate命令执行sql语句的方法
2016/03/15 PHP
PHP简单实现DES加密解密的方法
2016/07/12 PHP
Yii使用smsto短信接口的函数demo示例
2016/07/13 PHP
PHP实现的数据对象映射模式详解
2019/03/20 PHP
Yii2处理密码加密及验证的方法
2019/05/12 PHP
PHP 观察者模式深入理解与应用分析
2019/09/25 PHP
PhpSpreadsheet设置单元格常用操作汇总
2020/11/13 PHP
Gambit vs ForZe BO3 第三场 2.13
2021/03/10 DOTA
javascript中数组的冒泡排序使用示例
2013/12/18 Javascript
排序算法的javascript实现与讲解(99js手记)
2014/09/28 Javascript
js数组的操作指南
2014/12/28 Javascript
Jquery技巧(必须掌握)
2016/03/16 Javascript
Javascript之Number对象介绍
2016/06/07 Javascript
前端 Vue.js 和 MVVM 详细介绍
2016/12/29 Javascript
JQuery 又谈ajax局部刷新
2017/11/27 jQuery
深入了解JavaScript 防抖和节流
2019/09/12 Javascript
Vue打包后访问静态资源路径问题
2019/11/08 Javascript
[10:04]国际邀请赛采访专栏:DK.Farseer,mouz.Black^,采访员Josh专访
2013/08/05 DOTA
[02:48]DOTA2英雄基础教程 拉席克
2013/12/12 DOTA
[09:59]DOTA2-DPC中国联赛2月7日Recap集锦
2021/03/11 DOTA
Python中的localtime()方法使用详解
2015/05/22 Python
Python 两个列表的差集、并集和交集实现代码
2016/09/21 Python
python实现逻辑回归的方法示例
2017/05/02 Python
Python简单删除列表中相同元素的方法示例
2017/06/12 Python
python语言中with as的用法使用详解
2018/02/23 Python
python 按不同维度求和,最值,均值的实例
2018/06/28 Python
Django框架中序列化和反序列化的例子
2019/08/06 Python
Python机器学习工具scikit-learn的使用笔记
2021/01/28 Python
澳大利亚家具和家居用品在线:BROSA
2017/11/02 全球购物
Theo + George官方网站:都柏林时尚品牌
2019/04/08 全球购物
美国狗旅行和户外用品领先供应商:kurgo
2020/08/18 全球购物
String是最基本的数据类型吗?
2013/06/13 面试题
杭州西湖英语导游词
2015/02/03 职场文书
OpenCV-Python实现图像平滑处理操作
2021/06/08 Python