特定のバナーに焦点を合わせるために、下部にアイコンが付いた比較的小さな動的バナー回転スクリプトを作成しました。バナー上でmouseenterを発射するとショーが一時停止しますが、バナーからマウスアウトすると、特定のバナーの遅延が短くなることがあります。一度だけ発生したかどうかはわかりますが、バナーがローテーションで戻るたびに遅延がその短い時間に設定され、バナーのリスト内の他の1つの場所で短縮が発生することがよくあります。良い。これは、まだ決定されていない一連のアクションによって修正できる場合があります。私のロジックがどこかでループをキャッチしているのではないかと疑い始めているので、プロセスは分岐し、2つのループを実行します。これにより、showNextBanner関数の呼び出しが高速化されます。これを解決する方法がわかりません。私'
以下のコードの関連部分であると私が思うものを含めます。
var firstRun = true;
var play = true;
var current = 0;
var banners = $$( '.banner' );
banners.invoke( 'hide' );
var images = $$( '.image' );
var icons = $$( '.icon' );
//dynamically clones an initial icon to match the number of banners
initIcons();
banners.invoke( 'observe', 'mouseenter', function( field ) {
play = false;
});
banners.invoke( 'observe', 'mouseleave', function( field ) {
if( !play ) {
play = true;
showNextBanner().delay(3);
}
});
icons.invoke( 'observe', 'click', function( field ) {
play = false;
hideBanner( current );
showBanner( findObj( icons, field.findElement()));
});
showNextBanner().delay(3);
function hideBanner( which ) {
icons[ which ].src = blankIconSRC;
banners[ which ].hide();
}
function showBanner( which ) {
icons[ which ].src = selectedIconSRC;
banners[ which ].show();
current = which;
}
// loops the hiding and showing of icons
// (mouseenter sets play to false)
function showNextBanner() {
if( play ) {
if( !firstRun ) {
if( ++current == banners.length ) current = 0;
var previous = 0;
( current == 0 )? previous = banners.length - 1: previous = current - 1;
hideBanner( previous );
} else {
icons[0].src = selectedIconSRC;
firstRun = false;
}
showBanner( current );
showNextBanner.delay(3);
}
}
}());
結局のところ、クライアントはjQueryソリューションを望んでいるので、scriptaculousでは利用できないスライドイン効果を利用できます。ですから、そのすべての作業は無駄になります。幸いなことに、おそらくjCarouselを使用して、スタイルシートを微調整することができます。助けてくれてありがとう!