annotate default/node_modules/jquery/src/offset.js @ 0:1d038bc9b3d2 default tip

Up:default
author Liny <dev@neowd.com>
date Sat, 31 May 2025 09:21:51 +0800
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1 define( [
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
2 "./core",
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
3 "./core/access",
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
4 "./var/document",
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
5 "./var/documentElement",
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
6 "./var/isFunction",
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
7 "./css/var/rnumnonpx",
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
8 "./css/curCSS",
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
9 "./css/addGetHookIf",
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
10 "./css/support",
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
11 "./var/isWindow",
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
12 "./core/init",
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
13 "./css",
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
14 "./selector" // contains
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
15 ], function( jQuery, access, document, documentElement, isFunction, rnumnonpx,
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
16 curCSS, addGetHookIf, support, isWindow ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
17
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
18 "use strict";
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
19
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
20 jQuery.offset = {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
21 setOffset: function( elem, options, i ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
22 var curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition,
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
23 position = jQuery.css( elem, "position" ),
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
24 curElem = jQuery( elem ),
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
25 props = {};
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
26
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
27 // Set position first, in-case top/left are set even on static elem
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
28 if ( position === "static" ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
29 elem.style.position = "relative";
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
30 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
31
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
32 curOffset = curElem.offset();
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
33 curCSSTop = jQuery.css( elem, "top" );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
34 curCSSLeft = jQuery.css( elem, "left" );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
35 calculatePosition = ( position === "absolute" || position === "fixed" ) &&
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
36 ( curCSSTop + curCSSLeft ).indexOf( "auto" ) > -1;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
37
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
38 // Need to be able to calculate position if either
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
39 // top or left is auto and position is either absolute or fixed
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
40 if ( calculatePosition ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
41 curPosition = curElem.position();
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
42 curTop = curPosition.top;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
43 curLeft = curPosition.left;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
44
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
45 } else {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
46 curTop = parseFloat( curCSSTop ) || 0;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
47 curLeft = parseFloat( curCSSLeft ) || 0;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
48 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
49
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
50 if ( isFunction( options ) ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
51
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
52 // Use jQuery.extend here to allow modification of coordinates argument (gh-1848)
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
53 options = options.call( elem, i, jQuery.extend( {}, curOffset ) );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
54 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
55
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
56 if ( options.top != null ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
57 props.top = ( options.top - curOffset.top ) + curTop;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
58 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
59 if ( options.left != null ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
60 props.left = ( options.left - curOffset.left ) + curLeft;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
61 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
62
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
63 if ( "using" in options ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
64 options.using.call( elem, props );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
65
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
66 } else {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
67 curElem.css( props );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
68 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
69 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
70 };
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
71
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
72 jQuery.fn.extend( {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
73
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
74 // offset() relates an element's border box to the document origin
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
75 offset: function( options ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
76
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
77 // Preserve chaining for setter
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
78 if ( arguments.length ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
79 return options === undefined ?
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
80 this :
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
81 this.each( function( i ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
82 jQuery.offset.setOffset( this, options, i );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
83 } );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
84 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
85
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
86 var rect, win,
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
87 elem = this[ 0 ];
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
88
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
89 if ( !elem ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
90 return;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
91 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
92
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
93 // Return zeros for disconnected and hidden (display: none) elements (gh-2310)
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
94 // Support: IE <=11 only
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
95 // Running getBoundingClientRect on a
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
96 // disconnected node in IE throws an error
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
97 if ( !elem.getClientRects().length ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
98 return { top: 0, left: 0 };
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
99 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
100
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
101 // Get document-relative position by adding viewport scroll to viewport-relative gBCR
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
102 rect = elem.getBoundingClientRect();
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
103 win = elem.ownerDocument.defaultView;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
104 return {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
105 top: rect.top + win.pageYOffset,
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
106 left: rect.left + win.pageXOffset
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
107 };
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
108 },
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
109
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
110 // position() relates an element's margin box to its offset parent's padding box
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
111 // This corresponds to the behavior of CSS absolute positioning
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
112 position: function() {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
113 if ( !this[ 0 ] ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
114 return;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
115 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
116
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
117 var offsetParent, offset, doc,
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
118 elem = this[ 0 ],
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
119 parentOffset = { top: 0, left: 0 };
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
120
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
121 // position:fixed elements are offset from the viewport, which itself always has zero offset
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
122 if ( jQuery.css( elem, "position" ) === "fixed" ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
123
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
124 // Assume position:fixed implies availability of getBoundingClientRect
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
125 offset = elem.getBoundingClientRect();
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
126
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
127 } else {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
128 offset = this.offset();
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
129
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
130 // Account for the *real* offset parent, which can be the document or its root element
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
131 // when a statically positioned element is identified
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
132 doc = elem.ownerDocument;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
133 offsetParent = elem.offsetParent || doc.documentElement;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
134 while ( offsetParent &&
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
135 ( offsetParent === doc.body || offsetParent === doc.documentElement ) &&
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
136 jQuery.css( offsetParent, "position" ) === "static" ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
137
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
138 offsetParent = offsetParent.parentNode;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
139 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
140 if ( offsetParent && offsetParent !== elem && offsetParent.nodeType === 1 ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
141
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
142 // Incorporate borders into its offset, since they are outside its content origin
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
143 parentOffset = jQuery( offsetParent ).offset();
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
144 parentOffset.top += jQuery.css( offsetParent, "borderTopWidth", true );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
145 parentOffset.left += jQuery.css( offsetParent, "borderLeftWidth", true );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
146 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
147 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
148
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
149 // Subtract parent offsets and element margins
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
150 return {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
151 top: offset.top - parentOffset.top - jQuery.css( elem, "marginTop", true ),
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
152 left: offset.left - parentOffset.left - jQuery.css( elem, "marginLeft", true )
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
153 };
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
154 },
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
155
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
156 // This method will return documentElement in the following cases:
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
157 // 1) For the element inside the iframe without offsetParent, this method will return
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
158 // documentElement of the parent window
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
159 // 2) For the hidden or detached element
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
160 // 3) For body or html element, i.e. in case of the html node - it will return itself
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
161 //
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
162 // but those exceptions were never presented as a real life use-cases
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
163 // and might be considered as more preferable results.
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
164 //
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
165 // This logic, however, is not guaranteed and can change at any point in the future
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
166 offsetParent: function() {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
167 return this.map( function() {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
168 var offsetParent = this.offsetParent;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
169
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
170 while ( offsetParent && jQuery.css( offsetParent, "position" ) === "static" ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
171 offsetParent = offsetParent.offsetParent;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
172 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
173
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
174 return offsetParent || documentElement;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
175 } );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
176 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
177 } );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
178
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
179 // Create scrollLeft and scrollTop methods
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
180 jQuery.each( { scrollLeft: "pageXOffset", scrollTop: "pageYOffset" }, function( method, prop ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
181 var top = "pageYOffset" === prop;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
182
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
183 jQuery.fn[ method ] = function( val ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
184 return access( this, function( elem, method, val ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
185
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
186 // Coalesce documents and windows
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
187 var win;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
188 if ( isWindow( elem ) ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
189 win = elem;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
190 } else if ( elem.nodeType === 9 ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
191 win = elem.defaultView;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
192 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
193
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
194 if ( val === undefined ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
195 return win ? win[ prop ] : elem[ method ];
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
196 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
197
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
198 if ( win ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
199 win.scrollTo(
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
200 !top ? val : win.pageXOffset,
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
201 top ? val : win.pageYOffset
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
202 );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
203
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
204 } else {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
205 elem[ method ] = val;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
206 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
207 }, method, val, arguments.length );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
208 };
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
209 } );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
210
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
211 // Support: Safari <=7 - 9.1, Chrome <=37 - 49
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
212 // Add the top/left cssHooks using jQuery.fn.position
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
213 // Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
214 // Blink bug: https://bugs.chromium.org/p/chromium/issues/detail?id=589347
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
215 // getComputedStyle returns percent when specified for top/left/bottom/right;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
216 // rather than make the css module depend on the offset module, just check for it here
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
217 jQuery.each( [ "top", "left" ], function( i, prop ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
218 jQuery.cssHooks[ prop ] = addGetHookIf( support.pixelPosition,
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
219 function( elem, computed ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
220 if ( computed ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
221 computed = curCSS( elem, prop );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
222
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
223 // If curCSS returns percentage, fallback to offset
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
224 return rnumnonpx.test( computed ) ?
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
225 jQuery( elem ).position()[ prop ] + "px" :
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
226 computed;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
227 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
228 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
229 );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
230 } );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
231
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
232 return jQuery;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
233 } );