jquery-mobile-menu-plugin
Version:
The best jQuery plugin for app look-alike on- and off-canvas menus with sliding submenus for your website and webapp.
128 lines (103 loc) • 2.39 kB
JavaScript
/*
* jQuery mmenu dragClose addon
*
* Copyright (c) ...
*/
(function( $ ) {
var _PLUGIN_ = 'mmenu',
_ADDON_ = 'dragClose';
$[ _PLUGIN_ ].addons[ _ADDON_ ] = {
// setup: fired once per menu
setup: function()
{
var that = this,
opts = this.opts[ _ADDON_ ],
conf = this.conf[ _ADDON_ ];
glbl = $[ _PLUGIN_ ].glbl;
// Extend shortcut options
if ( typeof opts == 'boolean' )
{
opts = {
close: opts
};
}
if ( typeof opts != 'object' )
{
opts = {};
}
opts = this.opts[ _ADDON_ ] = $.extend( true, {}, $[ _PLUGIN_ ].defaults[ _ADDON_ ], opts );
// Swipe close
if ( opts.close )
{
// Set up variables
var closeGesture, prevGesture;
switch( this.opts.offCanvas.position )
{
case 'left':
closeGesture = 'swipeleft';
break;
case 'right':
closeGesture = 'swiperight';
break;
case 'top':
closeGesture = 'swipeup';
break;
case 'bottom':
closeGesture = 'swipedown';
break;
}
if ( this.opts.extensions.indexOf( 'mm-leftsubpanel' ) != -1 )
{
prevGesture = 'swipeleft';
}
else
{
prevGesture = 'swiperight';
}
// Bind events
var _hammer = new Hammer( this.$menu[0], opts.vendors.hammer );
_hammer
.on( closeGesture,
function( e )
{
if ( that.opts.offCanvas ) {
var prev = that.$menu.find('.' + _c.prev + ':visible');
if ( !prev.length ) that.close();
else if (closeGesture != prevGesture) that.close();
}
}
)
.on( prevGesture,
function( e )
{
var prev = that.$menu.find( '.' + _c.prev + ':visible' );
if (prev.length > 0) prev.click();
}
);
}
},
// add: fired once per page load
add: function()
{
if ( typeof Hammer != 'function' || Hammer.VERSION < 2 )
{
$[ _PLUGIN_ ].addons[ _ADDON_ ].setup = function() {};
return;
}
_c = $[ _PLUGIN_ ]._c;
_d = $[ _PLUGIN_ ]._d;
_e = $[ _PLUGIN_ ]._e;
},
// clickAnchor: prevents default behavior when clicking an anchor
clickAnchor: function( $a, inMenu ) {}
};
// Default options and configuration
$[ _PLUGIN_ ].defaults[ _ADDON_ ] = {
close : false,
vendors : {
hammer : {}
}
};
$[ _PLUGIN_ ].configuration[ _ADDON_ ] = {};
var _c, _d, _e, glbl;
})( jQuery );