纯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下判断一个对象是否具有指定名称的属性的的代码
Jan 11 Javascript
Javascript变量函数浅析
Sep 02 Javascript
你的 mixin 真的兼容 ECMAScript 5 吗?
Apr 11 Javascript
7款吸引人眼球的jQuery/CSS3特效实例分享
Apr 25 Javascript
javascript中call,apply,bind的用法对比分析
Feb 12 Javascript
基于jQuery通过jQuery.form.js插件使用ajax提交form表单
Aug 17 Javascript
jquery实现表格隔行换色效果
Nov 19 Javascript
JavaScript+CSS实现的可折叠二级菜单实例
Feb 29 Javascript
详解jQuery UI库中文本输入自动补全功能的用法
Apr 23 Javascript
利用js判断手机是否安装某个app的多种方案
Feb 13 Javascript
小程序点击图片实现png转jpg
Oct 22 Javascript
JavaScript 函数用法详解【函数定义、参数、绑定、作用域、闭包等】
May 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
山进SANGEAN ATS-909X电路分析
2021/03/02 无线电
php检测文本的编码
2015/07/26 PHP
JS localStorage实现本地缓存的方法
2013/06/22 Javascript
jqeury-easyui-layout问题解决方法
2014/03/24 Javascript
IE中图片的onload事件无效问题和解决方法
2014/06/06 Javascript
jQuery中extend()和fn.extend()方法详解
2015/06/03 Javascript
jQuery使用ajax跨域获取数据的简单实例
2016/05/18 Javascript
jquery 动态增加删除行的简单实例(推荐)
2016/10/12 Javascript
浅析JavaScript中的特殊数据类型
2017/12/15 Javascript
vue.js中proxyTable 转发请求的实现方法
2018/09/20 Javascript
浅谈vue加载优化策略
2019/03/19 Javascript
vue 移动端注入骨架屏的配置方法
2019/06/25 Javascript
微信小程序如何调用图片接口API并居中显示
2019/06/29 Javascript
JavaScript在web自动化测试中的作用示例详解
2019/08/25 Javascript
这15个Vue指令,让你的项目开发爽到爆
2019/10/11 Javascript
原生javascript单例模式的应用实例分析
2020/02/23 Javascript
python ElementTree 基本读操作示例
2009/04/09 Python
利用Python生成文件md5校验值函数的方法
2017/01/10 Python
python初学之用户登录的实现过程(实例讲解)
2017/12/23 Python
python+numpy+matplotalib实现梯度下降法
2018/08/31 Python
python生成lmdb格式的文件实例
2018/11/08 Python
python误差棒图errorbar()函数实例解析
2020/02/11 Python
关于多元线性回归分析——Python&amp;SPSS
2020/02/24 Python
python实现opencv+scoket网络实时图传
2020/03/20 Python
python实现贪吃蛇游戏源码
2020/03/21 Python
python字典key不能是可以是啥类型
2020/08/04 Python
Biblibili视频投稿接口分析并以Python实现自动投稿功能
2021/02/05 Python
HTML5实现视频弹幕功能
2019/08/09 HTML / CSS
英国定做窗帘和纺织品面料一站式商店:Dekoria
2018/08/29 全球购物
FC-Moto瑞典:欧洲最大的摩托车服装和头盔商店之一
2018/11/27 全球购物
《孙权劝学》教学反思
2014/04/23 职场文书
电钳工人个人求职信
2014/05/10 职场文书
群众路线自我剖析材料
2014/10/08 职场文书
晋江市委常委班子四风问题整改工作方案
2014/10/26 职场文书
三严三实·严以用权心得体会
2016/01/12 职场文书
攻击最高的10只幽灵系神奇宝贝,坚盾剑怪排第一,第五最为可怕
2022/03/18 日漫