1
1
import { cubicInOut } from 'svelte/easing' ;
2
2
import { loop , noop , now } from 'svelte/internal' ;
3
3
import { ScrollToElementOptions } from '../global.interface' ;
4
- import { $ , cumulativeOffset , extend , scrollLeft , scrollTop } from '../helpers/helper.js ' ;
4
+ import { $ , cumulativeOffset , extend , scrollLeft , scrollTop } from '../helpers/helper' ;
5
5
6
6
const defaultOptions : ScrollToElementOptions = {
7
7
container : 'body' ,
@@ -17,20 +17,7 @@ const defaultOptions: ScrollToElementOptions = {
17
17
} ;
18
18
19
19
const scrollToInternal = ( options : ScrollToElementOptions ) : ( ( ) => void ) => {
20
- const {
21
- duration,
22
- delay,
23
- easing,
24
- x = 0 ,
25
- y = 0 ,
26
- scrollX,
27
- scrollY,
28
- onStart,
29
- onDone,
30
- container,
31
- onAborting,
32
- element
33
- } = options ;
20
+ const { duration, delay, easing, x = 0 , y = 0 , scrollX, scrollY, onStart, onDone, container, onAborting, element } = options ;
34
21
35
22
let { offset } = options ;
36
23
@@ -55,9 +42,9 @@ const scrollToInternal = (options: ScrollToElementOptions): (() => void) => {
55
42
const startTime = now ( ) + delay ;
56
43
const endTime = startTime + duration ;
57
44
58
- function scrollToTopLeft ( element : HTMLElement , top : number , left : number ) : void {
59
- if ( scrollX ) scrollLeft ( element , left ) ;
60
- if ( scrollY ) scrollTop ( element , top ) ;
45
+ function scrollToTopLeft ( el : HTMLElement | string , top : number , left : number ) : void {
46
+ if ( scrollX ) scrollLeft ( el , left ) ;
47
+ if ( scrollY ) scrollTop ( el , top ) ;
61
48
}
62
49
63
50
function start ( delayStart : number | boolean ) : void {
@@ -106,85 +93,80 @@ const scrollToInternal = (options: ScrollToElementOptions): (() => void) => {
106
93
return stop ;
107
94
} ;
108
95
109
- const proceedOptions = ( options : ScrollToElementOptions ) : ScrollToElementOptions => {
110
- const opts = extend ( { } , defaultOptions , options ) ;
96
+ const proceedOptions = ( options : ScrollToElementOptions | string ) : ScrollToElementOptions => {
97
+ const opts = extend ( { } , defaultOptions , options as ScrollToElementOptions ) ;
111
98
opts . container = $ ( opts . container ) ;
112
99
opts . element = $ ( opts . element ) ;
113
100
return opts ;
114
101
} ;
115
102
116
103
const scrollContainerHeight = ( containerElement : HTMLElement | Document ) : number => {
117
104
if ( containerElement && containerElement !== document && containerElement !== document . body ) {
118
- return (
119
- ( containerElement as HTMLElement ) . scrollHeight -
120
- ( containerElement as HTMLElement ) . offsetHeight
121
- ) ;
105
+ return ( containerElement as HTMLElement ) . scrollHeight - ( containerElement as HTMLElement ) . offsetHeight ;
122
106
}
123
107
const { body } = document ;
124
108
const html = document . documentElement ;
125
109
126
- return Math . max (
127
- body . scrollHeight ,
128
- body . offsetHeight ,
129
- html . clientHeight ,
130
- html . scrollHeight ,
131
- html . offsetHeight
132
- ) ;
110
+ return Math . max ( body . scrollHeight , body . offsetHeight , html . clientHeight , html . scrollHeight , html . offsetHeight ) ;
133
111
} ;
134
112
135
113
const setGlobalOptions = ( options : ScrollToElementOptions ) : void => {
136
114
extend ( defaultOptions , options || { } ) ;
137
115
} ;
138
116
139
- const scrollTo = ( options : ScrollToElementOptions ) : ( ( ) => void ) =>
140
- scrollToInternal ( proceedOptions ( options ) ) ;
117
+ const scrollTo = ( options : ScrollToElementOptions ) : ( ( ) => void ) => scrollToInternal ( proceedOptions ( options ) ) ;
141
118
142
119
const scrollToBottom = ( options ?: ScrollToElementOptions ) : ( ( ) => void ) => {
143
- options = proceedOptions ( options ) ;
120
+ const opts = proceedOptions ( options ) ;
144
121
145
122
return scrollToInternal (
146
- extend ( options , {
123
+ extend ( opts , {
147
124
element : null ,
148
125
y : scrollContainerHeight ( options . container )
149
126
} )
150
127
) ;
151
128
} ;
152
129
153
130
const scrollToTop = ( options ?: ScrollToElementOptions ) : ( ( ) => void ) => {
154
- options = proceedOptions ( options ) ;
131
+ const opts = proceedOptions ( options ) ;
155
132
156
133
return scrollToInternal (
157
- extend ( options , {
134
+ extend ( opts , {
158
135
element : null ,
159
136
y : 0
160
137
} )
161
138
) ;
162
139
} ;
163
140
164
- const makeScrollToAction =
165
- ( scrollToFunc : Function ) => ( node : Node , options : ScrollToElementOptions ) => {
166
- let current = options ;
167
- const handle : EventListenerOrEventListenerObject = ( e : Event ) => {
168
- e . preventDefault ( ) ;
169
- scrollToFunc ( typeof current === 'string' ? { element : current } : current ) ;
170
- } ;
171
- node . addEventListener ( 'click' , handle ) ;
172
- node . addEventListener ( 'touchstart' , handle ) ;
173
- return {
174
- update ( options : ScrollToElementOptions ) : void {
175
- current = options ;
176
- } ,
177
- destroy ( ) : void {
178
- node . removeEventListener ( 'click' , handle ) ;
179
- node . removeEventListener ( 'touchstart' , handle ) ;
180
- }
181
- } ;
141
+ const makeScrollToAction = ( scrollToFunc : Function ) => ( node : Node , options : ScrollToElementOptions ) => {
142
+ let current = options ;
143
+ // eslint-disable-next-line no-undef
144
+ const handle : EventListenerOrEventListenerObject = ( e : Event ) => {
145
+ e . preventDefault ( ) ;
146
+ scrollToFunc ( typeof current === 'string' ? { element : current } : current ) ;
147
+ } ;
148
+ node . addEventListener ( 'click' , handle ) ;
149
+ node . addEventListener ( 'touchstart' , handle ) ;
150
+ return {
151
+ update ( opts : ScrollToElementOptions ) : void {
152
+ current = opts ;
153
+ } ,
154
+ destroy ( ) : void {
155
+ node . removeEventListener ( 'click' , handle ) ;
156
+ node . removeEventListener ( 'touchstart' , handle ) ;
157
+ }
182
158
} ;
159
+ } ;
183
160
184
161
// Actions
185
162
export const scrollto = makeScrollToAction ( scrollTo ) ;
186
163
export const scrolltotop = makeScrollToAction ( scrollToTop ) ;
187
164
export const scrolltobottom = makeScrollToAction ( scrollToBottom ) ;
188
165
189
166
// Methods
190
- export const animateScroll = { scrollTo, scrollToTop, scrollToBottom, setGlobalOptions } ;
167
+ export const animateScroll = {
168
+ scrollTo,
169
+ scrollToTop,
170
+ scrollToBottom,
171
+ setGlobalOptions
172
+ } ;
0 commit comments