Statistiques
| Révision :

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);