纯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 相关文章推荐
js去除空格的12种实用方法
Nov 08 Javascript
JavaScript实现找质数代码分享
Mar 24 Javascript
jquery.mousewheel实现整屏翻屏效果
Aug 30 Javascript
微信小程序如何获知用户运行小程序的场景教程
May 17 Javascript
View.post() 不靠谱的地方你知道多少
Aug 29 Javascript
jQuery实现标签子元素的添加和赋值方法
Feb 24 jQuery
vue项目中应用ueditor自定义上传按钮功能
Apr 27 Javascript
ios设备中angularjs无法改变页面title的解决方法
Sep 13 Javascript
JavaScript实现的鼠标跟随特效示例【2则实例】
Dec 22 Javascript
详解JavaScript对数组操作(添加/删除/截取/排序/倒序)
Apr 28 Javascript
VueCli3.0中集成MockApi的方法示例
Jul 05 Javascript
Vue3 实现双盒子定位Overlay的示例
Dec 22 Vue.js
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
收听困难?教您超简便短波广播抗干扰方法!
2021/03/01 无线电
php计算税后工资的方法
2015/07/28 PHP
laravel5.1 ajax post 传值_token示例
2019/10/24 PHP
PHP防止sql注入小技巧之sql预处理原理与实现方法分析
2019/12/13 PHP
js操作textarea 常用方法总结
2012/12/03 Javascript
JavaScript前补零操作实例
2015/03/11 Javascript
JavaScript 实现完美兼容多浏览器的复制功能代码
2015/04/28 Javascript
JavaScript实现基于十进制的四舍五入实例
2015/07/17 Javascript
js中遍历Map对象的方法
2016/07/27 Javascript
js实现一键复制功能
2017/03/16 Javascript
Mac系统下Webstorm快捷键整理大全
2017/05/28 Javascript
vue父子组件的嵌套的示例代码
2017/09/08 Javascript
vue 组件中slot插口的具体用法
2018/04/03 Javascript
vue history 模式打包部署在域名的二级目录的配置指南
2019/07/02 Javascript
Vue项目实现简单的权限控制管理功能
2019/07/17 Javascript
vue指令v-html使用过滤器filters功能实例
2019/10/25 Javascript
微信小程序图片加载失败时替换为默认图片的方法
2019/12/09 Javascript
详解vue 中 scoped 样式作用域的规则
2020/09/14 Javascript
pycharm安装图文教程
2017/05/02 Python
python网络爬虫学习笔记(1)
2018/04/09 Python
Python将文本去空格并保存到txt文件中的实例
2018/07/24 Python
在python中获取div的文本内容并和想定结果进行对比详解
2019/01/02 Python
PyQt QListWidget修改列表项item的行高方法
2019/06/20 Python
解决python 文本过滤和清理问题
2019/08/28 Python
基于python 凸包问题的解决
2020/04/16 Python
关于Python错误重试方法总结
2021/01/03 Python
英国高档时尚男装购物网站:MR PORTER
2016/08/09 全球购物
金讯Java笔试题目
2013/06/18 面试题
Linux文件操作命令都有哪些
2016/07/23 面试题
教师对学生的寄语
2014/04/03 职场文书
爱与责任师德演讲稿
2014/08/26 职场文书
社区个人对照检查材料(群众路线)
2014/09/26 职场文书
求职简历自我评价怎么写
2015/03/10 职场文书
2019年教师节祝福语精选,给老师送上真诚的祝福
2019/09/09 职场文书
Mac电脑OS系统下安装Nginx的详细教程
2022/04/14 Servers
安装harbor作为docker镜像仓库的问题
2022/06/14 Servers