第九区-Jquery超级群

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 302|回复: 3

scrollTop & scrollLeft [复制链接]

Rank: 7Rank: 7Rank: 7

发表于 2011-7-12 13:11:24 |显示全部楼层
先看看jQuery中的代码,晕一下:
  1. /*
  2. jQuery-1.3.2
  3. 获取方式,引入jQuery-1.3.2
  4. 然后alert($(window).scrollTop)
  5. Ctrl + C  Ctrl + V
  6. 再格式化
  7. 另,ScrollLeft的自己去拿
  8. scrollTop:
  9. */
  10. function(val) {
  11.   if (!this[0]) return null;  // 如果this[0]是空,就给你返回空
  12.   return val !== undefined ? this.each(function() {  // 如果有val
  13.     this == window || this == document
  14.       ? window.scrollTo(  // 就滚
  15.           !i ? val : jQuery(window).scrollLeft(),
  16.            i ? val : jQuery(window).scrollTop()
  17.         ) : this[method] = val;
  18.   }) : this[0] == window || this[0] == document
  19.     ? self[ i ? 'pageYOffset' : 'pageXOffset']  // 否则就获取scrollTop
  20.        || jQuery.boxModel
  21.        && document.documentElement[method]
  22.        || document.body[method]
  23.     : this[0][method];
  24. }
复制代码
再看看1.5.2的,1.5.2的聪明了,top和left用each枚举出来了
  1. jQuery.each( ["Left", "Top"], function( i, name ) {
  2.   var method = "scroll" + name;

  3.   jQuery.fn[ method ] = function(val) {
  4.     var elem = this[0], win;

  5.     if ( !elem ) {
  6.       return null;
  7.     }

  8.     if ( val !== undefined ) {
  9.       // Set the scroll offset
  10.       return this.each(function() {
  11.         win = getWindow( this );

  12.         if ( win ) {
  13.           win.scrollTo(
  14.             !i ? val : jQuery(win).scrollLeft(),
  15.             i ? val : jQuery(win).scrollTop()
  16.           );

  17.         } else {
  18.           this[ method ] = val;
  19.         }
  20.       });
  21.     } else {
  22.       win = getWindow( elem );

  23.       // Return the scroll offset
  24.       return win ? ("pageXOffset" in win) ? win[ i ? "pageYOffset" : "pageXOffset" ] :
  25.         jQuery.support.boxModel && win.document.documentElement[ method ] ||
  26.           win.document.body[ method ] :
  27.         elem[ method ];
  28.     }
  29.   };
  30. });
复制代码
不解释

jQuery的代码很坑爹啊,有木有!有木有!!
其实,各种浏览器的不同在于此:
  1. var sTop = document.body.scrollTop || document.documentElement.scrollTop || window.pageYOffset;
  2. var sLeft = document.body.scrollLeft || document.documentElement.scrollLeft || window.pageXOffset;
  3. //存储的位置不一样,当然其它element也是有这个属性的
复制代码
完毕
不积跬步无以至千里
不积小流无以成江海

阿良的小站

Rank: 7Rank: 7Rank: 7

发表于 2011-7-14 12:46:02 |显示全部楼层
你分析jquery源码呢。。。。。行啊 小娘子

使用道具 举报

Rank: 7Rank: 7Rank: 7

发表于 2011-7-14 12:52:37 |显示全部楼层
king 发表于 2011-7-14 12:46
你分析jquery源码呢。。。。。行啊 小娘子

看看而已,算不上研究
不积跬步无以至千里
不积小流无以成江海

阿良的小站

使用道具 举报

Rank: 7Rank: 7Rank: 7

热心会员

发表于 2012-1-31 17:17:19 |显示全部楼层
好牛啊
走别人的路,让别人打酱油去吧

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

Archiver|第九区-Jquery超级群    点击这里加入此群 点击这里加入此群

GMT+8, 2012-2-8 09:09 , Processed in 0.278101 second(s), 15 queries .

Powered by Discuz! X2

© 2001-2011 Comsenz Inc.

回顶部