0

フェードインおよびフェードアウトする画像のスライドショーを作成しようとしていますが、最初の画像だけが更新され続けます。どこが間違っているのか誰かにわかりますか?

HTML:

<div id="slideshow">
    <a href="#"><img src="http://placekitten.com/200/300" class="active"/></a>
    <a href="#"><img src="http://placekitten.com/300/400"/></a>
    <a href="#"><img src="http://placekitten.com/350/500"/></a>
    <a href="#"><img src="http://placekitten.com/370/600"/></a>
</div>

jQuery:

function slideSwitch() {
    var $active = $('#slideshow a IMG.active');

    if ($active.length == 0) $active = $('#slideshow a IMG:last');

    // use this to pull the images in the order they appear in the markup
    var $next = $active.next().length ? $active.next() : $('#slideshow a IMG:first');

    // uncomment the 3 lines below to pull the images in random order
    // var $sibs  = $active.siblings();
    // var rndNum = Math.floor(Math.random() * $sibs.length );
    // var $next  = $( $sibs[ rndNum ] );

    $active.addClass('last-active');

    $next.css({
        opacity: 0.0
    }).addClass('active').animate({
        opacity: 1.0
    }, 1000, function() {
        $active.removeClass('active last-active');
    });
};

$(function() {
    setInterval(slideSwitch, 5000);
});​

http://jsfiddle.net/eSrcr/1/

4

2 に答える 2

2

問題は、変数を使用next()しているためです。それぞれが独自のに含まれているため、要素$activeはありません。next()imga

代わりにこれを試してください:

var $next = $active.parent().next("a").find("img").length ? $active.parent().next("a").find("img") : $('#slideshow img:first');

フィドルの例

ただし、サイズがすべて異なるため、前の画像をフェードアウト/非表示にする必要があります。

于 2012-04-18T11:16:13.957 に答える
0

交換:

var $next = $active.next().length ? $active.next() : $('#slideshow a IMG:first');

と:

var $next =  $active.parent().next().find("img").length ? $active.parent().next().find("img")
    : $('#slideshow a IMG:first');
于 2012-04-18T11:19:14.163 に答える