Discuz教程网

纯JS实现的批量图片预览加载功能

[复制链接]
authicon dly 发表于 2011-9-10 21:16:35 | 显示全部楼层 |阅读模式
1.实现原理直接见代码,需要一张转圈的小图片,需要预览的所有图片默认的位置全是这张小图片,滚轮滚到原图需要出现的位置时候,预览加载替换小图片.实现效果
  1. <div style="height: 2500px;" id="txtScrollTop">
  2. </div>
  3. <div id="galleryList">
  4. </div>
复制代码
  1. var util = {
  2. $: function (id) {
  3. return document.getElementById(id);
  4. },
  5. getElementsByClassName: function (oElm, strTagName, strClassName) {
  6. var arrElements = oElm.getElementsByTagName(strTagName);
  7. var arrReturnElements = new Array();
  8. strClassName = strClassName.replace(/-/g, "\-");
  9. var oRegExp = new RegExp("(^|\\s)" + strClassName + "(\\s|$)");
  10. var oElement;
  11. for (var i = 0; i < arrElements.length; i++) {
  12. oElement = arrElements[i];
  13. if (oRegExp.test(oElement.className)) {
  14. arrReturnElements.push(oElement);
  15. }
  16. }
  17. return arrReturnElements;
  18. },
  19. getXY: function (obj) {
  20. var sumTop = 0, sumLeft = 0;
  21. while (obj != document.body) {
  22. sumLeft += obj.offsetLeft;
  23. sumTop += obj.offsetTop;
  24. obj = obj.offsetParent;
  25. }
  26. return { x: sumLeft, y: sumTop }
  27. }
  28. };

  29. var GalleryViewer = {
  30. GalleryContainer: {},
  31. smallImgs: [], //小图片数组
  32. orginalImgs: [], //原始图片数组
  33. init: function (id, imgs, classname, smallImgSrc) {
  34. this.GalleryContainer = util.$(id);
  35. this.orginalImgs = imgs;
  36. for (var i = 0; i < imgs.length; i++) { //追加所有预览小图片
  37. var img = document.createElement("img");
  38. img.src = smallImgSrc;
  39. img.className = classname;
  40. this.GalleryContainer.appendChild(img);
  41. }
  42. this.smallImgs = util.getElementsByClassName(util.$(id), "img", classname);
  43. if (util.getXY(GalleryViewer.GalleryContainer).y < window.screen.height) {//如果初始在页面开始部位直接预览加载
  44. this.preloadImages();
  45. }
  46. var mousewheelevt = (/Firefox/i.test(navigator.userAgent)) ? "DOMMouseScroll" : "mousewheel" //FF doesn't recognize mousewheel as of FF3.x
  47. if (document.attachEvent) //if IE (and Opera depending on user setting)
  48. document.attachEvent("on" + mousewheelevt, GalleryViewer.orginalImgsAppear);
  49. else if (document.addEventListener) //WC3 browsers
  50. document.addEventListener(mousewheelevt, GalleryViewer.orginalImgsAppear, false);
  51. },
  52. preloadImages: function () {
  53. for (var i = 0; i < GalleryViewer.orginalImgs.length; i++) {
  54. (function (i) {
  55. var imagePreload = new Image();
  56. imagePreload.src = GalleryViewer.orginalImgs[i]; //预加载大图片
  57. if (imagePreload.complete) { // 如果图片已经存在于浏览器缓存,直接调用回调函数
  58. GalleryViewer.ImgsChange(i, imagePreload);
  59. return; // 直接返回,不用再处理onload事件
  60. }
  61. imagePreload.onload = GalleryViewer.ImgsChange(i, imagePreload); //加载完成替换
  62. })(i);
  63. }
  64. },
  65. ImgsChange: function (i, obj) {
  66. this.smallImgs[i].src = obj.src;
  67. },
  68. orginalImgsAppear: function () {
  69. //alert(getXY(this.GalleryContainer).y - window.screen.height);
  70. if (document.documentElement.scrollTop > util.getXY(GalleryViewer.GalleryContainer).y - window.screen.height) {
  71. GalleryViewer.preloadImages();
  72. }

  73. }
  74. };
  75. (function () {

  76. var imgs1 = ['../Content/images/gb_tip_layer.png', '../Content/images/gb_tip_layer.png', '../Content/images/gb_tip_layer.png'];
  77. GalleryViewer.init("Div1", imgs1, "smallImgs1", "../Content/images/preload.gif");
  78. //参数函数分别为div.id容器,原图地址数组,小图的类名,小图地址,具体图片地址请参照自己的项目
  79. })();
复制代码



上一篇:JavaScript理清apply(),call()的区别和关系
下一篇:javascript中关于执行环境的杂谈
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

1314学习网 ( 浙ICP备10214163号 )

GMT+8, 2025-5-2 19:18

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表