編集済み
ここで何が起こっているのか理解できたと思います。問題は、競合するイベントが進行していることです。
- Flexslider は
setInterval
、インターバル ID を実行して内部状態変数 ( slider.animatedSlides
) に格納することにより、アニメーションを開始します。
- スライドの上にカーソルを合わせると、Flexslider が一時停止します。でアニメーション間隔をクリアすることでこれを行い
clearInterval()
ます。
- スライド内のリンクをクリックする
roi
と、スライドは再び一時停止し、現在存在しない間隔がクリアされます。
- ページにはオーバーレイがあります。つまり
mouseleave
、Flexslider で a を実行すると、アニメーションが再び開始されsetInterval()
、間隔 ID が保存されます。
- 閉じるボタンまたはオーバーレイをクリックしてオーバーレイを閉じます。その時点で を呼び出します
resume()
。これは も実行しsetInterval()
、保存されている間隔 ID を上書きします。これで2 つのアニメーションが実行されるので、速度が 2 倍になります。 さらに、次に を呼び出すとpause()
、保存された ID が上書きされるため、最後に設定した間隔をクリアするためだけにアクセスできます。そのため、ステップ 3 から間隔をクリアすることはできなくなります。そのため、1 つの間隔のアニメーション (遅い)mouseenter
と 2つの間隔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/
より良いコードですが、2 番目のハックは必要ないように見えます。