Very Simple Image Slider/Slideshow with left and right button. No autoplay

前端 未结 4 1698
说谎
说谎 2020-12-31 18:05

I\'m trying to make a very, very simple image slider/slideshow with no autoplay please. I only want to go to next or prev image on click. Having some issues as you can read

4条回答
  •  无人及你
    2020-12-31 18:16

    After reading your comment on my previous answer I thought I might put this as a separate answer.

    Although I appreciate your approach of trying to do it manually to get a better grasp on jQuery I do still emphasise the merit in using existing frameworks.

    That said, here is a solution. I've modified some of your css and and HTML just to make it easier for me to work with

    WORKING JS FIDDLE - http://jsfiddle.net/HsEne/15/

    This is the jQuery

    $(document).ready(function(){
    $('.sp').first().addClass('active');
    $('.sp').hide();    
    $('.active').show();
    
        $('#button-next').click(function(){
    
        $('.active').removeClass('active').addClass('oldActive');    
                       if ( $('.oldActive').is(':last-child')) {
            $('.sp').first().addClass('active');
            }
            else{
            $('.oldActive').next().addClass('active');
            }
        $('.oldActive').removeClass('oldActive');
        $('.sp').fadeOut();
        $('.active').fadeIn();
    
    
        });
    
           $('#button-previous').click(function(){
        $('.active').removeClass('active').addClass('oldActive');    
               if ( $('.oldActive').is(':first-child')) {
            $('.sp').last().addClass('active');
            }
               else{
        $('.oldActive').prev().addClass('active');
               }
        $('.oldActive').removeClass('oldActive');
        $('.sp').fadeOut();
        $('.active').fadeIn();
        });
    
    
    
    
    });
    

    So now the explanation.
    Stage 1
    1) Load the script on document ready.

    2) Grab the first slide and add a class 'active' to it so we know which slide we are dealing with.

    3) Hide all slides and show active slide. So now slide #1 is display block and all the rest are display:none;

    Stage 2 Working with the button-next click event.
    1) Remove the current active class from the slide that will be disappearing and give it the class oldActive so we know that it is on it's way out.

    2) Next is an if statement to check if we are at the end of the slideshow and need to return to the start again. It checks if oldActive (i.e. the outgoing slide) is the last child. If it is, then go back to the first child and make it 'active'. If it's not the last child, then just grab the next element (using .next() ) and give it class active.

    3) We remove the class oldActive because it's no longer needed.

    4) fadeOut all of the slides

    5) fade In the active slides

    Step 3

    Same as in step two but using some reverse logic for traversing through the elements backwards.

    It's important to note there are thousands of ways you can achieve this. This is merely my take on the situation.

提交回复
热议问题