1
1
/*!
2
2
* MoveTo - A lightweight scroll animation javascript library without any dependency.
3
- * Version 1.8.0 (14-01 -2019 13:15 )
3
+ * Version 1.8.1 (07-05 -2019 23:39 )
4
4
* Licensed under MIT
5
5
* Copyright 2019 Hasan Aydoğdu <[email protected] >
6
6
*/
7
7
8
- 'use strict' ;
8
+ "use strict" ;
9
+
9
10
var MoveTo = function ( ) {
10
11
/**
11
- * Defaults
12
- * @type {object }
13
- */
12
+ * Defaults
13
+ * @type {object }
14
+ */
14
15
var defaults = {
15
16
tolerance : 0 ,
16
17
duration : 800 ,
17
18
easing : 'easeOutQuart' ,
18
19
container : window ,
19
- callback : function callback ( ) { } } ;
20
-
21
-
20
+ callback : function callback ( ) { }
21
+ } ;
22
22
/**
23
- * easeOutQuart Easing Function
24
- * @param {number } t - current time
25
- * @param {number } b - start value
26
- * @param {number } c - change in value
27
- * @param {number } d - duration
28
- * @return {number } - calculated value
29
- */
23
+ * easeOutQuart Easing Function
24
+ * @param {number } t - current time
25
+ * @param {number } b - start value
26
+ * @param {number } c - change in value
27
+ * @param {number } d - duration
28
+ * @return {number } - calculated value
29
+ */
30
+
30
31
function easeOutQuart ( t , b , c , d ) {
31
32
t /= d ;
32
33
t -- ;
33
34
return - c * ( t * t * t * t - 1 ) + b ;
34
35
}
35
-
36
36
/**
37
- * Merge two object
38
- *
39
- * @param {object } obj1
40
- * @param {object } obj2
41
- * @return {object } merged object
42
- */
37
+ * Merge two object
38
+ *
39
+ * @param {object } obj1
40
+ * @param {object } obj2
41
+ * @return {object } merged object
42
+ */
43
+
44
+
43
45
function mergeObject ( obj1 , obj2 ) {
44
46
var obj3 = { } ;
45
47
Object . keys ( obj1 ) . forEach ( function ( propertyName ) {
46
48
obj3 [ propertyName ] = obj1 [ propertyName ] ;
47
49
} ) ;
48
-
49
50
Object . keys ( obj2 ) . forEach ( function ( propertyName ) {
50
51
obj3 [ propertyName ] = obj2 [ propertyName ] ;
51
52
} ) ;
52
53
return obj3 ;
53
- } ;
54
+ }
54
55
56
+ ;
55
57
/**
56
- * Converts camel case to kebab case
57
- * @param {string } val the value to be converted
58
- * @return {string } the converted value
59
- */
58
+ * Converts camel case to kebab case
59
+ * @param {string } val the value to be converted
60
+ * @return {string } the converted value
61
+ */
62
+
60
63
function kebabCase ( val ) {
61
64
return val . replace ( / ( [ A - Z ] ) / g, function ( $1 ) {
62
65
return '-' + $1 . toLowerCase ( ) ;
63
66
} ) ;
64
- } ;
67
+ }
65
68
69
+ ;
66
70
/**
67
- * Count a number of item scrolled top
68
- * @param {Window|HTMLElement } container
69
- * @return {number }
70
- */
71
+ * Count a number of item scrolled top
72
+ * @param {Window|HTMLElement } container
73
+ * @return {number }
74
+ */
75
+
71
76
function countScrollTop ( container ) {
72
77
if ( container instanceof HTMLElement ) {
73
78
return container . scrollTop ;
74
79
}
80
+
75
81
return container . pageYOffset ;
76
- } ;
82
+ }
77
83
84
+ ;
78
85
/**
79
- * MoveTo Constructor
80
- * @param {object } options Options
81
- * @param {object } easeFunctions Custom ease functions
82
- */
83
- function MoveTo ( ) { var options = arguments . length > 0 && arguments [ 0 ] !== undefined ? arguments [ 0 ] : { } ; var easeFunctions = arguments . length > 1 && arguments [ 1 ] !== undefined ? arguments [ 1 ] : { } ;
86
+ * MoveTo Constructor
87
+ * @param {object } options Options
88
+ * @param {object } easeFunctions Custom ease functions
89
+ */
90
+
91
+ function MoveTo ( ) {
92
+ var options = arguments . length > 0 && arguments [ 0 ] !== undefined ? arguments [ 0 ] : { } ;
93
+ var easeFunctions = arguments . length > 1 && arguments [ 1 ] !== undefined ? arguments [ 1 ] : { } ;
84
94
this . options = mergeObject ( defaults , options ) ;
85
- this . easeFunctions = mergeObject ( { easeOutQuart : easeOutQuart } , easeFunctions ) ;
95
+ this . easeFunctions = mergeObject ( {
96
+ easeOutQuart : easeOutQuart
97
+ } , easeFunctions ) ;
86
98
}
87
-
88
99
/**
89
- * Register a dom element as trigger
90
- * @param {HTMLElement } dom Dom trigger element
91
- * @param {function } callback Callback function
92
- * @return {function|void } unregister function
93
- */
94
- MoveTo . prototype . registerTrigger = function ( dom , callback ) { var _this = this ;
100
+ * Register a dom element as trigger
101
+ * @param {HTMLElement } dom Dom trigger element
102
+ * @param {function } callback Callback function
103
+ * @return {function|void } unregister function
104
+ */
105
+
106
+
107
+ MoveTo . prototype . registerTrigger = function ( dom , callback ) {
108
+ var _this = this ;
109
+
95
110
if ( ! dom ) {
96
111
return ;
97
112
}
98
113
99
- var href = dom . getAttribute ( 'href' ) || dom . getAttribute ( 'data-target' ) ;
100
- // The element to be scrolled
101
- var target = href && href !== '#' ?
102
- document . getElementById ( href . substring ( 1 ) ) :
103
- document . body ;
114
+ var href = dom . getAttribute ( 'href' ) || dom . getAttribute ( 'data-target' ) ; // The element to be scrolled
115
+
116
+ var target = href && href !== '#' ? document . getElementById ( href . substring ( 1 ) ) : document . body ;
104
117
var options = mergeObject ( this . options , _getOptionsFromTriggerDom ( dom , this . options ) ) ;
105
118
106
119
if ( typeof callback === 'function' ) {
@@ -109,34 +122,39 @@ var MoveTo = function () {
109
122
110
123
var listener = function listener ( e ) {
111
124
e . preventDefault ( ) ;
125
+
112
126
_this . move ( target , options ) ;
113
127
} ;
114
128
115
129
dom . addEventListener ( 'click' , listener , false ) ;
116
-
117
- return function ( ) { return dom . removeEventListener ( 'click' , listener , false ) ; } ;
130
+ return function ( ) {
131
+ return dom . removeEventListener ( 'click' , listener , false ) ;
132
+ } ;
118
133
} ;
119
-
120
134
/**
121
- * Move
122
- * Scrolls to given element by using easeOutQuart function
123
- * @param {HTMLElement|number } target Target element to be scrolled or target position
124
- * @param {object } options Custom options
125
- */
126
- MoveTo . prototype . move = function ( target ) { var _this2 = this ; var options = arguments . length > 1 && arguments [ 1 ] !== undefined ? arguments [ 1 ] : { } ;
135
+ * Move
136
+ * Scrolls to given element by using easeOutQuart function
137
+ * @param {HTMLElement|number } target Target element to be scrolled or target position
138
+ * @param {object } options Custom options
139
+ */
140
+
141
+
142
+ MoveTo . prototype . move = function ( target ) {
143
+ var _this2 = this ;
144
+
145
+ var options = arguments . length > 1 && arguments [ 1 ] !== undefined ? arguments [ 1 ] : { } ;
146
+
127
147
if ( target !== 0 && ! target ) {
128
148
return ;
129
149
}
130
150
131
151
options = mergeObject ( this . options , options ) ;
132
-
133
152
var distance = typeof target === 'number' ? target : target . getBoundingClientRect ( ) . top ;
134
153
var from = countScrollTop ( options . container ) ;
135
154
var startTime = null ;
136
- var lastYOffset = void 0 ;
137
- distance -= options . tolerance ;
155
+ var lastYOffset ;
156
+ distance -= options . tolerance ; // rAF loop
138
157
139
- // rAF loop
140
158
var loop = function loop ( currentTime ) {
141
159
var currentYOffset = countScrollTop ( _this2 . options . container ) ;
142
160
@@ -150,13 +168,11 @@ var MoveTo = function () {
150
168
var timeElapsed = currentTime - startTime ;
151
169
152
170
if ( lastYOffset ) {
153
- if (
154
- distance > 0 && lastYOffset > currentYOffset ||
155
- distance < 0 && lastYOffset < currentYOffset )
156
- {
171
+ if ( distance > 0 && lastYOffset > currentYOffset || distance < 0 && lastYOffset < currentYOffset ) {
157
172
return options . callback ( target ) ;
158
173
}
159
174
}
175
+
160
176
lastYOffset = currentYOffset ;
161
177
162
178
var val = _this2 . easeFunctions [ options . easing ] ( timeElapsed , from , distance , options . duration ) ;
@@ -173,27 +189,29 @@ var MoveTo = function () {
173
189
174
190
window . requestAnimationFrame ( loop ) ;
175
191
} ;
176
-
177
192
/**
178
- * Adds custom ease function
179
- * @param {string } name Ease function name
180
- * @param {function } fn Ease function
181
- */
193
+ * Adds custom ease function
194
+ * @param {string } name Ease function name
195
+ * @param {function } fn Ease function
196
+ */
197
+
198
+
182
199
MoveTo . prototype . addEaseFunction = function ( name , fn ) {
183
200
this . easeFunctions [ name ] = fn ;
184
201
} ;
185
-
186
202
/**
187
- * Returns options which created from trigger dom element
188
- * @param {HTMLElement } dom Trigger dom element
189
- * @param {object } options The instance's options
190
- * @return {object } The options which created from trigger dom element
191
- */
203
+ * Returns options which created from trigger dom element
204
+ * @param {HTMLElement } dom Trigger dom element
205
+ * @param {object } options The instance's options
206
+ * @return {object } The options which created from trigger dom element
207
+ */
208
+
209
+
192
210
function _getOptionsFromTriggerDom ( dom , options ) {
193
211
var domOptions = { } ;
194
-
195
212
Object . keys ( options ) . forEach ( function ( key ) {
196
- var value = dom . getAttribute ( 'data-mt-' + kebabCase ( key ) ) ;
213
+ var value = dom . getAttribute ( "data-mt-" . concat ( kebabCase ( key ) ) ) ;
214
+
197
215
if ( value ) {
198
216
domOptions [ key ] = isNaN ( value ) ? value : parseInt ( value , 10 ) ;
199
217
}
0 commit comments