1

我在使用 jQuery 图像旋转器时遇到了一些问题。当快速单击下一个/上一个按钮两次时,图像会闪烁,您最终会看到两个图像。关于如何解决它的任何想法?

这是HTML

<div id="prev">
<img id="prevListing" class="prevListing" src="..." onmouseover="this.src='...'" onmouseout="this.src='...'">
</div>

<div class="faded">
<div id="fader">
<img src="...">
<img src="...">
</div>
</div>

<div id="next">
<img id="nextListing" class="nextListing" src="..." onmouseover="this.src='...'" onmouseout="this.src='...'">
</div>

CSS

.used {float:left; width:50%;}

.usedListingImage {width:65%;float:left; display:block; margin:-1% auto 0 auto; max-width:400px;}

#fader{display:block;  width:95%;}

.nextListing {width:5%;float:right; margin:6% 5% 5% 5%;padding-right:5%;}

.prevListing  {width:5%;float:left; margin:7% 5% 5% 5%; }

和 jQuery

<script type="text/javascript">
jQuery (function() {
    $('#fader img:not(:first)').hide();

    $('#fader img').each(function() {
        var img = $(this);
        $('<img>').attr('src', $(this).attr('src')).load(function() {
            img.css('margin-left', -'0');
        });
    });

    var pause = false;

    function fadeNext() {
        $('#fader img').first().fadeOut().appendTo($('#fader'));
        $('#fader img').first().fadeIn();
    }

    function fadePrev() {
        $('#fader img').first().fadeOut();
        $('#fader img').last().prependTo($('#fader')).fadeIn();
    }

    $('#fader, #next').click(function() {
        fadeNext();
    });

    $('#prev').click(function() {
        fadePrev();
    });

    $('#fader, .button').hover(function() {
        pause = true;
    },function() {
        pause = false;
    });

    function doRotate() {
        if(!pause) {
            fadeNext();
        }    
    }

    var rotate = setInterval(doRotate, 5000);

});

</script>

任何想法如何在图像切换时停止闪烁?

4

3 回答 3

2

你目前有float:left;你的CSS。当您同时拥有fadeInfadeOut运行两个元素时,两个元素都可见并且在空间中并且没有足够的空间,因此另一个图像会下降到第一个图像下方。您应该position: absolute;在它们上使用它们,以便它们可以存在于同一空间中。然后我只需将 z-index 更改为图像淡入的图像,这样它就在顶部,不用担心旧图像淡出,就hide()在另一个图像完成淡入之后。

于 2012-12-06T21:48:51.667 回答
2

如前所述,图像同时显示,因为溢出没有以任何方式隐藏。在这里可以看到一个将它们堆叠在一起的例子

width:85%; position: relative; float: left;

#fader

position:absolute;

.usedListingImage
于 2012-12-06T21:57:03.970 回答
1

您当前正在同时启动fadeInand fadeOut,导致短暂的重叠。您可能想要改为fadeIn回调​​:

function fadeNext() {
    $('#fader img').first().fadeOut(400, function(){
            $('#fader img').first().fadeIn();
    }).appendTo($('#fader'));

}

function fadePrev() {
    $('#fader img').first().fadeOut(400, function(){
        $('#fader img').last().prependTo($('#fader')).fadeIn();
    });

}
于 2012-12-06T21:42:58.110 回答