@@ -68,7 +68,8 @@ class Carousel extends Component {
68
68
this . state = {
69
69
initialized : false ,
70
70
selectedItem : props . selectedItem ,
71
- hasMount : false
71
+ hasMount : false ,
72
+ isMouseEntered : false
72
73
} ;
73
74
}
74
75
@@ -138,7 +139,7 @@ class Carousel extends Component {
138
139
139
140
if ( this . props . stopOnHover && carouselWrapper ) {
140
141
carouselWrapper . addEventListener ( 'mouseenter' , this . stopOnHover ) ;
141
- carouselWrapper . addEventListener ( 'mouseleave' , this . autoPlay ) ;
142
+ carouselWrapper . addEventListener ( 'mouseleave' , this . startOnLeave ) ;
142
143
}
143
144
}
144
145
@@ -148,7 +149,7 @@ class Carousel extends Component {
148
149
149
150
if ( this . props . stopOnHover && carouselWrapper ) {
150
151
carouselWrapper . removeEventListener ( 'mouseenter' , this . stopOnHover ) ;
151
- carouselWrapper . removeEventListener ( 'mouseleave' , this . autoPlay ) ;
152
+ carouselWrapper . removeEventListener ( 'mouseleave' , this . startOnLeave ) ;
152
153
}
153
154
}
154
155
@@ -203,9 +204,15 @@ class Carousel extends Component {
203
204
}
204
205
205
206
stopOnHover = ( ) => {
207
+ this . setState ( { isMouseEntered : true } ) ;
206
208
this . clearAutoPlay ( ) ;
207
209
}
208
210
211
+ startOnLeave = ( ) => {
212
+ this . setState ( { isMouseEntered : false } ) ;
213
+ this . autoPlay ( ) ;
214
+ }
215
+
209
216
navigateWithKeyboard = ( e ) => {
210
217
const { axis } = this . props ;
211
218
const isHorizontal = axis === 'horizontal' ;
@@ -367,7 +374,7 @@ class Carousel extends Component {
367
374
368
375
// don't reset auto play when stop on hover is enabled, doing so will trigger a call to auto play more than once
369
376
// and will result in the interval function not being cleared correctly.
370
- if ( ! this . props . stopOnHover && this . props . autoPlay ) {
377
+ if ( this . props . autoPlay && this . state . isMouseEntered === false ) {
371
378
this . resetAutoPlay ( ) ;
372
379
}
373
380
}
0 commit comments