纯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 相关文章推荐
拖动table标题实现改变td的大小(css+js代码)
Apr 16 Javascript
网页中可关闭的漂浮窗口实现可自行调节
Aug 20 Javascript
jquery ajax应用中iframe自适应高度问题解决方法
Apr 12 Javascript
浅谈JS闭包中的循环绑定处理程序
Nov 09 Javascript
JS实现跟随鼠标的链接文字提示框效果
Aug 06 Javascript
jquery判断复选框选中状态以及区分attr和prop
Dec 18 Javascript
jquery日历插件datepicker用法分析
Jan 22 Javascript
总结JavaScript的正则与其他语言的不同之处
Aug 25 Javascript
javascript 利用arguments实现可变长参数
Nov 21 Javascript
vue axios整合使用全攻略
May 24 Javascript
基于JavaScript获取base64图片大小
Oct 18 Javascript
JavaScript React如何修改默认端口号方法详解
Jul 28 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 $_SERVER当前完整url的写法
2009/11/12 PHP
PHP判断表单复选框选中状态完整例子
2014/06/24 PHP
PHP生成唯一订单号的方法汇总
2015/04/16 PHP
PHP用户验证和标签推荐的简单使用
2016/10/31 PHP
用JavaScript和注册表脚本实现右键收藏Web页选中文本
2007/01/28 Javascript
jQuery弹出层插件简化版代码下载
2008/10/16 Javascript
写入cookie的JavaScript代码库 cookieLibrary.js
2009/10/24 Javascript
简介JavaScript中getUTCMonth()方法的使用
2015/06/10 Javascript
yarn与npm的命令行小结
2016/10/20 Javascript
JavaScript组件开发之输入框加候选框
2017/03/10 Javascript
详解angularJs模块ui-router之状态嵌套和视图嵌套
2017/04/28 Javascript
canvas基础绘制-绚丽倒计时的实例
2017/09/17 Javascript
React教程之封装一个Portal可复用组件的方法
2018/01/02 Javascript
详解Node.js中的Async和Await函数
2018/02/22 Javascript
vue 中filter的多种用法
2018/04/26 Javascript
nodejs更新package.json中的dependencies依赖到最新版本的方法
2018/10/10 NodeJs
Vue自定义属性实例分析
2019/02/23 Javascript
解决小程序无法触发SESSION问题
2020/02/03 Javascript
[48:52]DOTA2上海特级锦标赛A组小组赛#2 Secret VS CDEC第一局
2016/02/25 DOTA
Python 列表排序方法reverse、sort、sorted详解
2016/01/22 Python
深入学习Python中的上下文管理器与else块
2017/08/27 Python
基于Python List的赋值方法
2018/06/23 Python
python 实现保存最新的三份文件,其余的都删掉
2019/12/22 Python
python json 递归打印所有json子节点信息的例子
2020/02/27 Python
python查看矩阵的行列号以及维数方式
2020/05/22 Python
Python如何使用ElementTree解析xml
2020/10/12 Python
matplotlib相关系统目录获取方式小结
2021/02/03 Python
Html5百叶窗效果的示例代码
2017/12/11 HTML / CSS
美国领先的家居装饰和礼品商店:Kirkland’s
2017/01/30 全球购物
英国乐购杂货:Tesco Groceries
2018/11/29 全球购物
英国儿童设计师服装和玩具购物网站:Zac & Lulu
2020/10/19 全球购物
现代化办公人员工作的自我评价
2013/10/16 职场文书
甜点店创业计划书
2014/01/27 职场文书
《小小竹排画中游》教学反思
2014/02/26 职场文书
2015年师德表现自我评价
2015/03/05 职场文书
煤矿安全学习心得体会
2016/01/18 职场文书