Skip to content

Commit dd74844

Browse files
Alex BuisAlex Buis
Alex Buis
authored and
Alex Buis
committed
leandrowd#148 Autoplay and stop on hover causes a warning.
- Added a mouse entered state so we know when not to activate the auto play feature.
1 parent c3a147e commit dd74844

File tree

1 file changed

+11
-4
lines changed

1 file changed

+11
-4
lines changed

src/components/Carousel.js

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,8 @@ class Carousel extends Component {
6868
this.state = {
6969
initialized: false,
7070
selectedItem: props.selectedItem,
71-
hasMount: false
71+
hasMount: false,
72+
isMouseEntered: false
7273
};
7374
}
7475

@@ -138,7 +139,7 @@ class Carousel extends Component {
138139

139140
if (this.props.stopOnHover && carouselWrapper) {
140141
carouselWrapper.addEventListener('mouseenter', this.stopOnHover);
141-
carouselWrapper.addEventListener('mouseleave', this.autoPlay);
142+
carouselWrapper.addEventListener('mouseleave', this.startOnLeave);
142143
}
143144
}
144145

@@ -148,7 +149,7 @@ class Carousel extends Component {
148149

149150
if (this.props.stopOnHover && carouselWrapper) {
150151
carouselWrapper.removeEventListener('mouseenter', this.stopOnHover);
151-
carouselWrapper.removeEventListener('mouseleave', this.autoPlay);
152+
carouselWrapper.removeEventListener('mouseleave', this.startOnLeave);
152153
}
153154
}
154155

@@ -203,9 +204,15 @@ class Carousel extends Component {
203204
}
204205

205206
stopOnHover = () => {
207+
this.setState({isMouseEntered: true});
206208
this.clearAutoPlay();
207209
}
208210

211+
startOnLeave = () => {
212+
this.setState({isMouseEntered: false});
213+
this.autoPlay();
214+
}
215+
209216
navigateWithKeyboard = (e) => {
210217
const { axis } = this.props;
211218
const isHorizontal = axis === 'horizontal';
@@ -367,7 +374,7 @@ class Carousel extends Component {
367374

368375
// don't reset auto play when stop on hover is enabled, doing so will trigger a call to auto play more than once
369376
// 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) {
371378
this.resetAutoPlay();
372379
}
373380
}

0 commit comments

Comments
 (0)