原生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 冒号 使用说明
Jun 06 Javascript
JS读取cookies信息(记录用户名)
Jan 10 Javascript
jquery获取子节点和父节点的示例代码
Sep 10 Javascript
jQuery插件扩展测试实例
Jun 21 Javascript
JavaScript的==运算详解
Jul 20 Javascript
javascript实现简单的on事件绑定
Aug 23 Javascript
在线引用最新jquery文件的实现方法
Aug 26 Javascript
微信小程序 wxapp导航 navigator详解
Oct 31 Javascript
websocket+node.js实现实时聊天系统问题咨询
May 17 Javascript
深入理解Angular4订阅(Subscribe)与取消
Nov 22 Javascript
vue-cli实现多页面多路由的示例代码
Jan 30 Javascript
vue.js 使用原生js实现轮播图
Apr 26 Vue.js
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
乱谈我对耳机、音箱的感受
2021/03/02 无线电
php中文字母数字验证码实现代码
2008/04/25 PHP
利用Memcached在php下实现session机制 替换PHP的原生session支持
2010/08/21 PHP
浅析PHP substr,mb_substr以及mb_strcut的区别和用法
2013/06/21 PHP
PHP内存缓存功能memcached示例
2016/10/19 PHP
多种方法实现360浏览器下禁止自动填写用户名密码
2014/06/16 Javascript
js实现禁止中文输入的方法
2015/01/14 Javascript
bootstrap css样式之表单
2017/01/19 Javascript
Nodejs+Socket.io实现通讯实例代码
2017/02/13 NodeJs
基于jQuery封装的分页组件
2017/06/26 jQuery
使用Vue.js开发微信小程序开源框架mpvue解析
2018/03/20 Javascript
微信小程序常用的3种提示弹窗实现详解
2019/09/19 Javascript
vue实现导航标题栏随页面滚动渐隐渐显效果
2020/03/12 Javascript
[02:06]2018完美世界全国高校联赛秋季赛开始报名(附彩蛋)
2018/09/03 DOTA
python实现多线程抓取知乎用户
2016/12/12 Python
Django中使用session保持用户登陆连接的例子
2019/08/06 Python
关于pycharm中pip版本10.0无法使用的解决办法
2019/10/10 Python
Tensorflow累加的实现案例
2020/02/05 Python
Django-rest-framework中过滤器的定制实例
2020/04/01 Python
Python基于pip实现离线打包过程详解
2020/05/15 Python
解决tensorflow读取本地MNITS_data失败的原因
2020/06/22 Python
python openssl模块安装及用法
2020/12/06 Python
HTML5新控件之日期和时间选择输入的实现代码
2018/09/13 HTML / CSS
HTML5 canvas基本绘图之文字渲染
2016/06/27 HTML / CSS
林清轩官方网站:山茶花润肤油开创者
2016/10/26 全球购物
Agoda台湾官网:国内外订房2折起
2018/03/20 全球购物
大学生应聘自荐信
2013/10/11 职场文书
金属材料工程个人求职的自我评价
2013/12/04 职场文书
挖掘机司机岗位职责
2014/02/12 职场文书
财务部副经理岗位职责
2014/03/14 职场文书
优秀广告词大全
2014/03/19 职场文书
担保书格式
2015/01/20 职场文书
2015年质检工作总结
2015/05/04 职场文书
校运会班级霸气口号
2015/12/24 职场文书
JAVA 线程池(池化技术)的实现原理
2022/04/28 Java/Android
关于mysql中string和number的转换问题
2022/06/14 MySQL