JQuery 1.4.1 ломает мое слайд-шоу - PullRequest
0 голосов
/ 09 июня 2010

После игры с расширением слайд-шоу jquery я создал свой собственный, который лучше соответствовал моим целям (мне не нравилось, например, загружать все изображения в начале).Теперь, после обновления до jQuery 1.4.2 (я знаю, что я опаздываю), слайд-шоу прекрасно загружает первое изображение (от линии $('div#slideshow img#ssone').fadeIn(1500); вниз), но ничего больше не делает.У кого-нибудь есть идеи, какая конструкция jquery убивает мой скрипт?Текущая страница находится по адресу lplonline.org , которая в настоящее время использует 1.3.2.Заранее спасибо.

Array.prototype.random = function( r ) {
var i = 0, l = this.length;
 if( !r ) { r = this.length; }
 else if( r > 0 ) { r = r % l; }
 else { i = r; r = l + r % l; }
 return this[ Math.floor( r * Math.random() - i ) ];
};

jQuery(function($){
    var imgArr = new Array();
    imgArr[1] = "wp-content/uploads/rotator/Brbrshop4-hrmnywkshp72006.jpg";
    imgArr[2] = "wp-content/uploads/rotator/IMGA0125.JPG";
    //etc, etc, about 30 of these are created dynamically from a db

var randImgs = function () {

    var randImg = imgArr.random();
        var img1 = $('div#slideshow img#ssone');
        var img2 = $('div#slideshow img#sstwo');

        if(img1.is(':visible') ) { 
            img2.fadeIn(1500);
            img1.fadeOut(1500,function() {
                img1.attr({src : randImg});
            });


        } else {
            img1.fadeIn(1500);
            img2.fadeOut(1500,function() {
                img2.attr({src : randImg});
            });

        }
}

setInterval(randImgs,9000); //  9 SECONDS

$('div#slideshow img#ssone').fadeIn(1500);

});
</script>

<div id="slideshow">
<img id="ssone" style="display:none;" src="wp-content/uploads/rotator/quote-investments.png" alt="" />
<img id="sstwo" style="display:none;" src="wp-content/uploads/rotator/quote-drugs.png" alt="" />
</div>

Ответы [ 2 ]

2 голосов
/ 09 июня 2010

Это потому, что ваша функция ограничена - присвойте ей переменную, подобную этой:

var randImgs = function() {
  // do stuff
}

теперь ваш setInterval имеет ссылку на правильную функцию.

В качестве краткого примечания: слайд-шоу div # (или любое сочетание тегов / идентификаторов) неэффективно.Идентификатор предназначен ТОЛЬКО для этого элемента, поэтому говорить «смотрите на все элементы div и найдите идентификатор ..» не нужно.

Однако используйте этот подход с такими классами, как div.myClassName - сказать 'посмотрите на все элементы div и найдите класс .. '.

То же самое относится и к parent / child - #parent #child - это дополнительная работа - #child может быть найден сам по себе.#parent div.myClassName, однако, было бы разумно, так как это помогает сузить поиск div с именем класса myClassname.

0 голосов
/ 10 июня 2010

Aha!Я унаследовал этот сайт, и кажется, что первоначальный создатель сайта назвал в шапке около 3 или 4 разных библиотек js (scriptalicious, prototype ...).Ни один из них фактически не использовался все же.Я убрал все это, и теперь он прекрасно работает, поэтому проблема была как-то во взаимодействии между jQuery и одной из других библиотек.Спасибо, Дэн Хеберден, за ваше время и советы в любом случае!

...