jQuery 幻灯片画廊图像连续出现两次

标签 jquery html css gallery slideshow

我想弄清楚为什么当我的 jQuery 幻灯片画廊在图像和标题之间循环时,第一 block 信息(图像、标题)在第一次循环时连续显示两次。每个后续循环都会正确交替图像。

    <script type="text/javascript" src="js/jquery-1.3.1.min.js"></script>
    <script type="text/javascript">

    $(document).ready(function() {
    //Execute the slideShow
    slideShow();

    });

    function slideShow() {

    //Set the opacity of all images to 0
    $('#gallery a').css({opacity: 0.0});
    //Get the first image and display it (set it to full opacity)
    $('#gallery a:first').css({opacity: 1.0});
    //Set the caption background to semi-transparent
    $('#gallery .caption').css({opacity: 0.7});

    //Resize the width of the caption according to the image width
    $('#gallery .caption').css({width: $('#gallery a').find('img').css('width')});
    //Get the caption of the first image from REL attribute and display it
    $('#gallery .cont').html($('#gallery a:first').find('img').attr('rel'))
    .animate({opacity: 0.7}, 400);
    //Call the gallery function to run the slideshow, 6000 = change to next image  after  6     seconds
    setInterval('gallery()',5000);
    }

    function gallery() {
    //if no IMGs have the show class, grab the first image
    var current = ($('#gallery a.show') ?  $('#gallery a.show') : $('#gallery a:first'));

    //Get next image, if it reached the end of the slideshow, rotate it back to the   firstimage
    var next = ((current.next().length) ? ((current.next().hasClass('caption'))?$('#gallery a:first') :current.next()) : $('#gallery a:first'));
    //Get next image caption
    var caption = next.find('img').attr('rel');
    //Set the fade in effect for the next image, show class has higher z-index
    next.css({opacity: 0.0})
    .addClass('show')
    .animate({opacity: 1.0}, 1000);

    //Hide the current image
    current.animate({opacity: 0.0}, 1000)
    .removeClass('show');
    //Set the opacity to 0 and height to 1px
    $('#gallery .caption').animate({opacity: 0.0}, { queue:false, duration:0    }).animate({height: '1px'}, { queue:true, duration:300 });
    //Animate the caption, opacity to 0.7 and heigth to 100px, a slide up effect
    $('#gallery .caption').animate({opacity: 0.7},10 ).animate({height: '60px'},500 );
    //Display the content
    $('#gallery .content').html(caption);
    }

    </script>
    <style type="text/css">

    .clear {
    clear:both;
    }

    #gallery {
    position:relative;
    height:360px;
    }
    #gallery a {
    float:left;
    position:absolute;
    }
    #gallery a img {
    border:none;
    }
    #gallery a.show {
    z-index:500;
    }

    #gallery .caption {
    z-index:600; 
    background-color:#000; 
    color:#ffffff; 
    height:60px; 
    width:100%; 
    position:absolute;
    bottom:0;
    }

    #gallery .caption .content {
    margin:5px;
    }
    #gallery .caption .content h3 {
    margin:0;
    padding:0;
    color:#1DCCEF;
    }
   </style>

有什么想法吗?谢谢,-qs

最佳答案

问题在这里:

var current = $('#gallery a.show') ? $('#gallery a.show') : $('#gallery a:first');

空列表是真实的,所以即使 $('#gallery a.show') 不匹配任何表达式也将始终计算为 $('#gallery a.show' ').

一个简单的修复是这样的:

var current = $('#gallery a.show').length ? $('#gallery a.show') : $('#gallery a:first');

不过我认为在 slideShow() 中添加 $('#gallery a:first').addClass('show'); 会更好$('#gallery a.show') 不匹配的情况。

http://jsfiddle.net/bkdf9q7j/10/

关于jQuery 幻灯片画廊图像连续出现两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26021653/

相关文章:

javascript - IE8 不触发 OnClick 事件,但在 Firefox 中工作正常

css - 文本渗入另一个 DIV 元素

php - 单击触发单选按钮没有响应

javascript - JQuery Div 标签代码

html - 悬停时如何在图像上显示文字?

javascript - 子菜单关闭太快

html - 我如何安排 <button> 使其不会在 textarea 之后中断?

jquery - div 总是需要调整 margin-top 属性

jquery - 如何按类查找元素并获取值?

javascript - 如何从文本输入字段读取输入并将输入放入div