@@ -25,28 +25,6 @@ const MoveTo = (() => {
25
25
return - c * ( t * t * t * t - 1 ) + b ;
26
26
}
27
27
28
- /**
29
- * Returns html element's top and left offset
30
- * @param {HTMLElement } elem - Element
31
- * @return {object } Element top and left offset
32
- */
33
- function getOffsetSum ( elem ) {
34
- if ( typeof elem . getBoundingClientRect == 'function' ) {
35
- return elem . getBoundingClientRect ( ) ;
36
- } else {
37
- let top = 0 ;
38
- let left = 0 ;
39
- while ( elem ) {
40
- top += elem . offsetTop ;
41
- left += elem . offsetLeft ;
42
- elem = elem . offsetParent ;
43
- }
44
- return {
45
- top, left,
46
- } ;
47
- }
48
- }
49
-
50
28
/**
51
29
* Merge two object
52
30
*
@@ -132,12 +110,11 @@ const MoveTo = (() => {
132
110
133
111
options = mergeObject ( this . options , options ) ;
134
112
135
- let to = typeof target === 'number' ? target : getOffsetSum ( target ) . top ;
113
+ let distance = typeof target === 'number' ? target : target . getBoundingClientRect ( ) . top ;
136
114
const from = window . pageYOffset ;
137
- to -= options . tolerance ;
138
- const change = to - from ;
139
115
let startTime = null ;
140
116
let lastPageYOffset ;
117
+ distance -= options . tolerance ;
141
118
142
119
// rAF loop
143
120
const loop = ( currentTime ) => {
@@ -154,24 +131,24 @@ const MoveTo = (() => {
154
131
155
132
if ( lastPageYOffset ) {
156
133
if (
157
- ( change > 0 && lastPageYOffset > currentPageYOffset ) ||
158
- ( change < 0 && lastPageYOffset < currentPageYOffset )
134
+ ( distance > 0 && lastPageYOffset > currentPageYOffset ) ||
135
+ ( distance < 0 && lastPageYOffset < currentPageYOffset )
159
136
) {
160
137
return options . callback ( target ) ;
161
138
}
162
139
}
163
140
lastPageYOffset = currentPageYOffset ;
164
141
165
142
const val = this . easeFunctions [ options . easing ] (
166
- timeElapsed , from , change , options . duration
143
+ timeElapsed , from , distance , options . duration
167
144
) ;
168
145
169
146
window . scroll ( 0 , val ) ;
170
147
171
148
if ( timeElapsed < options . duration ) {
172
149
window . requestAnimationFrame ( loop ) ;
173
150
} else {
174
- window . scroll ( 0 , to ) ;
151
+ window . scroll ( 0 , distance + from ) ;
175
152
options . callback ( target ) ;
176
153
}
177
154
} ;
0 commit comments