jquery.dimensions.js
上传用户:stephen_wu
上传日期:2008-07-05
资源大小:1757k
文件大小:3k
源码类别:

网络

开发平台:

Unix_Linux

  1. /* Copyright (c) 2007 Paul Bakaus (paul.bakaus@googlemail.com) and Brandon Aaron (brandon.aaron@gmail.com || http://brandonaaron.net)
  2.  * Dual licensed under the MIT (http://www.opensource.org/licenses/mit-license.php)
  3.  * and GPL (http://www.opensource.org/licenses/gpl-license.php) licenses.
  4.  *
  5.  * $LastChangedDate: 2007-12-20 08:46:55 -0600 (Thu, 20 Dec 2007) $
  6.  * $Rev: 4259 $
  7.  *
  8.  * Version: 1.2
  9.  *
  10.  * Requires: jQuery 1.2+
  11.  */
  12. (function($){
  13. $.dimensions = {
  14. version: '1.2'
  15. };
  16. // Create innerHeight, innerWidth, outerHeight and outerWidth methods
  17. $.each( [ 'Height', 'Width' ], function(i, name){
  18. // innerHeight and innerWidth
  19. $.fn[ 'inner' + name ] = function() {
  20. if (!this[0]) return;
  21. var torl = name == 'Height' ? 'Top'    : 'Left',  // top or left
  22.     borr = name == 'Height' ? 'Bottom' : 'Right'; // bottom or right
  23. return this.is(':visible') ? this[0]['client' + name] : num( this, name.toLowerCase() ) + num(this, 'padding' + torl) + num(this, 'padding' + borr);
  24. };
  25. // outerHeight and outerWidth
  26. $.fn[ 'outer' + name ] = function(options) {
  27. if (!this[0]) return;
  28. var torl = name == 'Height' ? 'Top'    : 'Left',  // top or left
  29.     borr = name == 'Height' ? 'Bottom' : 'Right'; // bottom or right
  30. options = $.extend({ margin: false }, options || {});
  31. var val = this.is(':visible') ? 
  32. this[0]['offset' + name] : 
  33. num( this, name.toLowerCase() )
  34. + num(this, 'border' + torl + 'Width') + num(this, 'border' + borr + 'Width')
  35. + num(this, 'padding' + torl) + num(this, 'padding' + borr);
  36. return val + (options.margin ? (num(this, 'margin' + torl) + num(this, 'margin' + borr)) : 0);
  37. };
  38. });
  39. // Create scrollLeft and scrollTop methods
  40. $.each( ['Left', 'Top'], function(i, name) {
  41. $.fn[ 'scroll' + name ] = function(val) {
  42. if (!this[0]) return;
  43. return val != undefined ?
  44. // Set the scroll offset
  45. this.each(function() {
  46. this == window || this == document ?
  47. window.scrollTo( 
  48. name == 'Left' ? val : $(window)[ 'scrollLeft' ](),
  49. name == 'Top'  ? val : $(window)[ 'scrollTop'  ]()
  50. ) :
  51. this[ 'scroll' + name ] = val;
  52. }) :
  53. // Return the scroll offset
  54. this[0] == window || this[0] == document ?
  55. self[ (name == 'Left' ? 'pageXOffset' : 'pageYOffset') ] ||
  56. $.boxModel && document.documentElement[ 'scroll' + name ] ||
  57. document.body[ 'scroll' + name ] :
  58. this[0][ 'scroll' + name ];
  59. };
  60. });
  61. $.fn.extend({
  62. position: function() {
  63. var left = 0, top = 0, elem = this[0], offset, parentOffset, offsetParent, results;
  64. if (elem) {
  65. // Get *real* offsetParent
  66. offsetParent = this.offsetParent();
  67. // Get correct offsets
  68. offset       = this.offset();
  69. parentOffset = offsetParent.offset();
  70. // Subtract element margins
  71. offset.top  -= num(elem, 'marginTop');
  72. offset.left -= num(elem, 'marginLeft');
  73. // Add offsetParent borders
  74. parentOffset.top  += num(offsetParent, 'borderTopWidth');
  75. parentOffset.left += num(offsetParent, 'borderLeftWidth');
  76. // Subtract the two offsets
  77. results = {
  78. top:  offset.top  - parentOffset.top,
  79. left: offset.left - parentOffset.left
  80. };
  81. }
  82. return results;
  83. },
  84. offsetParent: function() {
  85. var offsetParent = this[0].offsetParent;
  86. while ( offsetParent && (!/^body|html$/i.test(offsetParent.tagName) && $.css(offsetParent, 'position') == 'static') )
  87. offsetParent = offsetParent.offsetParent;
  88. return $(offsetParent);
  89. }
  90. });
  91. function num(el, prop) {
  92. return parseInt($.curCSS(el.jquery?el[0]:el,prop,true))||0;
  93. };
  94. })(jQuery);