Създадох сравнително малък динамичен скрипт за ротация на банери с икони в долната част за поставяне на конкретен банер на фокус. Задействането на mouseenter върху банер спира шоуто на пауза, но понякога, когато изляза с мишката от моя банер, забавянето за определени банери се съкращава. Дори бих разбрал, ако се е случило само веднъж, но забавянето след това се задава за този по-кратък период от време всеки път, когато банерът се връща при ротацията, и често скъсяването се случва на едно друго място в списъка с банери, т.к. добре. Понякога това може да бъде коригирано чрез все още неопределен набор от действия. Започвам да подозирам, че моята логика хваща цикъла някъде по средата и така процесът се разклонява, изпълнява два цикъла, които изглежда ускоряват извикването на функцията 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 и да променя стиловата таблица. Благодаря за помощта!
showNextBanner
не връща нищо, така чеshowNextBanner().delay(3)
вероятно причинява грешка. Браузърите са толерантни към такива неща, така че може просто да продължи, но не бих искал да има това излишно забавяне там. - person clockworkgeek   schedule 11.09.2011