(function($) { $.fn.simplemenu = function(options) { build(this); function build(e) { var o = $.extend({}, $.fn.simplemenu.defaults, options); var $menu = e; var $menuitems = $menu.children(o.selector.menuitem); var hidedelaytimer; $menuitems.each(function() { var $menuitem = $(this); var $submenu = $menuitem.children(o.selector.submenu); if($submenu.length) { $menuitem.on('mouseenter', function(event) { if($menuitem.hasclass(o.selector.menuitemactive)) { if(o.hidedelay) cleartimeout(hidedelaytimer); }else { show($menuitem); } }); $menuitem.on('mouseleave', function(event) { if(o.hidedelay) sethidedelay($menuitem); else hide($menuitem); }); } }); function show($menuitem) { hide($menu.find('.' + o.selector.menuitemactive)); var $submenu = $menuitem.find(o.selector.submenu); $menuitem.addclass(o.selector.menuitemactive); if(o.fx.fade) $submenu.fadein(o.fx.duration); else $submenu.css({left: $menuitem.position().left + 'px'}).show(); } function hide($menuitem) { $menuitem.find(o.selector.submenu).hide(); $menuitem.removeclass(o.selector.menuitemactive); } function sethidedelay($menuitem) { hidedelaytimer = settimeout(function() {hide($menuitem);}, o.hidedelayduration); } } }; $.fn.simplemenu.defaults = { hidedelay: false, hidedelayduration: 500, fx: { fade: true, duration: 300 }, selector: { menuitem: 'li', menuitemactive: 'topmenu-item-active', menuitemlnk: 'a', submenu: 'ul', submenuitem: 'li' } }; })(jquery);