3

我有这个非常简单的 jQuery 幻灯片:http: //jsfiddle.net/6zA4B/

HTML:

<div class="fadein">
<img src="http://farm3.static.flickr.com/2610/4148988872_990b6da667.jpg">
<img src="http://farm3.static.flickr.com/2597/4121218611_040cd7b3f2.jpg">
<img src="http://farm3.static.flickr.com/2531/4121218751_ac8bf49d5d.jpg">
</div>

JavaScript:

​$(function(){
    $('.fadein img:gt(0)').hide();
    setInterval(function(){$('.fadein :first-child').fadeOut().next('img').fadeIn().end().appendTo('.fadein');}, 3000);
});​

它工作得很好,我只想用 3 个 div 替换 3 个 img 标签(所以我可以在图像下方添加一个标题)。如何修改脚本以实现这一目标?我试过这个,但可能我做错了什么......

HTML:

<div class="fadein">
    <p><img src="http://farm3.static.flickr.com/2610/4148988872_990b6da667.jpg">image1</p>
    <p><img src="http://farm3.static.flickr.com/2597/4121218611_040cd7b3f2.jpg">image2</p>
    <p><img src="http://farm3.static.flickr.com/2531/4121218751_ac8bf49d5d.jpg">image3</p>
</div>

JavaScript:

$(function(){
    $('.fadein p:gt(0)').hide();
    setInterval(function(){$('.fadein :first-child').fadeOut().next('p').fadeIn().end().appendTo('.fadein');}, 3000);
});​

http://jsfiddle.net/S4SmM/1/ :D

4

4 回答 4

8

您的选择器之一略微偏离:

$('.fadein :first-child')

正在选择下面的所有第一个子元素.fadein。这包括元素的第一个子p元素,即您尝试旋转到的图像。

您想将:first-child选择器限制在.fadein. 一种方法是使用子选择器

$('.fadein > :first-child')

示例:http: //jsfiddle.net/S4SmM/4/

于 2012-12-22T15:54:03.020 回答
4

使用以下代码:

HTML:

<div class="fadein">
    <div><img src="http://farm3.static.flickr.com/2610/4148988872_990b6da667.jpg"><p>image1</p></div>
<div><img src="http://farm3.static.flickr.com/2597/4121218611_040cd7b3f2.jpg"><p>image2</p></div>
    <div><img src="http://farm3.static.flickr.com/2531/4121218751_ac8bf49d5d.jpg"><p>image3</p></div>
</div>
​

CSS:

.fadein { position:relative; height:332px; width:500px; }
.fadein div {position:absolute;text-align:center;height:100%;}
.fadein p { position:absolute; bottom:0;width:100%;color:white;background-color:rgba(0,0,0,0.6);height:1em;padding-bottom:10px;}​

JS:

$.fn.nextOrFirst = function(selector) {
    var next = this.next(selector);
    return (next.length) ? next : this.prevAll(selector).last();
}

$(function() {
    $('.fadein div:eq(0)').addClass("active");
    $('.fadein div:gt(0)').hide();
    setInterval(function() {
        $('.active:eq(0)').fadeOut().removeClass("active").nextOrFirst('div').addClass("active").fadeIn().end()
    }, 3000);
});​

JsFiddle:http: //jsfiddle.net/S4SmM/5/

于 2012-12-22T15:53:10.913 回答
0

我喜欢 Andrew Whittaker 的回答,但更喜欢使用 Fadeout 回调来给它更多“动画”:

setInterval(function(){$('.fadein > :first-child').fadeOut(1000, function() {
    $(this).next('p').fadeIn(1000).end().appendTo('.fadein');   
})
}, 5000);
于 2014-07-21T13:08:15.340 回答
0

您还可以使用插件jquery-fade-slider

$(selector).fadeSlider()

链接到 Github 仓库

于 2015-10-07T13:25:25.757 回答