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