这是一个简单的jQuery和css3手风琴效果。效果上类似于目录结构。
HTML
<ul id="cbp-ntaccordion" class="cbp-ntaccordion">
<li>
<h3 class="cbp-nttrigger">Oat cake tootsie roll</h3>
<div class="cbp-ntcontent">
<p><!-- ... --></p>
<ul class="cbp-ntsubaccordion">
<li>
<h4 class="cbp-nttrigger">Donut pastry</h4>
<div class="cbp-ntcontent"><!-- ... --></div>
</li>
<li>
<h4 class="cbp-nttrigger">Carrot cake</h4>
<div class="cbp-ntcontent">
<!-- ... -->
<ul class="cbp-ntsubaccordion">
<li>
<h5 class="cbp-nttrigger">Donut pastry</h5>
<div class="cbp-ntcontent"><!-- ... --></div>
</li>
<li><!-- ... --></li>
<li><!-- ... --></li>
</ul>
</div>
</li>
<li>
<h4 class="cbp-nttrigger">Tootsie roll marshmallow</h4>
<div class="cbp-ntcontent">
<!-- ... -->
</div>
</li>
</ul>
</div>
</li>
<li><!-- ... --></li>
<li><!-- ... --></li>
<li><!-- ... --></li>
</ul>
JAVASCRIPT
;( function( $, window, undefined ) {
'use strict';
// global
var $body = $( 'html, body' );
$.CBPNTAccordion = function( options, element ) {
this.$el = $( element );
this._init( options );
};
// the options
$.CBPNTAccordion.defaults = {};
$.CBPNTAccordion.prototype = {
_init : function( options ) {
// options
this.options = $.extend( true, {}, $.CBPNTAccordion.defaults, options );
// cache some elements and initialize some variables
this._config();
// initialize/bind the events
this._initEvents();
},
_config : function() {
// the clickable items
this.$items = this.$el.find( '.cbp-nttrigger' );
},
_initEvents : function() {
this.$items.on( 'click.cbpNTAccordion', function() {
var $listItem = $( this ).parent();
if( $listItem.hasClass( 'cbp-ntopen' ) ) {
$listItem.removeClass( 'cbp-ntopen' );
}
else {
$listItem.addClass( 'cbp-ntopen' );
$body.scrollTop( $listItem.offset().top );
}
} );
},
destroy : function() {
this.$items.off( '.cbpNTAccordion' ).parent().removeClass( 'cbp-ntopen' );
}
};
var logError = function( message ) {
if ( window.console ) {
window.console.error( message );
}
};
$.fn.cbpNTAccordion = function( options ) {
if ( typeof options === 'string' ) {
var args = Array.prototype.slice.call( arguments, 1 );
this.each(function() {
var instance = $.data( this, 'cbpNTAccordion' );
if ( !instance ) {
logError( "cannot call methods on cbpNTAccordion prior to initialization; " +
"attempted to call method '" + options + "'" );
return;
}
if ( !$.isFunction( instance[options] ) || options.charAt(0) === "_" ) {
logError( "no such method '" + options + "' for cbpNTAccordion instance" );
return;
}
instance[ options ].apply( instance, args );
});
}
else {
this.each(function() {
var instance = $.data( this, 'cbpNTAccordion' );
if ( instance ) {
instance._init();
}
else {
instance = $.data( this, 'cbpNTAccordion', new $.CBPNTAccordion( options, this ) );
}
});
}
return this;
};
} )( jQuery, window );






![MBTI 16型人格职业性格测试源码PC+H5自适应完整版基于ThinkPHP框架[亲测可用]](https://www.icbot.net/upload/portal/20250429/32ccad646f32a5f4926b3b7b5ef3232a.png)















