了解JavaScript / jQuery代码段

时间:2011-11-15 19:57:54

标签: javascript jquery

我遇到了以下代码,并想知道IMG.active也引用了什么。如果有人可以提供帮助,你可以一行一行地写评论吗?

function slideSwitch() {
    //what does this and the next line do?
    var $active = $('#slideshow IMG.active');
    if ( $active.length == 0 ) $active = $('#slideshow IMG:last');

    //what is going on here?
    var $next =  $active.next().length ? $active.next()
        : $('#slideshow 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 ] );


    //can someone elaborate on these lines?
    $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 );
});

我认为此代码试图从每张图片下方拉出图片?

3 个答案:

答案 0 :(得分:5)

IMG.active指的是<img />类的所有图片代码(active),所以:

<img src="..." class="active" />

-

function slideSwitch() {
    var $active = $('#slideshow IMG.active');//get all `img` elements with the `active` class within the #slideshow element
    if ( $active.length == 0 ) $active = $('#slideshow IMG:last');//if no elements were selected on the last line, then set the active slide (`$active`) to the last image in the slideshow

    var $next =  $active.next().length ? $active.next()
        : $('#slideshow IMG:first');//check to see if there is another image after the current $active element, if not then set the $next variable to the first image in the slideshow

    // 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');//add the `last-active` class to the current $active element

    $next.css({opacity: 0.0})
        .addClass('active')
        .animate({opacity: 1.0}, 1000, function() {
            $active.removeClass('active last-active');
        });//these lines set the $next element to invisible, adds the `active` class, then animates its opacity to show the image, after the animation is complete it removes the `active` and `last-active` classes from the $next element.
}

//this runs the function above on an interval of 5sec when the `document.ready` event fires
$(function() {
    setInterval( "slideSwitch()", 5000 );
});

答案 1 :(得分:4)

评论在下面添加。注意:$active.next()也会选择非图像元素。这可能不是故意的。如果要选择下一个图像元素,请改用$active.nextAll("img:first")

function slideSwitch() {
    // Selects all <img class="active"> elements which are a child of 
    // an element with id="slideshow"
    var $active = $('#slideshow IMG.active');

    // If the collection $active contains no elements, select the last
    // <img> element which is a child of <.. id=slideshow>
    if ( $active.length == 0 ) $active = $('#slideshow IMG:last');

    // If there's another element after <img>, select it. Otherwise, select
    // first <img>
    var $next =  $active.next().length ? $active.next()
        : $('#slideshow IMG:first');

    // Add `class=last-active` to the selected element.
    $active.addClass('last-active');

    $next.css({opacity: 0.0})   // Set opacity 0
        .addClass('active')     // Set class `active`
        .animate({opacity: 1.0}, 1000, function() { //Animate
            $active.removeClass('active last-active');
        });
}

// Create an interval when the document is ready
$(function() {
    setInterval( "slideSwitch()", 5000 );
});

答案 2 :(得分:1)

//what is going on here?
var $next =  $active.next().length ? $active.next()
    : $('#slideshow IMG:first');

这是一个三元运营商。基本上,如果next()函数返回0以外的任何值,则下一个图像将被指定为next()返回的任何内容。否则,它使用img元素中的第一个#slideshow元素。

//can someone elaborate on these lines?
$active.addClass('last-active');

这会将last-active的类添加到当前具有active类的任何元素。