// // グローバルメニュー用に使うプルダウンメニュー // jQuery.slideDown/slideUp // // 使い方: // メニュー名 //
メニュー中身
// // (function($){ 'use strict'; var plugName = 'pulldownMenu'; $.fn[plugName] = function( arg ){ // オプション var opt = $.extend(true,{ speed: 350, // slideDown/Upの第一引数 $overlay: $(), // オーバーレイ要素 before: function(){}, // 開閉前コールバック beforeShow: function(){}, // 開く前コールバック beforeHide: function(){}, // 閉じる前コールバック afterShow: function(){}, // 開いた後コールバック afterHide: function(){}, // 閉じた後コールバック after: function(){} // 開閉後コールバック },arg); this.each(function(){ var $trigger = $(this); var $content = $($trigger.data('pulldown')); if( !$content.length ) return; // メニュー開閉 $trigger.click(function(){ opt.before.call(this, $trigger, $content); if( $trigger.hasClass('show') ){ opt.beforeHide.call(this, $trigger, $content); opt.$overlay.removeClass('show'); $content.stop().slideUp(opt.speed,function(){ $trigger.removeClass('show'); opt.afterHide.call(this, $trigger, $content); }); } else{ opt.beforeShow.call(this, $trigger, $content); opt.$overlay.addClass('show'); $content.stop().slideDown(opt.speed); $trigger.addClass('show'); opt.afterShow.call(this, $trigger, $content); } opt.after.call(this, $trigger, $content); }); // メニュー内の閉じるボタン $content.find('.close').click(function(){ $trigger.trigger('click'); }); // オーバーレイクリックで閉じる opt.$overlay.click(function(ev){ if( ev.target === this ){ $content.stop(true,true); if( $trigger.hasClass('show') ) $trigger.trigger('click'); } }); }); // おわり return this; }; })(window.jQuery);