原生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 相关文章推荐
JScript 脚本实现文件下载 一般用于下载木马
Oct 29 Javascript
THREE.JS入门教程(6)创建自己的全景图实现步骤
Jan 25 Javascript
jquery设置表单元素为不可用的简单代码
Jul 04 Javascript
详解vue之页面缓存问题(基于2.0)
Jan 10 Javascript
javascript实现秒表计时器的制作方法
Feb 16 Javascript
微信小程序日历组件calendar详解及实例
Jun 08 Javascript
基于vue 实现token验证的实例代码
Dec 14 Javascript
利用vscode调试编译后的js代码详解
May 14 Javascript
详解如何用typescript开发koa2的二三事
Nov 13 Javascript
微信小程序实现图片压缩
Dec 03 Javascript
详解Vue的sync修饰符
May 15 Vue.js
vue elementUI批量上传文件
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
Session保存到数据库的php类分享
2011/10/24 PHP
在PHP中使用redis
2013/11/04 PHP
PHP PDOStatement对象bindpram()、bindvalue()和bindcolumn之间的区别
2014/11/20 PHP
Laravel5框架添加自定义辅助函数的方法
2018/08/01 PHP
解决laravel上传图片之后,目录有图片,但是访问不到(404)的问题
2019/10/14 PHP
取得窗口大小 兼容所有浏览器的js代码
2011/08/09 Javascript
jQuery EasyUI API 中文文档 DateTimeBox日期时间框
2011/10/16 Javascript
深入理解JavaScript系列(13) This? Yes,this!
2012/01/18 Javascript
轻松学习jQuery插件EasyUI EasyUI实现树形网络基本操作(2)
2015/11/30 Javascript
详解Vue中状态管理Vuex
2017/05/11 Javascript
vue.js与element-ui实现菜单树形结构的解决方法
2018/04/21 Javascript
NodeJs搭建本地服务器之使用手机访问的实例讲解
2018/05/12 NodeJs
JavaScript实现的开关灯泡点击切换特效示例
2019/07/08 Javascript
layui--js控制switch的切换方法
2019/09/03 Javascript
layui 解决form表单点击无反应的问题
2019/10/25 Javascript
Vue实现点击按钮复制文本内容的例子
2019/11/09 Javascript
vue 使用vant插件做tabs切换和无限加载功能的实现
2020/11/04 Javascript
[02:43]中国五虎出征TI3视频
2013/08/02 DOTA
Python实现基于HTTP文件传输实例
2014/11/08 Python
python魔法方法-自定义序列详解
2016/07/21 Python
Django如何实现内容缓存示例详解
2017/09/24 Python
Python函数装饰器实现方法详解
2018/12/22 Python
python实现宿舍管理系统
2019/11/22 Python
Python中filter与lambda的结合使用详解
2019/12/24 Python
python tqdm库的使用
2020/11/30 Python
CSS3对背景图片的裁剪及尺寸和位置的设定方法
2016/03/07 HTML / CSS
英国最大的手表网站:The Watch Hut
2017/03/31 全球购物
乌克兰香水和化妆品网站:Notino.ua
2018/03/26 全球购物
澳大利亚优惠网站:Deals.com.au
2019/07/02 全球购物
俄罗斯在线水暖商店:Perfecto.ru
2019/10/25 全球购物
LUISAVIAROMA德国官网:时尚奢侈品牌购物网站
2020/11/12 全球购物
大学生职业生涯规划范文
2013/12/31 职场文书
大众服装店创业计划书范文
2014/01/01 职场文书
小班上学期幼儿评语
2014/12/30 职场文书
一百条裙子读书笔记
2015/07/01 职场文书
在redisCluster中模糊获取key方式
2021/07/09 Redis