From 06eb48317cdde1f578a63bcf951162412075ec7f Mon Sep 17 00:00:00 2001 From: Mark Collins Date: Tue, 6 Feb 2018 10:51:02 +0100 Subject: [PATCH] Added code and a setting to allow unfold of child menus on hover over parent. Edited README.md to reflect new option. --- README.md | 1 + jquery.slicknav.js | 32 ++++++++++++++++++++++++++++++++ 2 files changed, 33 insertions(+) diff --git a/README.md b/README.md index d63e3f3..5f0bed2 100644 --- a/README.md +++ b/README.md @@ -54,6 +54,7 @@ slicknav.css can be modified to fit website design 'allowParentLinks': false // Allow clickable links as parent elements. 'nestedParentLinks': true // If false, parent links will be separated from the sub-menu toggle. 'showChildren': false // Show children of parent links by default. + 'showChildrenOnHover': false // Show children of parent links when hovering over parent. 'removeIds': true // Remove IDs from all menu elements. Defaults to false if duplicate set to false. 'removeClasses': false // Remove classes from all menu elements. 'brand': '' // Add branding to menu bar. diff --git a/jquery.slicknav.js b/jquery.slicknav.js index 50c490b..da20ee6 100644 --- a/jquery.slicknav.js +++ b/jquery.slicknav.js @@ -16,6 +16,7 @@ allowParentLinks: false, nestedParentLinks: true, showChildren: false, + showChildrenOnHover: false, removeIds: true, removeClasses: false, removeStyles: false, @@ -257,6 +258,37 @@ $this._itemClick($(this)); }); + // toggle submenus on hover + if (settings.showChildrenOnHover) { + $('.'+prefix+'_parent,.'+prefix+'_open' ).mouseenter(function (event) { + event.preventDefault(); + var parentEl=$(event.target).closest('.'+prefix+'_parent'); + var sub_menu = parentEl.children('ul'); + if (!parentEl.hasClass(prefix+'_collapsed')) { + return; + } + parentEl.removeClass(prefix+'_collapsed'); + parentEl.addClass(prefix+'_open'); + parentEl.addClass(prefix+'_animating'); + var arrow = parentEl.children('.'+prefix+'_item').children('.'+prefix+'_arrow'); + arrow.html(settings.openedSymbol); + $this._visibilityToggle(sub_menu, parentEl, true, parentEl); + }).mouseleave(function (event) { + event.preventDefault(); + var parentEl=$(event.target).closest('.'+prefix+'_parent'); + var sub_menu = parentEl.children('ul'); + if (!parentEl.hasClass(prefix+'_open')) { + return; + } + parentEl.addClass(prefix+'_collapsed'); + parentEl.removeClass(prefix+'_open'); + parentEl.addClass(prefix+'_animating'); + var arrow = parentEl.children('.'+prefix+'_item').children('.'+prefix+'_arrow'); + arrow.html(settings.closedSymbol); + $this._visibilityToggle(sub_menu, parentEl, true, parentEl); + }); + } + // check for keyboard events on menu button and menu parents $($this.btn).keydown(function (e) { var ev = e || event;