原生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 相关文章推荐
正则表达式语法
Oct 09 Javascript
url 特殊字符 传递参数解决方法
Jan 01 Javascript
jQuery实现360°全景拖动展示
Mar 18 Javascript
纯JavaScript实现的分页插件实例
Jul 14 Javascript
DOM事件阶段以及事件捕获与事件冒泡先后执行顺序(图文详解)
Aug 18 Javascript
jQuery Dialog 取消右上角删除按钮事件
Sep 07 Javascript
JS图片预加载插件详解
Jun 21 Javascript
BootStrap Fileinput上传插件使用实例代码
Jul 28 Javascript
深入浅出es6模板字符串
Aug 26 Javascript
其实你可以少写点if else与switch(推荐)
Jan 10 Javascript
JavaScript Reflect Metadata实现详解
Dec 12 Javascript
three.js中多线程的使用及性能测试详解
Jan 07 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
ajax实现无刷新分页(php)
2010/07/18 PHP
(PHP实现)只使用++运算实现加法,减法,乘法,除法
2013/06/27 PHP
ThinkPHP 模板substr的截取字符串函数详解
2017/01/09 PHP
基于 Swoole 的微信扫码登录功能实现代码
2018/01/15 PHP
文字不间断滚动(上下左右)实例代码
2013/04/21 Javascript
js中使用replace方法完成某个字符的转换
2014/08/20 Javascript
window.location的重写及判断location是否被重写
2014/09/04 Javascript
jquery ajax局部加载方法详解(实现代码)
2016/05/12 Javascript
js前端面试题及答案整理(一)
2016/08/26 Javascript
vue解决跨域路由冲突问题思路解析
2017/11/03 Javascript
nodejs实现超简单生成二维码的方法
2018/03/17 NodeJs
vue slots 组件的组合/分发实例
2018/09/06 Javascript
javascrpt密码强度校验函数详解
2020/03/18 Javascript
基于canvas实现手写签名(vue)
2020/05/21 Javascript
关于vue的列表图片选中打钩操作
2020/09/09 Javascript
[39:02]DOTA2亚洲邀请赛 3.31 小组赛 B组 Mineski vs VGJ.T
2018/04/01 DOTA
使用PyInstaller将python转成可执行文件exe笔记
2018/05/26 Python
Python动态参数/命名空间/函数嵌套/global和nonlocal
2019/05/29 Python
使用python将多个excel文件合并到同一个文件的方法
2019/07/09 Python
使用pip安装python库的多种方式
2019/07/31 Python
python3下pygame如何实现显示中文
2020/01/11 Python
sqlalchemy实现时间列自动更新教程
2020/09/02 Python
pytorch使用horovod多gpu训练的实现
2020/09/09 Python
Pycharm添加虚拟解释器报错问题解决方案
2020/10/13 Python
css3类选择器之结合元素选择器和多类选择器用法
2017/03/09 HTML / CSS
NUK奶瓶美国官网:NUK美国
2016/09/26 全球购物
法国一家多品牌成衣精品中/高档商店:Graduate Store
2019/08/28 全球购物
大学生应聘自荐信
2013/10/11 职场文书
个人简历自荐信
2013/12/05 职场文书
2014年租房协议书范本
2014/10/30 职场文书
2014年城市管理工作总结
2014/12/02 职场文书
2015年大学组织委员个人工作总结
2015/10/23 职场文书
创业计划书之暑假培训班
2019/11/09 职场文书
使用vue-element-admin框架从后端动态获取菜单功能的实现
2021/04/29 Vue.js
MYSQL主从数据库同步备份配置的方法
2021/05/26 MySQL
Windows11 Insider Preview Build 25206今日发布 更新内容汇总
2022/09/23 数码科技