首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用文本预览创建自定义手风琴效果

使用文本预览创建自定义手风琴效果
EN

Stack Overflow用户
提问于 2013-10-25 09:05:42
回答 2查看 948关注 0票数 0

我试图用jQuery创建一个自定义手风琴效果,其中“折叠”项显示每个项目中的第一行文本。当用户点击其中一个项目,它应该动画显示全文;非常类似的方式,普通手风琴将发挥作用,但我希望我的小预览文本。

我的脚本已经接近完成,但我仍然有几个问题:

  • 如果该项目已处于活动状态并再次单击,则不应折叠。
  • 动画是一个接一个地发生的,但我希望它们同时发生。

我能做些什么来完成剧本?

这是我的代码和小提琴:

http://jsfiddle.net/PPjFS/

代码语言:javascript
复制
<ul>
    <li>
        <span>Item 1</span>
        <div>
            <p>Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua.</p>
        </div>
    </li>
    <li>
        <span>Item 2</span>
        <div>
            <p>Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.</p>
        </div>
    </li>
    <li>
        <span>Item 3</span>
        <div>
            <p>At vero eos et accusam et justo duo dolores et ea rebum. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua.</p>
        </div>
    </li>    
</ul>

<script type="text/javascript">
    $("span").click(function(){
        var h = $(this).siblings("div").find("p").height();

        $("ul li div").animate({height:"20px"}, 100);

            if( !$(this).hasClass("active") ){
                $(this).addClass("active");
                $(this).siblings("div").animate({height: h+10 + "px"}, 200);
            }   
        });
</script>
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-10-25 09:25:21

如果该项目已处于活动状态并再次单击,则不应折叠。

在折叠项目之前,应该检查它是否处于活动状态。

动画是一个接一个地发生的,但我希望它们同时发生。

因为您在同一元素上运行两个动画,所以它们排队。

代码语言:javascript
复制
    $("ul li div").animate({height:"20px"}, 100);

..。

代码语言:javascript
复制
    $(this).siblings("div").animate({height: h+10 + "px"}, 200);

我更新了你的小提琴

代码语言:javascript
复制
$(function(){
    var container = $('ul');

    container.find("span").click(function(){
        var li = $(this).closest('li')
        if (li.hasClass("active")) return;

        var h = li.find("div").find("p").height(),
            active = container.find('li.active');

        active.find('div').animate({height:"20px"}, 100);
        li.find("div").animate({height: h+10 + "px"}, 200);
        active.removeClass('active');
        li.addClass("active");
    });
});
票数 1
EN

Stack Overflow用户

发布于 2015-02-19 09:28:41

我用叉子将手风琴打开,直到再次点击标题:

代码语言:javascript
复制
$(function(){
    var container = $('ul');

    container.find("span").click(function(){
        var li = $(this).closest('li')
        if (li.hasClass("active")) {

            $(li).find('div').animate({height:"20px"}, 100);
            $(li).removeClass("active");
        }

        else {

            var h = li.find("div").find("p").height(),
            active = container.find('li.active');

            li.find("div").animate({height: h+10 + "px"}, 200);
            li.addClass("active");
        };
    });
});

可以在这里找到:http://jsfiddle.net/jaakkokarhu/6nm48jb1/1/

我会在第一个答案下面对此发表评论,但由于“声誉”而不被允许。做一个新的答案。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19585586

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档