Advance slideshow manually with jquery

冷暖自知 提交于 2019-12-08 10:08:40

问题


please be easy - first post!

Looking to modify the following script: http://jonraasch.com/blog/a-simple-jquery-slideshow

Love it's simplicity, trying to find a way to add an advance function

Preferably on the img or div - on click or from a link.

Any suggestions?

Appreciate the help

edit, below is the script and here is a link to a working version:

link to a live testing page

script:

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

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

// use this to pull the images in the order they appear in the markup
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 ] );


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

});

style:

#slideshow {
position:relative;
height:350px;
}

#slideshow IMG {
position:absolute;
top:0;
left:0;
z-index:8;
opacity:0.0;
}

#slideshow IMG.active {
z-index:10;
opacity:1.0;
}

#slideshow IMG.last-active {
z-index:9;
}

html:

<div id="slideshow">
        <img src="image01.jpg" width="262" height="496" border="0" class="active" />
        <img src="image02.jpg" width="262" height="496" border="0" />
        </div>

回答1:


We could do this by changing the interval to a timeout, which gives us an id which we can reset at will. Then we can use a click even to reset this interval and advance manually, which in turn will start up the interval again.

Using the simplest example on jonraasch.com:

window.slideInterval = null;

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

    $next.addClass('active');

    $active.removeClass('active');

    window.slideInterval = setTimeout('slideSwitch()', 5000 )
}

jQuery(function() {
    window.slideInterval = setTimeout('slideSwitch()', 5000 );
});

$(el).click(function(){
    // reset interval
    clearTimeout(window.slideInterval);

    // trigger next slide manually
    slideSwitch();
});

Edit

Over the weekend I had the time to put some more attention to this, and I read up on the best practices in making a jQuery plugin. Code is slightly documented, but all in all fairly standard and not very complex, though has a fair bit of juggling with variables :)

If you use anything you should use this.

http://jsfiddle.net/sg3s/RFJMy/214/

btw, you can just delete the prev and rand functions if you don't want to use them, start, stop, init and transit to make the whole work.




回答2:


That particular sample already has an advance function built in: slideSwitch. This function is called in a setInterval loop to advance the slide show. All you need to do is hook up that method to your button click and you should be good to go.

HTML:

<div id="advanceShow">Click to Advance</div>

JavaScript

$(document).ready(function() {
  $('#advanceShow').click(function() {
    slideShow();
  });
});


来源:https://stackoverflow.com/questions/7615850/advance-slideshow-manually-with-jquery

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!