У меня есть проект React, где я пытаюсь построить карусель. У меня есть кнопка слева и справа и некоторые круги под моей карусели, чтобы выбрать слайды по отдельности.setTimeout() функция вызывается перед длительностью таймаута?
Чтобы изменить слайды в карусели, я использую комбинацию интервалов и времени ожидания для воспроизведения слайд-анимации, а также чтобы убедиться, что он работает в цикле, если пользователь не нажмет ничего:
changeImageTimer(index = 0) {
end = new Date().getMilliseconds();
console.info(end - start);
setTimeout(()=> {
this.addAnimation();
}, this.props.timeToChangeImage - this.props.timeOfTransitionAnimation);
animationTimeout = setTimeout(() => {
if (this.state.index >= this.props.data.length - 1) {
index = 0;
} else {
index = this.state.index + 1;
}
this.setState({index: index});
this.removeAnimation();
}, this.props.timeToChangeImage);
animationInterval = setInterval(() => {
setTimeout(()=> {
this.addAnimation();
}, this.props.timeToChangeImage - this.props.timeOfTransitionAnimation);
animationTimeout = setTimeout(() => {
if (this.state.index >= this.props.data.length - 1) {
index = 0;
} else {
index = this.state.index + 1;
}
this.setState({index: index});
this.removeAnimation();
}, this.props.timeToChangeImage);
}, this.props.timeToChangeImage);
}
кнопки для выбора отдельного слайда имеет эту функцию прикрепленную:
clickSelector(index) {
this.clearIntervalsAndTimers();
this.setState({index: index});
start = new Date().getMilliseconds();
timeout = setTimeout(this.changeImageTimer(index), this.props.timeToHoldPictureAfterClick);
}
Как вы можете видеть, я хочу слайд, чтобы остаться, а затем через некоторое время перезапустить автоматическую итерацию слайдов.
Однако код 'changeImageTimer' запускается сразу же после функции 'clickSelector' и не запускается после установленной задержки таймаута.
Почему у меня такое поведение?
'Как вы можете видеть' - ваш код очень трудно понять. Покажите нам объект 'this.props'. p.s 'this' в' setTimeout' могут быть очень обманчивыми. –