纯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 相关文章推荐
Javascript 函数对象的多重身份
Jun 28 Javascript
autoIMG 基于jquery的图片自适应插件代码
Mar 12 Javascript
ExtJS的拖拽效果示例
Dec 09 Javascript
调用innerHTML之后onclick失效问题的解决方法
Jan 28 Javascript
jQuery实现弹出窗口中切换登录与注册表单
Jun 05 Javascript
提升jQuery的性能需要做好七件事
Jan 11 Javascript
BootStrap 附加导航组件
Jul 22 Javascript
学习Javascript闭包(Closure)知识
Aug 07 Javascript
Js自定义多选框效果的实例代码
Jul 05 Javascript
详解在WebStorm中添加Vue.js单文件组件的高亮及语法支持
Oct 21 Javascript
基于jQuery ztree实现表格风格的树状结构
Aug 31 jQuery
小程序如何自主实现拦截器的示例代码
Nov 04 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
PHP 和 MySQL 基础教程(一)
2006/10/09 PHP
注册页面之前先验证用户名是否存在的php代码
2012/07/14 PHP
PHP中的output_buffering详细介绍
2014/09/27 PHP
PHP按一定比例压缩图片的方法
2018/10/12 PHP
php fread函数使用方法总结
2019/05/28 PHP
PHP从零开始打造自己的MVC框架之类的自动加载实现方法详解
2019/06/03 PHP
Mootools 1.2教程 同时进行多个形变动画
2009/09/15 Javascript
js实现单一html页面两套css切换代码
2013/04/11 Javascript
js string 转 int 注意的问题小结
2013/08/15 Javascript
js格式化金额可选是否带千分位以及保留精度
2014/01/28 Javascript
浅谈JavaScript Array对象
2014/12/29 Javascript
javascript中基本类型和引用类型的区别分析
2015/05/12 Javascript
简述Jquery与DOM对象
2015/07/10 Javascript
JavaScript程序设计之JS调试
2015/12/09 Javascript
Javascript实现鼠标框选操作  不是点击选取
2016/04/14 Javascript
yarn与npm的命令行小结
2016/10/20 Javascript
使用ionic在首页新闻中应用到的跑马灯效果的实现方法
2017/02/13 Javascript
浅析JS抽象工厂模式
2017/12/14 Javascript
小程序视频列表中视频的播放与停止的示例代码
2018/07/20 Javascript
100行代码实现一个vue分页组功能
2018/11/06 Javascript
[00:34]TI7不朽珍藏III——纯金地穴编织者饰品展示
2017/07/15 DOTA
Python实现建立SSH连接的方法
2015/06/03 Python
对python PLT中的image和skimage处理图片方法详解
2019/01/10 Python
Python 类,property属性(简化属性的操作),@property,property()用法示例
2019/10/12 Python
python json load json 数据后出现乱序的解决方案
2020/02/27 Python
python+OpenCV实现图像拼接
2020/03/05 Python
基于django micro搭建网站实现加水印功能
2020/05/22 Python
Tensorflow中k.gradients()和tf.stop_gradient()用法说明
2020/06/10 Python
澳大利亚波西米亚风连衣裙在线商店:Fortunate One
2019/04/01 全球购物
英国露营设备和户外服装购物网站:Simply Hike
2019/05/05 全球购物
社团活动策划书范文
2014/01/09 职场文书
初一科学教学反思
2014/01/27 职场文书
中国梦演讲稿开场白
2014/08/28 职场文书
德能勤绩廉个人总结
2015/02/14 职场文书
公司环境卫生管理制度
2015/08/05 职场文书
小学生安全教育主题班会
2015/08/12 职场文书