灵活的jQuery垂直手风琴插件

简介: 这是一款使用jQuery和css3 transitions制作垂直手风琴插件。

这是一款使用jQuery和css3 transitions制作垂直手风琴插件。

tx001177.png

在线预览 下载

HTML
html结构使用一个class为st-accordion的div作为wrapper,在里面放置一个无序列表。每一个无序列表项是一个手风琴项。span st-arrow是手风琴右边的小箭头。

<div id="st-accordion" class="st-accordion">
    <ul>
        <li>
            <a href="#">
                Item Title
                <span class="st-arrow">Open or Close</span>
            </a>
            <div class="st-content">
                <p>Some content</p>
            </div>
        </li>
        <li> ... </li>
    </ul>
</div>

JAVASCRIPT
下面是该手风琴插件的可用参数:

$.Accordion.defaults        = {
   
    // index of opened item. -1 means all are closed by default.
    open            : -1,
    // if set to true, only one item can be opened. 
    // Once one item is opened, any other that is 
    // opened will be closed first
    oneOpenedItem   : false,
    // speed of the open / close item animation
    speed           : 600,
    // easing of the open / close item animation
    easing          : 'easeInOutExpo',
    // speed of the scroll to action animation
    scrollSpeed     : 900,
    // easing of the scroll to action animation
    scrollEasing    : 'easeInOutExpo'
};

通过init函数来初始化该手风琴插件:

_init : function( options ) {
   
    this.options = $.extend( true, {
   }, $.Accordion.defaults, options );
    // validate options
    this._validate();
    // current is the index of the opened item
    this.current        = this.options.open;
    // hide the contents so we can fade it in afterwards
    this.$items.find('div.st-content').hide();
    // save original height and top of each item    
    this._saveDimValues();
    // if we want a default opened item...
    if( this.current != -1 )
        this._toggleItem( this.$items.eq( this.current ) );
    // initialize the events
    this._initEvents();   
},

_saveDimValues函数保存了手风琴项原来的高度,通过它我们可以知道在打开一个手风琴项时需要滚动多少高度。

如果我们设置一个手风琴项以默认方式打开,那么_toggleItem函数将被调用。

接下来是初始化所有的事件:

_toggleItem函数负责协调手风琴项被点击时的事件。如果有一个手风琴项已经被打开(该项拥有class为st-open),我们将设置current为-1,将高度设置为原始高度。如果点击的手风琴项是关闭的,那么设置current为当前项,然后使它的高度移动到适合内容的高度。通过_scroll函数将页面滚动到当前手风琴项的位置。

_toggleItem         : function( $item ) {
   

    var $content = $item.find('div.st-content');

    ( $item.hasClass( 'st-open' ) ) 

        ? ( this.current = -1, $content.stop(true, true).fadeOut( this.options.speed ), $item.removeClass( 'st-open' ).stop().animate({
   
            height  : $item.data( 'originalHeight' )
        }, this.options.speed, this.options.easing ) )

        : ( this.current = $item.index(), $content.stop(true, true).fadeIn( this.options.speed ), $item.addClass( 'st-open' ).stop().animate({
   
            height  : $item.data( 'originalHeight' ) + $content.outerHeight( true )
        }, this.options.speed, this.options.easing ), this._scroll( this ) )

},

在_initEvents函数中初始化了两个事件:点击一个手风琴项和窗口的resize。当点击一个手风琴项时,_toggleItem函数被调用,如果我们设置oneOpenedItem为true,那么其它被打开的手风琴项先关闭在打开当前的手风琴项。

_initEvents         : function() {
   
    var instance    = this;
    // open / close item
    this.$items.find('a:first').bind('click.accordion', function( event ) {
   
        var $item           = $(this).parent();
        // close any opened item if oneOpenedItem is true
        if( instance.options.oneOpenedItem && instance._isOpened() && instance.current!== $item.index() ) {
   

            instance._toggleItem( instance.$items.eq( instance.current ) );
        }
        // open / close item
        instance._toggleItem( $item );
        return false;
    });
    $(window).bind('smartresize.accordion', function( event ) {
   
        // reset original item values
        instance._saveDimValues();
        // reset the content's height of any item that is currently opened
        instance.$el.find('li.st-open').each( function() {
          
            var $this   = $(this);
            $this.css( 'height', $this.data( 'originalHeight' ) + $this.find('div.st-content').outerHeight( true ) );       
        });         
        // scroll to current
        if( instance._isOpened() )
        instance._scroll();         
    });   
},

CSS代码请参考下载文件。

相关文章
|
12天前
|
JavaScript 前端开发
jQuery和CSS3滑动展开菜单按钮插件
这是一款jQuery和CSS3滑动展开菜单按钮插件。该滑动展开菜单按钮在用户点击主菜单按钮之后,子菜单以滑动的方式依次展开
53 21
|
12天前
|
JavaScript
jquery图片和pdf文件预览插件
EZView.js是一款jquery图片和pdf文件预览插件。EZView.js可以为图片和pdf格式文件生成在线预览效果。支持的文件格式有pdf、jpg、 png、jpeg、gif。
44 16
|
8天前
|
JavaScript
jquery文字动画特效插件animatext
jquery文字动画特效插件animatext
32 9
|
10天前
|
移动开发 JavaScript 前端开发
简单易用的jquery响应式轮播图插件ma5slider
ma5slider是一款简单易用的jquery响应式轮播图插件。该轮播图支持鼠标拖拽,可以通过CSS定制外观,支持无限循环模式,内置水平,垂直和淡入淡出三种轮播图过渡动画效果。
|
12天前
|
JavaScript
简洁实用的jQuery进度条插件
这是一款简洁实用的jQuery进度条插件。该插件使用简单,通过在页面中放置指定的HTML代码,即可生成带动画效果的进度条。
|
12天前
|
JavaScript 容器
jQuery文字跑马灯插件Marquee
jQuery.Marquee是一款jQuery文字跑马灯插件。jQuery.Marquee跑马灯插件可以结合使用CSS3动画,制作文字的上下左右移动效果。
|
8天前
|
JavaScript 容器
jquery和CSS3图片排序过滤搜索插件
Filterizr是一款jquery和CSS3图片排序过滤插件。它可以对一组图片进行排序,按条件过滤和按关键字搜索。并在显示结果时使用指定的CSS3动画过渡效果。
22 2
|
8天前
|
JavaScript
jquery和CSS3响应式轮播图插件jcSlider
jcSlider是一款jquery和CSS3响应式轮播图插件。jcSlider使用CSS3过渡动画,它可以和animate.css完美结合,生成60多种轮播图过渡动画效果。
|
12天前
|
JavaScript
jQuery Lightbox和弹出层插件flashy
Flashy.js是一款响应式jQuery Lightbox和弹出层插件
|
11天前
|
JavaScript 容器
jQuery消息通知显示插件
MessageNotifyPlugin是一款简单的jQuery消息通知显示插件。该jQuery消息通知显示插件能够自动生成最新消息和提醒消息两个消息通知按钮。并且可以设置消息的是否已读状态等
18 2