纯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技术实现Tab页界面之二
Sep 21 Javascript
Jquery插件 easyUI属性汇总
Jan 19 Javascript
js操作textarea方法集合封装(兼容IE,firefox)
Feb 22 Javascript
浅析JavaScript中的delete运算符
Nov 30 Javascript
JavaScript改变CSS样式的方法汇总
May 07 Javascript
Javascript实现的简单右键菜单类
Sep 23 Javascript
JavaScript导航脚本判断当前导航
Jul 12 Javascript
老生常谈JavaScript中的this关键字
Oct 01 Javascript
微信小程序实现图片自适应(支持多图)
Jan 25 Javascript
JS中Swiper的使用和轮播图效果
Aug 11 Javascript
js实现登录拖拽窗口
Feb 10 Javascript
JS禁用右键、禁用Ctrl+u、禁用Ctrl+s、禁用F12的实现代码
Dec 01 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下使用以下代码连接并测试
2008/04/09 PHP
php empty函数判断mysql表单是否为空
2010/04/12 PHP
PHP图片处理之图片背景、画布操作
2014/11/19 PHP
php中fsockopen用法实例
2015/01/05 PHP
PHP基于反射机制实现插件的可插拔设计详解
2016/11/10 PHP
php写app接口并返回json数据的实例(分享)
2017/05/20 PHP
PHP缓存工具XCache安装与使用方法详解
2018/04/09 PHP
JS重要知识点小结
2011/11/06 Javascript
JS的document.all函数使用示例
2013/12/30 Javascript
js实现网页倒计时、网站已运行时间功能的代码3例
2014/04/14 Javascript
js添加select下默认的option的value和text的方法
2014/10/19 Javascript
JS使用正则表达式除去字符串中重复字符的方法
2015/11/05 Javascript
JavaScript函数的一些注意要点小结及js匿名函数
2015/11/10 Javascript
原生JavaScript实现动态省市县三级联动下拉框菜单实例代码
2016/02/03 Javascript
JavaScript Math 对象常用方法总结
2016/04/28 Javascript
JS实现刷新父页面不弹出提示框的方法
2016/06/22 Javascript
JS 面向对象之继承---多种组合继承详解
2016/07/10 Javascript
JS闭包用法实例分析
2017/03/27 Javascript
Angularjs的$http异步删除数据详解及实例
2017/07/27 Javascript
jQuery 实现鼠标画框并对框内数据选中的实例代码
2017/08/29 jQuery
Vuejs通过拖动改变元素宽度实现自适应
2020/09/02 Javascript
使用Python做定时任务及时了解互联网动态
2019/05/15 Python
python基于递归解决背包问题详解
2019/07/03 Python
Django 创建后台,配置sqlite3教程
2019/11/18 Python
pytorch dataloader 取batch_size时候出现bug的解决方式
2020/02/20 Python
python爬虫用scrapy获取影片的实例分析
2020/11/23 Python
移动端适配 使px自动转换rem
2019/08/26 HTML / CSS
J2EE面试题集锦(附答案)
2013/08/16 面试题
网页美工求职信
2014/02/15 职场文书
土地转让协议书
2014/04/15 职场文书
计算机网络专业求职信
2014/06/05 职场文书
红色旅游心得体会
2014/09/03 职场文书
小学2016年第十八届推普周活动总结
2016/04/05 职场文书
golang中切片copy复制和等号复制的区别介绍
2021/04/27 Golang
关于React Native使用axios进行网络请求的方法
2021/08/02 Javascript
在vue中import()语法不能传入变量的问题及解决
2022/04/01 Vue.js