次または前をクリックすると、間隔と前のアニメーションを停止する必要があります。
clearInterval(run);
$('#slideshow img').stop();
次の画像のフェードインが完了したら、間隔を再開します。つまり:
$('#slideshow img:last').fadeIn(1000, function() { run=setInterval("switchSlide()", speed);})
編集:
スイッチボタンを1秒間に10回クリックした場合。約 20 のアニメーションが同時に実行されます。
編集:
画像が (自動またはその他の方法で) 切り替わっているときに [次へ] または [前へ] をクリックし、フェードが既に進行している場合、フェードは効果全体の時間間隔 (つまり 1 秒) でほぼフェードから完全にフェードに進みます。 . このとき、画像はほとんど白になります。
手動切り替えのフェードアウトをより速く設定した方がよい場合があります (300ms 以下など)。これにより、ユーザーエクスペリエンスも向上します。
編集:
ここにフィドルがあります
コードは次のとおりです。
var speed = 4000;
run = setTimeout("switchSlide()", speed);
$(document).ready(function() {
$('#caption').html($('#slideshow img:last').attr('title'));
$('#previous').click(switchBack);
$('#next').click(switchSlide);
});
function switchSlide() {
clearInterval(run);
$('#slideshow img').stop(true,true);
var jq=$('#slideshow img');
jq.first().css({'opacity':0}).appendTo('#slideshow').animate({'opacity':1}, 1000, function() {
run = setTimeout("switchSlide()", speed); } );
$('#caption').html(jq.last().attr('title'));
}
function switchBack() {
clearInterval(run);
$('#slideshow img').stop(true,true);
var jq=$('#slideshow img');
jq.last().animate({'opacity':0},1000, function() {
$(this).prependTo('#slideshow').css({'opacity':1}); run = setTimeout("switchSlide()", speed);});
$('#caption').html(jq.get(1).title);
}