原生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 相关文章推荐
innerText和innerHTML 一些问题分析
May 18 Javascript
jquery.validate使用攻略 第一部
Jul 01 Javascript
关于firefox的ElementTraversal 接口 使用说明
Nov 11 Javascript
node.js中的fs.fsyncSync方法使用说明
Dec 15 Javascript
javascript中的遍历for in 以及with的用法
Dec 22 Javascript
jQuery判断是否存在滚动条的简单方法
Sep 17 Javascript
微信小程序中hidden不生效原因的解决办法
Apr 26 Javascript
微信小程序实现图片上传放大预览删除代码
Jun 28 Javascript
详解vantUI框架在vue项目中的应用踩坑
Dec 06 Javascript
监听element-ui table滚动事件的方法
Mar 26 Javascript
vue 集成jTopo 处理方法
Aug 07 Javascript
解决vue做详情页跳转的时候使用created方法 数据不会更新问题
Jul 24 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基础学习小结
2011/04/17 PHP
基于PHPExcel的常用方法总结
2013/06/13 PHP
php实现多维数组中每个单元值(数字)翻倍的方法
2015/02/16 PHP
Windows下编译PHP5.4和xdebug全记录
2015/04/03 PHP
smarty学习笔记之常见代码段用法总结
2016/03/19 PHP
php实现的证件照换底色功能示例【人像抠图/换背景图】
2020/05/29 PHP
Js callBack 返回前一页的js方法
2008/11/30 Javascript
JavaScript小技巧 2.5 则
2010/09/12 Javascript
一款Jquery 分页插件的改造方法(服务器端分页)
2011/07/11 Javascript
使用javascript实现ListBox左右全选,单选,多选,全请
2013/11/07 Javascript
jQuery插件Skippr实现焦点图幻灯片特效
2015/04/12 Javascript
浅谈JavaScript中setInterval和setTimeout的使用问题
2015/08/01 Javascript
JavaScript sort数组排序方法和自我实现排序方法小结
2016/06/06 Javascript
JavaScript中的Reflect对象详解(ES6新特性)
2016/07/22 Javascript
JS字符串去除连续或全部重复字符的实例
2018/03/08 Javascript
webpack4 + react 搭建多页面应用示例
2018/08/03 Javascript
layDate日期控件使用方法详解
2018/11/15 Javascript
node.js中path路径模块的使用方法实例分析
2020/02/13 Javascript
[48:46]完美世界DOTA2联赛PWL S2 SZ vs FTD.C 第二场 11.19
2020/11/19 DOTA
python 布尔操作实现代码
2013/03/23 Python
Python实现屏幕截图的代码及函数详解
2016/10/01 Python
python爬虫入门教程--正则表达式完全指南(五)
2017/05/25 Python
python爬虫中get和post方法介绍以及cookie作用
2018/02/08 Python
使用python爬取抖音视频列表信息
2019/07/15 Python
解决pytorch报错:AssertionError: Invalid device id的问题
2020/01/10 Python
Python hashlib常见摘要算法详解
2020/01/13 Python
尼克松手表官网:Nixon手表
2019/03/17 全球购物
Pretty You London官网:英国拖鞋和睡衣品牌
2019/05/08 全球购物
SK-II神仙水美国官网:SK-II美国
2020/02/25 全球购物
初婚未育证明
2014/01/15 职场文书
精彩自我鉴定
2014/01/16 职场文书
常务副总经理任命书
2014/06/05 职场文书
安全例会汇报材料
2014/08/23 职场文书
党员干部四风问题整改措施思想汇报
2014/10/12 职场文书
党员证明信
2015/06/19 职场文书
团支部书记竞选稿
2015/11/21 职场文书