1
1
/*!
2
2
* MoveTo - A lightweight scroll animation javascript library without any dependency.
3
- * Version 1.6.1 (12-04 -2017 10:18 )
3
+ * Version 1.7.0 (01-10 -2017 14:12 )
4
4
* Licensed under MIT
5
5
* Copyright 2017 Hasan Aydoğdu <[email protected] >
6
6
*/
@@ -32,24 +32,6 @@ var MoveTo = function () {
32
32
return - c * ( t * t * t * t - 1 ) + b ;
33
33
}
34
34
35
- /**
36
- * Returns html element's top and left offset
37
- * @param {HTMLElement } elem - Element
38
- * @return {object } Element top and left offset
39
- */
40
- function getOffsetSum ( elem ) {
41
- var top = 0 ;
42
- var left = 0 ;
43
- while ( elem ) {
44
- top += elem . offsetTop ;
45
- left += elem . offsetLeft ;
46
- elem = elem . offsetParent ;
47
- }
48
- return {
49
- top : top , left : left } ;
50
-
51
- }
52
-
53
35
/**
54
36
* Merge two object
55
37
*
@@ -135,12 +117,16 @@ var MoveTo = function () {
135
117
136
118
options = mergeObject ( this . options , options ) ;
137
119
138
- var to = typeof target === 'number' ? target : getOffsetSum ( target ) . top ;
120
+ var distance = typeof target === 'number' ? target : target . getBoundingClientRect ( ) . top ;
139
121
var from = window . pageYOffset ;
140
- to -= options . tolerance ;
141
- var change = to - from ;
142
122
var startTime = null ;
143
123
var lastPageYOffset = void 0 ;
124
+ distance -= options . tolerance ;
125
+
126
+ // if distance is `0`, it means to back to the top
127
+ if ( distance === 0 ) {
128
+ distance -= from ;
129
+ }
144
130
145
131
// rAF loop
146
132
var loop = function loop ( currentTime ) {
@@ -157,24 +143,24 @@ var MoveTo = function () {
157
143
158
144
if ( lastPageYOffset ) {
159
145
if (
160
- change > 0 && lastPageYOffset > currentPageYOffset ||
161
- change < 0 && lastPageYOffset < currentPageYOffset )
146
+ distance > 0 && lastPageYOffset > currentPageYOffset ||
147
+ distance < 0 && lastPageYOffset < currentPageYOffset )
162
148
{
163
149
return options . callback ( target ) ;
164
150
}
165
151
}
166
152
lastPageYOffset = currentPageYOffset ;
167
153
168
154
var val = _this2 . easeFunctions [ options . easing ] (
169
- timeElapsed , from , change , options . duration ) ;
155
+ timeElapsed , from , distance , options . duration ) ;
170
156
171
157
172
158
window . scroll ( 0 , val ) ;
173
159
174
160
if ( timeElapsed < options . duration ) {
175
161
window . requestAnimationFrame ( loop ) ;
176
162
} else {
177
- window . scroll ( 0 , to ) ;
163
+ window . scroll ( 0 , distance + from ) ;
178
164
options . callback ( target ) ;
179
165
}
180
166
} ;
0 commit comments