【问题标题】:Fade Out/Fade In of List Items列表项的淡出/淡入
【发布时间】:2013-05-09 13:59:05
【问题描述】:

这是一个“认识我们的员工”页面,其中包含与员工相关的小图像的垂直无序列表 (#staffDirectory)。当用户单击与显示的工作人员不同的工作人员时,我希望当前的大型列表项(其中包括有关成员的图像和信息 - 并被分配类“staffSelected”并显示在 div #staffMember 中)淡出,丢失类,然后获取相应的列表项(用户在#staffDirectory 中单击的那个),fadeIn 那个,并添加“staffSelected”类。

现在发生的情况是有重叠,新列表项会短暂显示在旧列表项的右侧(但这只会发生在我第二次和随后从#staffDirectory 列表中单击时 - 第一次效果很好) .因此,过渡并不顺利。我认为这个问题必须处理我对 newMember 变量的声明或其在 fadeIn 方法中的使用。

JS 和 CSS 如下。提前致谢。

JS:

$(document).ready(function()
{
    $("#staffDirectory ul li").click(function()
    {
        var index = $("#staffDirectory ul li").index(this);
        var newMember = null;
        newMember = $("#staffMember ul li").get(index);

        $(".staffSelected").fadeOut(500, function()     
        {
            $(newMember).fadeIn(500).addClass('staffSelected');
        });

    });

});

CSS:

#staffContainer
{
    margin-top: 45px;
}
#staffDirectory
{
    margin: 25px;
    float: left;
}
#staffDirectory ul
{
    list-style:none;
}
#staffDirectory ul li
{
    opacity: 0.5;
}

#staffDirectory img{
    width: 55px;
    cursor: pointer;
}

#staffDirectory li:hover{
    opacity: 0.7;
}

.selectedMember {
    opacity: 1.0 !important;
}

#staffMember{

}

#staffMember ul{

list-style: none;
}

#staffMember li{
display: inline;
}

.staffMemberImage {
    float: left;
    margin-right: 30px;
}

.staffName {
color: #7F0037;
font-variant: small-caps;
font-size: 20px;
font-weight: bold;
text-align: center;
}

.staffSelected {
    display: inherit;
}

#staffMember li:not(.staffSelected) {
    display: none;
}

HTML:

<div id="staffDirectory">
                <ul>
                    <li class="selectedMember"><img src="img/silhouette.jpg"></li>
                    <li><img src="img/silhouette.jpg"></li>
                    <li><img src="img/silhouette.jpg"></li>
                    <li><img src="img/silhouette.jpg"></li>
                    <li><img src="img/silhouette.jpg"></li>             
                    <li><img src="img/silhouette.jpg"></li> 
                </ul>
            </div>
            <div id="staffMember">
                <ul>
                    <li class="staffSelected">
                        <img src="img/silhouette.jpg" class="staffMemberImage">
                        <p class="staffName">Jane Doe 1</p>
                        <p class="staffDesc">

    Lorem ipsum dolor sit amet, consectetuer adipiscing elit.
    Aliquam tincidunt mauris eu risus.
    Vestibulum auctor dapibus neque.    Lorem ipsum dolor sit amet, consectetuer adipiscing elit.
    Aliquam tincidunt mauris eu risus.
    Vestibulum auctor dapibus neque.    Lorem ipsum dolor sit amet, consectetuer adipiscing elit.
    Aliquam tincidunt mauris eu risus.
    Vestibulum auctor dapibus neque.
                        </p>
                    </li>

                    <li>
                        <img src="img/silhouette.jpg" class="staffMemberImage">
                        <p class="staffName">Jane Doe 2</p>
                        <p class="staffDesc">

    Lorem ipsum dolor sit amet, consectetuer adipiscing elit.
    Aliquam tincidunt mauris eu risus.
    Vestibulum auctor dapibus neque.    Lorem ipsum dolor sit amet, consectetuer adipiscing elit.
    Aliquam tincidunt mauris eu risus.
    Vestibulum auctor dapibus neque.    Lorem ipsum dolor sit amet, consectetuer adipiscing elit.
    Aliquam tincidunt mauris eu risus.
    Vestibulum auctor dapibus neque.
                        </p>
                    </li>
</ul>

</div>

编辑: 来自 Firebug(我会发布一张图片,但我是该网站的新手):

<div id="staffMember">
<ul>
<li class="" style="opacity: 1; display: none;">
<li class="" style="display: none; opacity: 1;">
<li class="" style="display: none; opacity: 1;">
<li class="" style="display: none; opacity: 1;">
**<li class="staffSelected" style="display: list-item; opacity: 1;">
<li class="staffSelected" style="display: list-item; opacity: 1;">**
<img class="staffMemberImage" src="img/silhouette.jpg">
<p class="staffName">Jane Doe</p>
<p class="staffDesc"> Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aliquam tincidunt mauris eu risus. Vestibulum auctor dapibus neque. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aliquam tincidunt mauris eu risus. Vestibulum auctor dapibus neque. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aliquam tincidunt mauris eu risus. Vestibulum auctor dapibus neque. </p>
</li>
</ul>
</div>

【问题讨论】:

    标签: jquery fadein fadeout unordered


    【解决方案1】:

    因此,您还需要从旧的staffSelected 中删除。我拿了 ajgiv 的 jsfiddle 并对其进行了更改以使其正常工作:

    jsFiddle

    JavaScript:

    $(document).ready(function () {
        $("#staffDirectory ul li").click(function () {
            var index = $("#staffDirectory ul li").index(this);
            var newMember = null;
            newMember = $("#staffMember ul li").get(index);
    
            $(".staffSelected").stop().fadeOut(500).removeClass('staffSelected');
    
            setTimeout(function () {
                $(newMember).stop().fadeIn(500).addClass('staffSelected');
            }, 500);
        });
    });
    

    【讨论】:

    • 不幸的是,在小提琴中,这不起作用(或者至少,没有办法知道它是否有效),因为没有什么可以点击来触发事件。无论如何,我实现了您对我的代码的更改并且它在大多数情况下都有效,但我仍然可以让重叠发生。我的头因抓挠而生。
    • 只需点击“图片”。以及您使用的是什么浏览器,它可以在 Chrome 中使用。
    • 我正在使用 FF,但我在 Chrome 中遇到了同样的问题。要重现,请在动画完成之前连续单击列表项。 RE:图片,它告诉我在添加图片之前我需要 10 点声望。
    • 请注意:我实际上在staffDirectory 中有六个列表项。为简洁起见,我将其缩短为两个。
    【解决方案2】:

    您是否尝试过使用 setTimeout?

    $(".staffSelected").fadeOut(500, function() {
            setTimeout(function() {
              $(newMember).fadeIn(500).addClass('staffSelected');
            }, 500);
        });
    

    编辑: 这能达到你想要的吗? http://jsfiddle.net/agroth3/MC6B2/

    【讨论】:

    • 这确实更好,但有一个小故障。如果我在动画完成之前从#staffDirectory 中单击一个列表项,我最终会同时看到两者。如果用户在动画完成之前点击,我该如何停止/取消该动画?
    • 我在事件处理程序的顶部添加了这些语句,但我仍然得到同样的东西。 $("#staffMember").stop(); $("#staffMember ul li:not(.staffSelected)").css("display", "none");
    • 你能用小提琴重现这个吗?
    • 没有。或者至少我不知道如何使用本地 html 文件捕获流量。
    • 我的意思是一个 jsfiddle,而不是 fiddler:P
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多