Отредактировано
Думаю, я поняла, что здесь происходит.Проблема в том, что происходят конфликтующие события.
- Flexslider запускает анимацию, выполняя
setInterval
и сохраняя идентификатор интервала во внутренней переменной состояния (slider.animatedSlides
). - Flexslider делает паузу, когда вы наводите курсор на слайд.Это достигается путем очистки интервала анимации с помощью
clearInterval()
. - . Вы нажимаете ссылку
roi
на слайде, которая снова приостанавливается, путем очистки того, что сейчас является несуществующим интервалом. - На странице есть наложение, что означает, что вы делаете
mouseleave
на Flexslider, поэтому она запускает анимацию снова с setInterval()
и сохраняет идентификатор интервала. - Вы закрываете наложение,нажав кнопку закрытия или наложение, после чего вы наберете
resume()
, что также делает setInterval()
, перезаписывая сохраненный идентификатор интервала.Итак, теперь у вас есть две анимации, идущие , следовательно, удвоенная скорость. Плюс, при следующем вызове pause()
у него есть доступ только для очистки последнего установленного интервала, поскольку он перезаписал сохраненный идентификатор.Таким образом, вы больше не можете очищать интервал с шага 3. Итак, вы будете идти между анимацией с одним интервалом (медленно), когда вы mouseenter
, и двумя, когда вы mouseleave
(быстро).
Вместо того, чтобы делать паузу при щелчке, вы можете сделать паузу при #ovrly
наведении мыши и возобновить при щелчке, потому что выход мыши из Flexslider будет до наведения мыши при наложении.
$w('#slider-frame').flexslider({
animation: 'fade',
directionNav: false,
slideshowSpeed: 4000,
controlNav: true,
pauseOnHover: true,
manualControls: '#indicator-dots li',
start: function(slider){
$w('div#ovrly').mouseover(function(){
slider.pause();
});
$w('div#ovrly, a#close').click(function() {
slider.resume();
});
}
});
Но , вы можете столкнуться с подобными проблемами, в зависимости от того, находится ли мышь над ползунком или нет, когда наложение закрыто ... но я не уверен.В идеале, Flexslider не должен запускать новую анимацию, если она уже началась.Вы можете взломать это в flexslider.js:
//FlexSlider: Automatic Slideshow Pause
slider.pause = function() {
// Only pause if running
if(slider.animatedSlides == null) {
return;
}
clearInterval(slider.animatedSlides);
// Clear the interval ID
slider.animatedSlides = null;
if (slider.vars.pausePlay) {
slider.pausePlay.removeClass('pause').addClass('play').text(slider.vars.playText);
}
}
//FlexSlider: Automatic Slideshow Start/Resume
slider.resume = function() {
// Only resume if paused
if(slider.animatedSlides != null) {
return;
}
slider.animatedSlides = setInterval(slider.animateSlides, slider.vars.slideshowSpeed);
if (slider.vars.pausePlay) {
slider.pausePlay.removeClass('play').addClass('pause').text(slider.vars.pauseText);
}
}
Вы можете перегрузить эти функции в функции параметра start:
.
Это изменение решит быструю скорость и тот факт, что вы можетене пауза сноваУ вас все еще будет проблема с возобновлением работы слайдера, когда всплывающее окно появится.Это можно решить с помощью решения mouseover
, о котором я упоминал ранее.
Вот скрипка, показывающая решение mouseover
: http://jsfiddle.net/jtbowden/TWN5t/
Похоже, что вам может не понадобитьсявторой взлом, хотя это лучший код.