纯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 相关文章推荐
学习ExtJS(二) Button常用方法
Oct 07 Javascript
JavaScript的eval JSON object问题
Nov 15 Javascript
node.js中使用node-schedule实现定时任务实例
Jun 03 Javascript
JavaScript闭包函数访问外部变量的方法
Aug 27 Javascript
jQuery实现最简单的切换图效果【可兼容IE6、火狐、谷歌、opera等】
Sep 04 Javascript
JavaScript学习笔记--常用的互动方法
Dec 07 Javascript
JavaScript设计模式之单例模式详解
Jun 09 Javascript
初探JavaScript 面向对象(推荐)
Sep 03 Javascript
小程序hover-class点击态效果实现
Feb 26 Javascript
jquery操作checkbox的常用方法总结【附测试源码下载】
Jun 10 jQuery
通过原生vue添加滚动加载更多功能
Nov 21 Javascript
解决vue页面渲染但dom没渲染的操作
Jul 27 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
屏蔽浏览器缓存另类方法
2006/10/09 PHP
PHP框架Laravel学习心得体会
2015/10/28 PHP
全面解读PHP的Yii框架中的日志功能
2016/03/17 PHP
基于jquery的滚动新闻列表
2010/06/19 Javascript
巧用js提交表单轻松解决一个页面有多个提交按钮
2013/11/17 Javascript
angularJS 中$scope方法使用指南
2015/02/09 Javascript
jquery实现弹出层效果实例
2015/05/19 Javascript
JavaScript中的setMilliseconds()方法使用详解
2015/06/11 Javascript
JS实现超简单的仿QQ折叠菜单效果
2015/09/21 Javascript
jQuery+vue.js实现的九宫格拼图游戏完整实例【附源码下载】
2017/09/12 jQuery
jquery鼠标悬停导航下划线滑出效果
2017/09/29 jQuery
Angular项目如何升级至Angular6步骤全纪录
2018/09/03 Javascript
element vue validate验证名称重复 输入框与后台重复验证 特殊字符 字符长度 及注意事项小结【实例代码】
2018/11/20 Javascript
详解Vue源码之数据的代理访问
2018/12/11 Javascript
微信小程序textarea层级过高的解决方法
2019/03/04 Javascript
微信小程序上线发布流程图文详解
2019/05/06 Javascript
vue 地区选择器v-distpicker的常用功能
2019/07/23 Javascript
js实现超级玛丽小游戏
2020/03/18 Javascript
Nuxt.js nuxt-link与router-link的区别说明
2020/11/06 Javascript
Python实现对比不同字体中的同一字符的显示效果
2015/04/23 Python
Python使用自带的ConfigParser模块读写ini配置文件
2016/06/26 Python
Pycharm技巧之代码跳转该如何回退
2017/07/16 Python
Window10+Python3.5安装opencv的教程推荐
2018/04/02 Python
Pycharm 创建 Django admin 用户名和密码的实例
2018/05/30 Python
Python基础教程之异常详解
2019/01/10 Python
解决python中导入win32com.client出错的问题
2019/07/26 Python
Python通过Tesseract库实现文字识别
2020/03/05 Python
一文详述 Python 中的 property 语法
2020/09/01 Python
国外最大的眼镜网站:Coastal
2017/08/09 全球购物
设计师求职信模板
2014/05/06 职场文书
领导班子民主生活会整改措施(工商局)
2014/09/21 职场文书
介绍信怎么写
2015/01/30 职场文书
求职自我评价怎么写
2015/03/09 职场文书
教师素质教育心得体会
2016/01/19 职场文书
解决mysql问题:由于找不到MSVCR120.dll,无法继续执行代码
2021/06/26 MySQL
利用 JavaScript 构建命令行应用
2021/11/17 Javascript