2

I came across the following code and was wondering what the IMG.active refers too. If someone could help, could you go line by line and write comments too?

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 );
});

I think this code is trying to pull images from underneath each image?

2

3 Answers 3

5

IMG.active refers to all image tags (<img />) with the active class, so:

<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 );
});
Sign up to request clarification or add additional context in comments.

Comments

4

The comments are added below. Note: $active.next() also selects non-image elements. This is probably not intended. If you want to select the next image element, use $active.nextAll("img:first") instead.

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 );
});

Comments

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

This is a ternary operator. Basically, if the next() function returns anything other than 0, the next image is assigned as whatever next() returns. Otherwise, it uses the first img element in the #slideshow element.

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

This adds the class of last-active to whichever element currently has a class of active.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.