@@ -39,13 +39,21 @@ export type AutoScrollOptionsType = AutoScrollType['options']
39
39
function AutoScroll ( userOptions : AutoScrollOptionsType = { } ) : AutoScrollType {
40
40
let options : OptionsType
41
41
let emblaApi : EmblaCarouselType
42
- let destroyed : boolean
42
+ let isSsr = false
43
+ let destroyed = false
44
+
43
45
let startDelay : number
44
46
let timerId = 0
45
- let autoScrollActive = false
47
+ let autoScrollRunning = false
46
48
let mouseIsOver = false
47
49
let defaultScrollBehaviour : ScrollBodyType
48
50
51
+ function pluginIsActive ( ) : boolean {
52
+ if ( isSsr ) return false
53
+ if ( destroyed ) return false
54
+ return options . active
55
+ }
56
+
49
57
function init (
50
58
emblaApiInstance : EmblaCarouselType ,
51
59
optionsHandler : OptionsHandlerType
@@ -55,8 +63,12 @@ function AutoScroll(userOptions: AutoScrollOptionsType = {}): AutoScrollType {
55
63
const { mergeOptions, optionsAtMedia } = optionsHandler
56
64
const optionsBase = mergeOptions ( defaultOptions , AutoScroll . globalOptions )
57
65
const allOptions = mergeOptions ( optionsBase , userOptions )
66
+
67
+ destroyed = false
58
68
options = optionsAtMedia ( allOptions )
69
+ isSsr = emblaApi . internalEngine ( ) . isSsr
59
70
71
+ if ( ! pluginIsActive ( ) ) return
60
72
if ( emblaApi . snapList ( ) . length <= 1 ) return
61
73
62
74
startDelay = options . startDelay
@@ -95,6 +107,8 @@ function AutoScroll(userOptions: AutoScrollOptionsType = {}): AutoScrollType {
95
107
}
96
108
97
109
function destroy ( ) : void {
110
+ if ( ! pluginIsActive ( ) ) return
111
+
98
112
emblaApi
99
113
. off ( 'pointerdown' , onPointerDown )
100
114
. off ( 'pointerup' , onPointerUp )
@@ -103,38 +117,42 @@ function AutoScroll(userOptions: AutoScrollOptionsType = {}): AutoScrollType {
103
117
104
118
stopAutoScroll ( )
105
119
destroyed = true
106
- autoScrollActive = false
120
+ autoScrollRunning = false
107
121
}
108
122
109
123
function startAutoScroll ( ) : void {
110
- if ( destroyed ) return
111
- if ( autoScrollActive ) return
112
- emblaApi . emit ( 'autoscroll:play' , null )
124
+ if ( ! pluginIsActive ( ) ) return
113
125
114
126
const engine = emblaApi . internalEngine ( )
115
- const { ownerWindow } = engine
127
+ const { ownerWindow } = engine . nodeHandler
128
+
129
+ if ( ! ownerWindow ) return
130
+ if ( autoScrollRunning ) return
131
+ emblaApi . emit ( 'autoscroll:play' , null )
116
132
117
133
timerId = ownerWindow . setTimeout ( ( ) => {
118
134
engine . scrollBody = createAutoScrollBehaviour ( engine )
119
135
engine . animation . start ( )
120
136
} , startDelay )
121
137
122
- autoScrollActive = true
138
+ autoScrollRunning = true
123
139
}
124
140
125
141
function stopAutoScroll ( ) : void {
126
- if ( destroyed ) return
127
- if ( ! autoScrollActive ) return
128
- emblaApi . emit ( 'autoscroll:stop' , null )
142
+ if ( ! pluginIsActive ( ) ) return
129
143
130
144
const engine = emblaApi . internalEngine ( )
131
- const { ownerWindow } = engine
145
+ const { ownerWindow } = engine . nodeHandler
146
+
147
+ if ( ! ownerWindow ) return
148
+ if ( ! autoScrollRunning ) return
149
+ emblaApi . emit ( 'autoscroll:stop' , null )
132
150
133
151
engine . scrollBody = defaultScrollBehaviour
134
152
ownerWindow . clearTimeout ( timerId )
135
153
timerId = 0
136
154
137
- autoScrollActive = false
155
+ autoScrollRunning = false
138
156
}
139
157
140
158
function createAutoScrollBehaviour ( engine : EngineType ) : ScrollBodyType {
@@ -245,18 +263,18 @@ function AutoScroll(userOptions: AutoScrollOptionsType = {}): AutoScrollType {
245
263
}
246
264
247
265
function stop ( ) : void {
248
- if ( autoScrollActive ) stopAutoScroll ( )
266
+ if ( autoScrollRunning ) stopAutoScroll ( )
249
267
}
250
268
251
269
function reset ( ) : void {
252
- if ( autoScrollActive ) {
270
+ if ( autoScrollRunning ) {
253
271
stopAutoScroll ( )
254
272
startAutoScrollOnSettle ( )
255
273
}
256
274
}
257
275
258
276
function isPlaying ( ) : boolean {
259
- return autoScrollActive
277
+ return autoScrollRunning
260
278
}
261
279
262
280
const self : AutoScrollType = {
0 commit comments