纯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 相关文章推荐
event.currentTarget与event.target的区别介绍
Dec 31 Javascript
ActiveX控件与Javascript之间的交互示例
Jun 04 Javascript
jquery实现在页面加载的时自动为日期插件添加当前日期
Aug 20 Javascript
javascript与css3动画结合使用小结
Mar 11 Javascript
JavaScript获取网页表单action属性的方法
Apr 02 Javascript
基于JavaScript实现TAB标签效果
Jan 12 Javascript
创建基于Bootstrap的下拉菜单的DropDownList的JQuery插件
Jun 02 Javascript
javascript删除html标签函数cIsHTML
Jan 09 Javascript
vue实现在一个方法执行完后执行另一个方法的示例
Aug 25 Javascript
Vue2.0学习系列之项目上线的方法步骤(图文)
Sep 25 Javascript
Vue注册组件命名时不能用大写的原因浅析
Apr 25 Javascript
vue从一个页面跳转到另一个页面并携带参数的解决方法
Aug 12 Javascript
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
第二节--PHP5 的对象模型
2006/11/16 PHP
ThinkPHP自动完成中使用函数与回调方法实例
2014/11/29 PHP
PHP中的socket_read和socket_recv区别详解
2015/02/09 PHP
PHP使用星号替代用户名手机和邮箱的实现代码
2018/02/07 PHP
PHP自定义错误处理的方法分析
2018/12/19 PHP
浅析PHP中json_encode与json_decode的区别
2020/07/15 PHP
Node.js中调用mysql存储过程示例
2014/12/20 Javascript
BOM系列第二篇之定时器requestAnimationFrame
2016/08/17 Javascript
js HTML5手机刮刮乐代码
2020/09/29 Javascript
浅谈EasyUI常用控件的禁用方法
2016/11/09 Javascript
jQuery模拟淘宝购物车功能
2017/02/27 Javascript
js仿淘宝评价评分功能
2017/02/28 Javascript
JavaScrpt判断一个数是否是质数的实例代码
2017/06/11 Javascript
JavaScript数据结构之双向链表定义与使用方法示例
2017/10/27 Javascript
vue-router 源码之实现一个简单的 vue-router
2018/07/02 Javascript
bootstrap table实现合并单元格效果
2018/12/24 Javascript
javascript实现蒙版与禁止页面滚动
2020/01/11 Javascript
JS实现简易贪吃蛇游戏
2020/08/24 Javascript
vue 实现一个简单的全局调用弹窗案例
2020/09/10 Javascript
Python写的Tkinter程序屏幕居中方法
2015/03/10 Python
简单理解Python中的装饰器
2015/07/31 Python
Pycharm编辑器技巧之自动导入模块详解
2017/07/18 Python
查看TensorFlow checkpoint文件中的变量名和对应值方法
2018/06/14 Python
基于数据归一化以及Python实现方式
2018/07/11 Python
python opencv读mp4视频的实例
2018/12/07 Python
python数据类型之间怎么转换技巧分享
2019/08/20 Python
基于python连接oracle导并出数据文件
2020/04/28 Python
室内设计实习自我鉴定
2013/09/25 职场文书
九月份红领巾广播稿
2014/01/22 职场文书
《两个铁球同时着地》教学反思
2014/02/13 职场文书
毕业生找工作自荐书
2014/06/30 职场文书
个人四风对照检查材料
2014/09/26 职场文书
2016大学生社会实践心得体会范文
2016/01/14 职场文书
2016教师六五普法学习心得体会
2016/01/21 职场文书
公文写作指导之倡议书!
2019/07/03 职场文书
详解Vue中$props、$attrs和$listeners的使用方法
2022/02/18 Vue.js