原生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 相关文章推荐
picChange 图片切换特效的函数代码
May 06 Javascript
jquery动画4.升级版遮罩效果的图片走廊--带自动运行效果
Aug 24 Javascript
Javascript计算两个marker之间的距离(Google Map V3)
Apr 26 Javascript
Javascript中的作用域和上下文深入理解
Jul 03 Javascript
jQuery左右滚动支持图片放大缩略图图片轮播代码分享
Aug 26 Javascript
JavaScript中省略元素对数组长度的影响
Oct 26 Javascript
Bootstrap3 图片(响应式图片&amp;图片形状)
Jan 04 Javascript
JavaScript的for循环中嵌套一个点击事件的问题解决
Mar 03 Javascript
AngularJS之页面跳转Route实例代码
Mar 10 Javascript
详解EasyUi控件中的Datagrid
Aug 23 Javascript
vue实现路由懒加载及组件懒加载的方式
Jun 11 Javascript
js实现左右轮播图
Jan 09 Javascript
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逐行输出(ob_flush与flush的组合)
2012/02/04 PHP
php多维数组去掉重复值示例分享
2014/03/02 PHP
PHP图片自动裁切应付不同尺寸的显示
2014/10/16 PHP
php实现的SSO单点登录系统接入功能示例分析
2016/10/12 PHP
Yii2框架制作RESTful风格的API快速入门教程
2016/11/08 PHP
PHP编程获取音频文件时长的方法【基于getid3类】
2017/04/20 PHP
YII分模块加载路由的实现方法
2018/10/01 PHP
深入理解JavaScript作用域和作用域链
2011/10/21 Javascript
jquery 获取标签名(tagName)示例代码
2013/07/11 Javascript
JQuery文字列表向上滚动的代码
2013/11/13 Javascript
Javascript仿PHP $_GET获取URL中的参数
2014/05/12 Javascript
node.js 用socket实现聊天的示例代码
2017/10/17 Javascript
JS Object.preventExtensions(),Object.seal()与Object.freeze()用法实例分析
2018/08/25 Javascript
JQuery中queue方法用法示例
2019/01/31 jQuery
Vue中的nextTick作用和几个简单的使用场景
2021/01/25 Vue.js
Python中操作MySQL入门实例
2015/02/08 Python
用C++封装MySQL的API的教程
2015/05/06 Python
举例区分Python中的浅复制与深复制
2015/07/02 Python
NetworkX之Prim算法(实例讲解)
2017/12/22 Python
浅谈Django的缓存机制
2018/08/23 Python
Numpy之将矩阵拉成向量的实例
2019/11/30 Python
Python定义函数时参数有默认值问题解决
2019/12/19 Python
Python API 操作Hadoop hdfs详解
2020/06/06 Python
python3.5的包存放的具体路径
2020/08/16 Python
python时间time模块处理大全
2020/10/25 Python
Python实现图片指定位置加图片水印(附Pyinstaller打包exe)
2021/03/04 Python
css3实现信纸/同学录效果的示例代码
2018/12/11 HTML / CSS
html5+css3之动画在webapp中的应用
2014/11/21 HTML / CSS
h5页面背景图很长要有滚动条滑动效果的实现
2021/01/27 HTML / CSS
行政文员岗位职责
2013/11/08 职场文书
买卖车协议书
2014/04/21 职场文书
营销总监岗位职责
2014/09/16 职场文书
会计实训报告范文
2014/11/04 职场文书
JVM入门之类加载与字节码技术(类加载与类的加载器)
2021/06/15 Java/Android
关于python中模块和重载的问题
2021/11/02 Python
Python语言中的数据类型-序列
2022/02/24 Python