繁体   English   中英

创建jQuery手风琴插件的困难(Super Neat!)

[英]Difficulties on creating a jQuery accordion plugin (Super Neat!)

我正在创建一个供个人使用的jQuery手风琴插件。

我的主要目标是拥有一个超级简洁的JS代码和HTML结构。

这是我达到的程度http://jsfiddle.net/QA2eH/

HTML结构:

<div class="accordion">

    <div class="accordion-wrapper">
        <div class="accordion-toggle">
            Collapsible Group Item #1
        </div>
        <div class="content">
            <p>Mea regione persecuti ne. suscipi one antur duo ne, elitr voluptua conceptam at eam</p>
        </div>
    </div>

    <div class="accordion-wrapper">
        <div class="accordion-toggle">
            Collapsible Group Item #2
        </div>
        <div class="content">
            <p>Mea regione persecuti ne. suscipi one antur duo ne, elitr voluptua conceptam at eam</p>
        </div>
    </div>

    <div class="accordion-wrapper">
        <div class="accordion-toggle">
            Collapsible Group Item #3
        </div>
        <div class="content">
            <p>Mea regione persecuti ne. suscipi one antur duo ne, elitr voluptua conceptam at eam</p>
        </div>
    </div>

</div>

JS代码(尚未完成)

$(function(){
        $('.accordion .accordion-wrapper .accordion-toggle').on('click',function(){
            $(this).next('.content').slideDown(300).parent().addClass('active').siblings().removeClass('active');
        });
});





快速总结:

使用父级和同级函数,单击切换开关将为其包装器添加一个类名.active ,并从其余包装器中删除该类名。


我不能做的:

滑动/隐藏所有非“ .active”包装器中的内容


感谢您的帮助。

您可以使用此:

$(function () {
    $('.accordion .accordion-wrapper .accordion-toggle').on('click', function () {
        $(this)
        .next('.content')
        .slideDown(300)
        .parent()
        .addClass('active')
        .siblings()
        .removeClass('active')
        .find('.content')
        .slideUp(300);
    });
});

演示

我添加了.find('.content').slideUp(300); 到您的连锁店。

您应该使用小功能进行编程,以便可以在更多情况下重用它们,例如,在这种情况下,您可以执行以下操作:

$(function(){
    // Asociate toggleContents function to element click
    $('.accordion-toggle').on('click', toggleContents);

    function toggleContents (event) {
        var $this = $(this);
        hideContents($this);
        showContents($this);
    }

    function showContents ($obj) {
        //We show the contents, using dequeue, for fixing queues on mutliple user clicks
        $('.content', $obj.parent())
            .addClass('active')
            .slideDown(300)
            .dequeue();
    }

    function hideContents ($obj) {
        $('.active.content', $obj.parents('.accordion'))
            .removeClass('.active')
            .slideUp(300)
            .dequeue();
    }
});

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM