如何在简单的jquery幻灯片代码中添加prev和next按钮

时间:2013-07-22 11:48:25

标签: javascript jquery html slideshow

我在此博客下面的幻灯片中找到了这个简单的jQuery代码。

http://leavesofcode.net/2012/08/17/simple-slideshow/

它完全适用于我正在进行的项目,在那里我可以用jQuery load()函数调用图像,幻灯片显示仍然有效。虽然我想在相同的代码中实现上一个和下一个按钮,如果可能的话。任何帮助将非常感激。请帮助谢谢。

以下是代码:http://jsfiddle.net/mblase75/CRUJJ/

<script>
$(document).ready(function() {
    setInterval(function() {
        var $curr = $('.slideshow img:visible'), // should be the first image
            $next = ($curr.next().length) ? $curr.next() : $('.slideshow img').first();
            // if there isn't a next image, loop back to the first image
        $next.css('z-index',2).fadeIn('slow', function() { // move it to the top
            $curr.hide().css('z-index',0); // move this to the bottom
            $next.css('z-index',1);        // now move it to the middle
        });
    }, 6000); // milliseconds
});
</script>

<div class="slideshow">
    <img src="first-image.jpg" width="500" height="100" alt="first image">
    <img src="second-image.jpg" width="500" height="100" alt="second image">
    <img src="third-image.jpg" width="500" height="100" alt="third image">
    <img src="fourth-image.jpg" width="500" height="100" alt="fourth image">
</div>

<style>
.slideshow {
    position: relative; /* necessary to absolutely position the images inside */
    width: 500px; /* same as the images inside */
    height: 100px;
}
.slideshow img {
    position: absolute;
    display: none;
}
.slideshow img:first-child {
    display: block; /* overrides the previous style */
}
</style>

6 个答案:

答案 0 :(得分:6)

您需要为getNext和getPrev创建函数,并将这些函数作为事件处理程序附加到要在幻灯片中向前和向后移动的元素。

我创建了一个公共转换函数,它由getNext和getPrev函数共享,以便可以共享转换代码。

在下面的示例中,单击下一个或上一个按钮将暂停幻灯片放映,但可以轻松更改它以继续自动转换。

<强> Working Demo

var interval = undefined;
$(document).ready(function () {
    interval = setInterval(getNext, 2000); // milliseconds
    $('#next').on('click', getNext);
    $('#prev').on('click', getPrev);
});

function getNext() {
    var $curr = $('.slideshow img:visible'),
        $next = ($curr.next().length) ? $curr.next() : $('.slideshow img').first();

    transition($curr, $next);
}

function getPrev() {
    var $curr = $('.slideshow img:visible'),
        $next = ($curr.prev().length) ? $curr.prev() : $('.slideshow img').last();
    transition($curr, $next);
}

function transition($curr, $next) {
    clearInterval(interval);

    $next.css('z-index', 2).fadeIn('slow', function () {
        $curr.hide().css('z-index', 0);
        $next.css('z-index', 1);
    });
}

答案 1 :(得分:1)

在下一个按钮的点击事件中使用您的代码。 像这样:

    $("#button_id").click(function(){
all your lines in **setInterval**
});

对于上一个按钮,请使用 .prev 而不是 .next

答案 2 :(得分:1)

responsive slideshow free jquery script

我最近在一个项目中使用了上面的脚本,它具有响应性,轻量级,可以完全自定义,有或没有按钮。我的推荐..

答案 3 :(得分:1)

在HTML中添加几个img,如下所示:

<div class="slideshow">
    <img src="first-image.jpg" width="500" height="100" alt="first image">
    <img src="second-image.jpg" width="500" height="100" alt="second image">
    <img src="third-image.jpg" width="500" height="100" alt="third image">
    <img src="fourth-image.jpg" width="500" height="100" alt="fourth image">
</div>
<img src="prev.jpg" width="50" height="50" id="imgPrev">
<img src="next.jpg" width="50" height="50" id="imgNext">

并改变你的javascript:

    $(document).ready(function() {

        $("#imgNext").click(function() {
             var $curr = $('.slideshow img:visible'),
                 $next = ($curr.next().length) ? $curr.next() : $('.slideshow img').first();
                $next.css('z-index',2).fadeIn('slow', function() {
                $curr.hide().css('z-index',0);
                $next.css('z-index',1);
            });
    });

        $("#imgPrev").click(function() {
             var $curr = $('.slideshow img:visible'),
                 $prev = ($curr.prev().length) ? $curr.prev() : $('.slideshow img').last();
                $prev.css('z-index',2).fadeIn('slow', function() {
                $curr.hide().css('z-index',0);
                $prev.css('z-index',1);
            });
        });

        set

Interval(function() {
        var $curr = $('.slideshow img:visible'), 
            $next = ($curr.next().length) ? $curr.next() : $('.slideshow img').first();
        $next.css('z-index',2).fadeIn('slow', function() {
            $curr.hide().css('z-index',0);
            $next.css('z-index',1);
        });
    }, 6000); // milliseconds
});

我在fiddler上使用你的代码尝试了它并且它有效:)

答案 4 :(得分:0)

尝试

 $('.next').click(function(){ 
     $('#slideshow img:first').fadeOut(1000).next().fadeIn(1000).end().appendTo('#slideshow');
   })

答案 5 :(得分:0)

我知道这是旧的,但请更正以下内容:

$('.slideshow :first-child').fadeOut(1000).next('img').fadeIn(1000).end().appendTo('#slideshow');

.slideshow {
    width: 100%;
    position: relative;
    height: auto;
}
.slideshow img:first-child { position:relative; } /*auto height adjust*/
.slideshow img {
    top: 0;
    left: 0;
    width: 100%;
    max-width: 600px;
    height: auto;
    position: absolute;
}

只是试图反过来。以上所有都很好,但过渡是,呃,不顺利。使用class是有原因的。