网站首页 手机版
 注册 登录
您现在的位置: 畅无忧设计 >> 网页特效 >> 背景图像 >> 正文
最新文章
· 带文字说明的js幻灯片代码
· 浏览器全屏浏览图片集
· 创意中国flash+xml焦点图代码
· 仿QQ商城焦点图jquery幻灯特效
· 带缓冲效果的图片幻灯片
· css和jquery配合完成-ipad向左向右拖
· 图片自动按比例缩小代码(防止页面被
· 仿QQ新闻图片浏览效果
· 一个横向滑动的图片切换容器代码
· 鼠标移入/移出改变图片透明度
热门文章
 图片上的左右箭头切换上一张下一张
 带缩略图和左右箭头自动切换的图片
 产品展示专用的jQuery图片幻灯+缩略
 Flash+XML前后按钮的超漂亮图片切换
 图片左右滚动,带有左右方向控制
 Jquery幻灯片/焦点图插件KinSlides
 JS 图片左右滚动,图片控制左右滚动
 可控制左右滚动的无缝图片滚动特效
 可控制图片放大缩小还原移动效果的
 非常漂亮的JS带缩略图的幻灯图片切
相关文章
没有相关文章
仿迅雷图片被动加载效果的实现
来源:源码爱好者 更新时间:2011/5/14 8:31:36 阅读次数: 我要投稿
△运行 ☉预览 #复制 +收藏
特效代码:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gbk" />
<title>图片被动加载的实现</title>
</head>
<body>
<script type="text/javascript">
/**
 * Javascript Image Delay load
 * @author Eric,<wangyinglei@yeah.net>,QQ:31301678
 * @copyright Quanying Network Inc. 2010
 * @TODO x轴滚动加载功能未被实现
 */
//闭包防止变量冲突
(function(){
 //预定义变量,减小代码体积
 var _ = document,
  A = _.compatMode,
  B = _.body,
  C = _.documentElement;
 //Constructor
 function AimoLoad(e){
  //要处理的包含延迟加载图片的容器
  this.area = e ?  this.get(e) : _;
  //需要延迟加载的所有图片对象
  this.imgs = [];
  //执行判断 条件成立 载入图片
  this.run();
 }
 //扩展原型链(注册类其他方法)
 AimoLoad.prototype = {
  //获取DOM元素,仅支持ID
  'get' : function(e){
   return typeof(e)=='string' ? _.getElementById(e) : e;
  },
  //获取所有需要被动载入的图片集合
  'getImages' : function(){
   var i = 0, 
    imgs = this.area.getElementsByTagName('img'),
    l = imgs.length;
   for ( ; i < l; i++) {
    //过滤带有bigsrc属性的所有图片
    if(imgs[i].getAttribute('bigsrc')){
     this.imgs.push(imgs[i]);
    }
   }
  },
  
  //获取元素位置坐标
  'getPosition' : function(el){
   var x = 0, y = 0;;
   if (el.getBoundingClientRect) {
    var box = el.getBoundingClientRect(),
     el = (A != "CSS1Compat") ? 
     _.body : C;
    x = box.left + el.scrollLeft - el.clientLeft;
    y = box.top + el.scrollTop - el.clientTop;
   } else {
    x = el.offsetLeft;
    y = el.offsetTop;
    var parent = el.offsetParent;
    while (parent) {
     x += parent.offsetLeft;
     y += parent.offsetTop;
     parent = parent.offsetParent;
    }
   }
   return {'x' : x, 'y' : y};
  },
  
  //封装判断变量是否定义
  'defined' : function(o){
   return (typeof(o)!="undefined");
  },
  
  //封装合法化Int变量
  'zeroFix' : function(n){
   return (!this.defined(n) || isNaN(n))? 0 : n;
  },
  //获取可视部分高度
  'getVisibileHeight' : function(){
   var cm = C && (!A || A=="CSS1Compat");
   if (!window.opera && cm) {
    return C.clientHeight;
   }else if (A && !window.opera && B) {
    return B.clientHeight;
   }
   return this.zeroFix(self.innerHeight);
  },
  //获取垂直滚动条位置
  'getScrollTop' : function(){
   if (C && this.defined(C.scrollTop) && C.scrollTop>0) {
    return C.scrollTop;
   }
   if (B && this.defined(B.scrollTop)) {
    return B.scrollTop;
   }
   return 0;
  },
  
  //执行主函数
  'run' : function(){
   //获取其他脚本注册到window上的onscroll和onresize事件,避免冲突
   var _resize = window.onresize || function(){}, 
    _scroll = window.onscroll || function(){},
    //引用自身,另存this指向
    _self = this,
    //定义注册函数
    delayLoad = function(){
     //清空前一次获取的所有图片
     _self.imgs = [];
     //获取当前未载入的图片
     _self.getImages();
     //如果已经没有被动载入的图片了,那么释放注册的事件,提高性能,节省内存
     if(_self.imgs.length==0){
      window.onscroll = function(){
       _scroll();
      };
      window.onresize = function(){
       _resize();
      };
      //alert('清除事件');
      return;
     }
     var i = 0,
      m = _self.imgs,
      l = _self.imgs.length,
      y = _self.getVisibileHeight(),
      t = _self.getScrollTop();
     //遍历所有需要被动载入的图片
     for( ; i < l; i++){
      //闭包保证i变量
      (function(i){
       
       //获取每个图像对象的坐标
       var pos = _self.getPosition(m[i]);
       //如果图片出现在可视区域内
       if(t + y > pos.y){
        //读取bigsrc属性,替换当前src属性
        m[i].setAttribute('src', m[i].getAttribute('bigsrc'));
        //删除bigsrc属性,提高性能
        m[i].removeAttribute('bigsrc');
       }
      })(i);//闭包结束
     }//循环结束
    };//定义注册函数结束
   
   //注册函数到window scroll事件
   window.onscroll = function(){
    _scroll();//执行其他脚本注册到当前事件的函数
    delayLoad();
   };
   //注册函数到window resize事件
   window.onresize = function(){
    _resize();//执行其他脚本注册到当前事件的函数
    delayLoad();
   };
  }
 }
 //暴露接口到外部,以便调用
 window.AimoLoad = AimoLoad;
})();
</script>
<div id="df" align="center">
<div style="height:300px;"></div>
<div><img src="http://www.cwydesign.com/effects/UploadFiles_7074/201105/2011051408475791.gif" width="200"  bigsrc="http://www.cwydesign.com/effects/UploadFiles_7074/201008/2010081122582652.jpg" /></div>
<div style="height:300px;"></div>
<div><img src="http://www.cwydesign.com/effects/UploadFiles_7074/201105/2011051408475791.gif" width="200"  bigsrc="http://www.cwydesign.com/effects/UploadFiles_7074/201008/2010081122582644.jpg" /></div>
<div style="height:300px;"></div>
<div><img src="http://www.cwydesign.com/effects/UploadFiles_7074/201105/2011051408475791.gif" width="200"  bigsrc="http://www.cwydesign.com/effects/UploadFiles_7074/201008/2010081122582622.jpg" /></div>
<div style="height:300px;"></div>
<div><img src="http://www.cwydesign.com/effects/UploadFiles_7074/201105/2011051408475791.gif" width="200"  bigsrc="http://www.cwydesign.com/effects/UploadFiles_7074/201008/2010081122582661.jpg" /></div>
</div>
<script type="text/javascript">
new AimoLoad();
</script>
</body>
</html>
△运行 ☉预览 #复制 +收藏
特效说明:

  Javascript实现的页面图片被动加载类,在使用前用1像素图像进行占位,并给img tag 添加 自定义bigsrc属性 ,当有图片进入可视区域内时,载入图片,提高页面载入速度,节省不必要的流量和连接数,x轴滚动加载功能未被实现。主函数获取其他脚本注册到window上的onscroll和onresize事件,避免冲突。

  本代码在IE6 firefox3.6 Firefox4.0 chrome opera 11.10中测试通过。

  被动加载的意义:

  当用户拖动滚动条,如果此时网页有图片的话开始加载,并不是拖不拖滚动条都先把图片加载完。这样做的好处:

  1.加快页面载入速度,提高用户体验,首页图片较多的页面尤其明显。

  2.节省流量和服务器连接数

  • 上一篇文章:
  • 下一篇文章:
  • 关于我们 - 联系我们 - 广告服务 - 在线投稿 - 友情链接 - 网站地图 - 版权声明
    CopyRight 2008-2010, CWYDESIGN.COM - 畅无忧设计, Inc. All Rights Reserved
    滇ICP备09005765号