纯JS实现的批量图片预览加载功能


Posted in Javascript onAugust 14, 2011

1.实现原理直接见代码,需要一张转圈的小图片,需要预览的所有图片默认的位置全是这张小图片,滚轮滚到原图需要出现的位置时候,预览加载替换小图片.实现效果

<div style="height: 2500px;" id="txtScrollTop"> 
</div> 
<div id="galleryList"> 
</div>

var util = { 
$: function (id) { 
return document.getElementById(id); 
}, 
getElementsByClassName: function (oElm, strTagName, strClassName) { 
var arrElements = oElm.getElementsByTagName(strTagName); 
var arrReturnElements = new Array(); 
strClassName = strClassName.replace(/-/g, "\-"); 
var oRegExp = new RegExp("(^|\\s)" + strClassName + "(\\s|$)"); 
var oElement; 
for (var i = 0; i < arrElements.length; i++) { 
oElement = arrElements[i]; 
if (oRegExp.test(oElement.className)) { 
arrReturnElements.push(oElement); 
} 
} 
return arrReturnElements; 
}, 
getXY: function (obj) { 
var sumTop = 0, sumLeft = 0; 
while (obj != document.body) { 
sumLeft += obj.offsetLeft; 
sumTop += obj.offsetTop; 
obj = obj.offsetParent; 
} 
return { x: sumLeft, y: sumTop } 
} 
}; var GalleryViewer = { 
GalleryContainer: {}, 
smallImgs: [], //小图片数组 
orginalImgs: [], //原始图片数组 
init: function (id, imgs, classname, smallImgSrc) { 
this.GalleryContainer = util.$(id); 
this.orginalImgs = imgs; 
for (var i = 0; i < imgs.length; i++) { //追加所有预览小图片 
var img = document.createElement("img"); 
img.src = smallImgSrc; 
img.className = classname; 
this.GalleryContainer.appendChild(img); 
} 
this.smallImgs = util.getElementsByClassName(util.$(id), "img", classname); 
if (util.getXY(GalleryViewer.GalleryContainer).y < window.screen.height) {//如果初始在页面开始部位直接预览加载 
this.preloadImages(); 
} 
var mousewheelevt = (/Firefox/i.test(navigator.userAgent)) ? "DOMMouseScroll" : "mousewheel" //FF doesn't recognize mousewheel as of FF3.x 
if (document.attachEvent) //if IE (and Opera depending on user setting) 
document.attachEvent("on" + mousewheelevt, GalleryViewer.orginalImgsAppear); 
else if (document.addEventListener) //WC3 browsers 
document.addEventListener(mousewheelevt, GalleryViewer.orginalImgsAppear, false); 
}, 
preloadImages: function () { 
for (var i = 0; i < GalleryViewer.orginalImgs.length; i++) { 
(function (i) { 
var imagePreload = new Image(); 
imagePreload.src = GalleryViewer.orginalImgs[i]; //预加载大图片 
if (imagePreload.complete) { // 如果图片已经存在于浏览器缓存,直接调用回调函数 
GalleryViewer.ImgsChange(i, imagePreload); 
return; // 直接返回,不用再处理onload事件 
} 
imagePreload.onload = GalleryViewer.ImgsChange(i, imagePreload); //加载完成替换 
})(i); 
} 
}, 
ImgsChange: function (i, obj) { 
this.smallImgs[i].src = obj.src; 
}, 
orginalImgsAppear: function () { 
//alert(getXY(this.GalleryContainer).y - window.screen.height); 
if (document.documentElement.scrollTop > util.getXY(GalleryViewer.GalleryContainer).y - window.screen.height) { 
GalleryViewer.preloadImages(); 
} 
} 
}; 
(function () { 
var imgs1 = ['../Content/images/gb_tip_layer.png', '../Content/images/gb_tip_layer.png', '../Content/images/gb_tip_layer.png']; 
GalleryViewer.init("Div1", imgs1, "smallImgs1", "../Content/images/preload.gif"); 
//参数函数分别为div.id容器,原图地址数组,小图的类名,小图地址,具体图片地址请参照自己的项目 
})();
Javascript 相关文章推荐
jquery 事件冒泡的介绍以及如何阻止事件冒泡
Dec 25 Javascript
点击弹出层外区域关闭弹出层jquery特效示例
Aug 25 Javascript
JS替换字符串中字符即替换全部而不是第一个
Jun 04 Javascript
coffeescript使用的方式汇总
Aug 05 Javascript
Js的Array数组对象详解
Feb 22 Javascript
JS动态的把左边列表添加到右边的实现代码(可上下移动)
Nov 17 Javascript
谈谈JS中的!!
Dec 07 Javascript
AngularJS select加载数据选中默认值的方法
Feb 28 Javascript
微信小程序实现tab页面切换功能
Jul 13 Javascript
vue 实现小程序或商品秒杀倒计时
Apr 14 Javascript
在vue中动态添加class类进行显示隐藏实例
Nov 09 Javascript
vue组件冲突之引用另一个组件出现组件不显示的问题
Apr 13 Vue.js
javascript中关于执行环境的杂谈
Aug 14 #Javascript
js中字符替换函数String.replace()使用技巧
Aug 14 #Javascript
js 通用javascript函数库整理
Aug 14 #Javascript
javascript中的数字与字符串相加实例分析
Aug 14 #Javascript
SyntaxHighlighter语法高亮插件使用说明
Aug 14 #Javascript
javascript高级学习笔记整理
Aug 14 #Javascript
jquery获得下拉框值的代码
Aug 13 #Javascript
You might like
php 无极分类(递归)实现代码
2010/01/05 PHP
PHP迅雷、快车、旋风下载专用链转换代码
2010/06/15 PHP
PHP压缩html网页代码(清除空格,换行符,制表符,注释标记)
2012/04/02 PHP
php实现的一个很好用HTML解析器类可用于采集数据
2013/09/23 PHP
浅谈php的优缺点
2015/07/14 PHP
ThinkPHP实现登录退出功能
2017/06/29 PHP
用ADODB.Stream转换
2007/01/22 Javascript
createElement与createDocumentFragment的点点区别小结
2011/12/19 Javascript
formStorage 基于jquery的一个插件(存储表单中元素的状态到本地)
2012/01/20 Javascript
js去空格技巧分别去字符串前后、左右空格
2013/10/21 Javascript
JQuery中阻止事件冒泡几种方式及其区别介绍
2014/01/15 Javascript
动态创建Angular组件实现popup弹窗功能
2017/09/15 Javascript
详解基于vue-cli配置移动端自适应
2018/01/13 Javascript
vue toggle做一个点击切换class(实例讲解)
2018/03/13 Javascript
JS实现统计字符串中字符出现个数及最大个数功能示例
2018/06/04 Javascript
基于nodejs的雪碧图制作工具的示例代码
2018/11/05 NodeJs
微信小程序云开发(数据库)详解
2019/05/17 Javascript
layui 表格操作列按钮动态显示的实现方法
2019/09/06 Javascript
[45:56]Ti4正赛第一天 VG vs NEWBEE 3
2014/07/19 DOTA
python 字符串转列表 list 出现\ufeff的解决方法
2017/06/22 Python
Python使用修饰器执行函数的参数检查功能示例
2017/09/26 Python
python实现对输入的密文加密
2019/03/20 Python
python pptx复制指定页的ppt教程
2020/02/14 Python
Python Scrapy框架:通用爬虫之CrawlSpider用法简单示例
2020/04/11 Python
Python openpyxl 插入折线图实例
2020/04/17 Python
Pytorch转keras的有效方法,以FlowNet为例讲解
2020/05/26 Python
keras实现theano和tensorflow训练的模型相互转换
2020/06/19 Python
python 模块导入问题汇总
2021/02/01 Python
css3 盒模型以及box-sizing属性全面了解
2016/09/20 HTML / CSS
函授本科个人自我鉴定
2014/03/25 职场文书
公司节能减排倡议书
2014/05/14 职场文书
乡镇干部个人整改措施思想汇报
2014/10/10 职场文书
劳动纠纷调解协议书格式
2014/11/30 职场文书
事业单位考察材料范文
2014/12/25 职场文书
2015年大学社团工作总结
2015/04/09 职场文书
Python离线安装openpyxl模块的步骤
2021/03/30 Python