[jQuery] Simple and functional jQuery Accordion

Data dodania wpisu: 18-11-2010

I have not ever checked another jQuery Accordion plugins by it's code due to capabilities. I developed custom jQuery Accordion plugin while developing one of my Drupal-based website. Simply, it's capabilities are:

  • collapsing all elements on load,
  • expanding selected element by it's index,
  • leaving all elements expanded on load,
  • custom CSS styles due to CSS classes added to accordion elements,
  • possibility to use one rule to several accordion blocks,
  • collapsing currently expanded element.

Simple commons.

All code parts are below:

- jQuery plugin:

(function($){
    $.fn.simpleAccordion = function(options){
        var opts = $.extend({
            duration: 300, // default collapsing / expanding time in ms
            collapsed: true, // setting, if all elements shall be collapsed on load - does not touch custom expanded element by 'expanded' param
            expanded: null // index of an element to expand (default is null)
        },options);

        var $that = $(this);

        $that.children('a').addClass('accordion-link');
        $that.children('div').addClass('accordion-content');
        if(opts.collapsed) { 
            $that.children('div').hide();
        }
        if(opts.expanded != null) {
            var $count = 0;
            $that.children('a').each(function(){
                if($count == opts.expanded) {
                    $(this).addClass('toggled').next()
                           .addClass('toggled').slideDown(opts.duration);
                }
                $count++;
            });
        }
        $('a.accordion-link').click(function(){
            if($(this).hasClass('toggled')) { // this condition allows to collapse currently expanded element on self click
                $that.children('a.toggled').removeClass('toggled');
                $that.children('div.toggled').stop(true,true)
                        .slideUp(opts.duration);
            } else {
                $that.children('a.toggled').removeClass('toggled');
                $that.children('div.toggled').stop(true,true)
                         .slideUp(opts.duration);
                $(this).addClass('toggled').next().addClass('toggled')
                       .stop(true,true).slideDown(opts.duration);
            }
            return false;
        });

    }
})(jQuery);

- usage:

$(document).ready(function(){
    $('#accordion-custom-list').simpleAccordion({
        expanded: 0 // we set 'expand' value to zero, to automatically expand first element
    });
});

- a bit of stylesheet:

a.accordion-link{
    display:block;
    padding:5px;
    line-height:2.0em;
    width:100%;
    margin:10px 0;
    background:#eee;
}
div.accordion-content{
    display:block;
    padding:5px;
    line-height:2.0em;
    width:100%;
    margin:10px 0;
    border:1px solid #eee;
}

- and finally piece of HTML code to run on:)

<div id="accordion-custom-list">
    <a href="#">Item 1</a>
    <div>
        <p>Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante. Donec eu libero sit amet quam egestas semper. Aenean ultricies mi vitae est. Mauris placerat eleifend leo. Quisque sit amet est et sapien ullamcorper pharetra. Vestibulum erat wisi, condimentum sed, commodo vitae, ornare sit amet, wisi. Aenean fermentum, elit eget tincidunt condimentum, eros ipsum rutrum orci, sagittis tempus lacus enim ac dui. Donec non enim in turpis pulvinar facilisis. Ut felis. Praesent dapibus, neque id cursus faucibus, tortor neque egestas augue, eu vulputate magna eros eu erat. Aliquam erat volutpat. Nam dui mi, tincidunt quis, accumsan porttitor, facilisis luctus, metus</p>
    </div>
    <a href="#">Item 2</a>
    <div>
        <ul>
            <li>Morbi in sem quis dui placerat ornare. Pellentesque odio nisi, euismod in, pharetra a, ultricies in, diam. Sed arcu. Cras consequat.</li>
            <li>Praesent dapibus, neque id cursus faucibus, tortor neque egestas augue, eu vulputate magna eros eu erat. Aliquam erat volutpat. Nam dui mi, tincidunt quis, accumsan porttitor, facilisis luctus, metus.</li>
            <li>Phasellus ultrices nulla quis nibh. Quisque a lectus. Donec consectetuer ligula vulputate sem tristique cursus. Nam nulla quam, gravida non, commodo a, sodales sit amet, nisi.</li>
            <li>Pellentesque fermentum dolor. Aliquam quam lectus, facilisis auctor, ultrices ut, elementum vulputate, nunc.</li>
        </ul>
    </div>
    <a href="#">Item 3</a>
    <div>
        <p>Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante. Donec eu libero sit amet quam egestas semper. Aenean ultricies mi vitae est. Mauris placerat eleifend leo. Quisque sit amet est et sapien ullamcorper pharetra. Vestibulum erat wisi, condimentum sed, commodo vitae, ornare sit amet, wisi. Aenean fermentum, elit eget tincidunt condimentum, eros ipsum rutrum orci, sagittis tempus lacus enim ac dui. Donec non enim in turpis pulvinar facilisis. Ut felis. Praesent dapibus, neque id cursus faucibus, tortor neque egestas augue, eu vulputate magna eros eu erat. Aliquam erat volutpat. Nam dui mi, tincidunt quis, accumsan porttitor, facilisis luctus, metus</p>
    </div>
</div>

 

Download package: simpleAccordion

 

DEMO:

Item 1

Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante. Donec eu libero sit amet quam egestas semper. Aenean ultricies mi vitae est. Mauris placerat eleifend leo. Quisque sit amet est et sapien ullamcorper pharetra. Vestibulum erat wisi, condimentum sed, commodo vitae, ornare sit amet, wisi. Aenean fermentum, elit eget tincidunt condimentum, eros ipsum rutrum orci, sagittis tempus lacus enim ac dui. Donec non enim in turpis pulvinar facilisis. Ut felis. Praesent dapibus, neque id cursus faucibus, tortor neque egestas augue, eu vulputate magna eros eu erat. Aliquam erat volutpat. Nam dui mi, tincidunt quis, accumsan porttitor, facilisis luctus, metus

Item 2
  • Morbi in sem quis dui placerat ornare. Pellentesque odio nisi, euismod in, pharetra a, ultricies in, diam. Sed arcu. Cras consequat.
  • Praesent dapibus, neque id cursus faucibus, tortor neque egestas augue, eu vulputate magna eros eu erat. Aliquam erat volutpat. Nam dui mi, tincidunt quis, accumsan porttitor, facilisis luctus, metus.
  • Phasellus ultrices nulla quis nibh. Quisque a lectus. Donec consectetuer ligula vulputate sem tristique cursus. Nam nulla quam, gravida non, commodo a, sodales sit amet, nisi.
  • Pellentesque fermentum dolor. Aliquam quam lectus, facilisis auctor, ultrices ut, elementum vulputate, nunc.
Item 3

Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante. Donec eu libero sit amet quam egestas semper. Aenean ultricies mi vitae est. Mauris placerat eleifend leo. Quisque sit amet est et sapien ullamcorper pharetra. Vestibulum erat wisi, condimentum sed, commodo vitae, ornare sit amet, wisi. Aenean fermentum, elit eget tincidunt condimentum, eros ipsum rutrum orci, sagittis tempus lacus enim ac dui. Donec non enim in turpis pulvinar facilisis. Ut felis. Praesent dapibus, neque id cursus faucibus, tortor neque egestas augue, eu vulputate magna eros eu erat. Aliquam erat volutpat. Nam dui mi, tincidunt quis, accumsan porttitor, facilisis luctus, metus

Comments

This entry has no comments yet

Comments closed...

DesignEnd on Facebook

Inspiration