function om_maximenu_longmenu_js in OM Maximenu 6
Same name and namespace in other branches
- 8 inc/om_maximenu.effects.inc \om_maximenu_longmenu_js()
- 7 inc/om_maximenu.effects.inc \om_maximenu_longmenu_js()
Scroll long menu if it won't fit the container
1 call to om_maximenu_longmenu_js()
- om_maximenu_init in inc/
om_maximenu.render.inc - Implementation of hook_init().
File
- inc/
om_maximenu.effects.inc, line 571 - OM Maximenu Effects
Code
function om_maximenu_longmenu_js($menu = NULL, $longmenu = NULL) {
$longmenu_hover_scroll_js = "\n \$(document).ready(function(){\n if (\$('#om-maximenu-" . $menu . "').hasClass('om-maximenu-row')) {\n var wrapper = \$('#om-maximenu-" . $menu . " .om-menu-ul-wrapper'), \n wrapper_width = wrapper.width(),\n ul = \$('#om-menu-" . $menu . "'), \n ul_width = 0;\n \n \$('#om-menu-" . $menu . " .om-leaf').each(function(index) {\n ul_width += parseInt(\$(this).width(), 10);\n });\n \n // this will only be triggered when links won't fit inside the wrapper\n if (ul_width > wrapper_width) {\n\n var li_first = ul.find('li:first-child').width(),\n li_last = ul.find('li:last-child').width();\n \n // scroll adjustment to end link\n ul.width(ul_width + 30 + 'px')\n \n wrapper.css({overflow: 'hidden'});\n \n wrapper.mousemove(function(e){\n var wrapper_offset = wrapper.offset();\n var mouse = (e.pageX - wrapper_offset.left) * (ul_width - wrapper_width) / wrapper_width;\n\n // scroll adjustments for both ends\n if(mouse < li_first) mouse = (e.pageX - wrapper_offset.left - li_first) * (ul_width - wrapper_width) / wrapper_width;\n if(mouse > li_first) mouse = (e.pageX - wrapper_offset.left) * (ul_width - wrapper_width + li_last + 15) / wrapper_width;\n\n wrapper.scrollLeft(mouse);\n });\n }\n }\n else if (\$('#om-maximenu-" . $menu . "').hasClass('om-maximenu-column')) {\n var wrapper = \$('#om-maximenu-" . $menu . " .om-menu-ul-wrapper'), \n wrapper_height = wrapper.height(),\n ul = \$('#om-menu-" . $menu . "'), \n ul_height = 0;\n\n \$('#om-menu-" . $menu . " .om-leaf').each(function(index) {\n ul_height += parseInt(\$(this).height(), 10);\n });\n\n // this will only be triggered when links won't fit inside the wrapper\n if (ul_height > wrapper_height) {\n \n var li_first = ul.find('li:first-child').height(),\n li_last = ul.find('li:last-child').height();\n\n // scroll adjustment to end link\n ul.height(ul_height + 30 + 'px')\n \n wrapper.css({overflow: 'hidden'});\n\n wrapper.mousemove(function(e){\n var wrapper_offset = wrapper.offset();\n var mouse = (e.pageY - wrapper_offset.top) * (ul_height - wrapper_height) / wrapper_height;\n\n // scroll adjustments for both ends\n if(mouse < li_first) mouse = (e.pageY - wrapper_offset.top - 5) * (ul_height - wrapper_height) / wrapper_height;\n\n wrapper.scrollTop(mouse);\n });\n }\n }\n }); ";
$longmenu_prev_next_scroll_js = "\n \$(document).ready(function(){\n if (\$('#om-maximenu-" . $menu . "').hasClass('om-maximenu-row')) {\n var wrapper = \$('#om-maximenu-" . $menu . " .om-menu-ul-wrapper'), \n wrapper_width = wrapper.width(),\n ul = \$('#om-menu-" . $menu . "'), \n ul_width = 0;\n \n \$('#om-menu-" . $menu . " .om-leaf').each(function(index) {\n ul_width += parseInt(\$(this).width(), 10);\n });\n \n // this will only be triggered when links won't fit inside the wrapper\n if (ul_width > wrapper_width) {\n\n var wrapper_height = 30,\n li_first = ul.find('li:first-child').width(),\n li_last = ul.find('li:last-child').width();\n \n wrapper.height(wrapper_height + 'px');\n \n \$('#om-menu-" . $menu . "-ul-wrapper').css('margin', '0 30px');\n \$('#om-menu-" . $menu . "').css('position', 'absolute');\n \n // scroll adjustment to end link\n ul.width(ul_width + 30 + 'px')\n \n wrapper.css({overflow: 'hidden'});\n \n \$('#om-maximenu-" . $menu . "').prepend('<div class=\"om-menu-scroller om-menu-previous\"><</div>');\n \$('#om-maximenu-" . $menu . "').append('<div class=\"om-menu-scroller om-menu-next\">></div>');\n \n \$('#om-maximenu-" . $menu . "').serialScroll({\n target:'#om-menu-" . $menu . "-ul-wrapper',\n items:'li.om-leaf', \n prev:'div.om-menu-previous',\n next:'div.om-menu-next',\n axis:'xy',\n navigation:'',\n duration: 250,\n force:true,\n onBefore:function( e, elem, \$pane, \$items, pos ){\n e.preventDefault();\n if( this.blur ) this.blur();\n },\n onAfter:function( elem ){\n //'this' is the element being scrolled (\$pane) not jqueryfied\n }\n });\n }\n }\n else if (\$('#om-maximenu-" . $menu . "').hasClass('om-maximenu-column')) {\n var wrapper = \$('#om-maximenu-" . $menu . " .om-menu-ul-wrapper'), \n wrapper_height = wrapper.height(),\n ul = \$('#om-menu-" . $menu . "'), \n ul_height = 0;\n\n \$('#om-menu-" . $menu . " .om-leaf').each(function(index) {\n ul_height += parseInt(\$(this).height(), 10);\n });\n \n // this will only be triggered when links won't fit inside the wrapper\n if (ul_height > wrapper_height) {\n\n var wrapper_width = wrapper.width(),\n li_first = ul.find('li:first-child').height(),\n li_last = ul.find('li:last-child').height();\n\n \$('#om-menu-" . $menu . "').css('position', 'absolute');\n \n // scroll adjustment to end link\n ul.height(ul_height + 30 + 'px');\n \n wrapper.css({overflow: 'hidden'});\n\n \$('#om-maximenu-" . $menu . "').prepend('<div class=\"om-menu-scroller om-menu-previous\">^</div>');\n //\$('#om-maximenu-" . $menu . "').append('<div class=\"om-menu-scroller om-menu-next\">v</div>');\n \$('<div class=\"om-menu-scroller om-menu-next\">v</div>').insertAfter(wrapper);\n \n \$('#om-maximenu-" . $menu . " .om-menu-scroller').width(wrapper_width);\n \n \$('#om-maximenu-" . $menu . "').serialScroll({\n target:'#om-menu-" . $menu . "-ul-wrapper',\n items:'li.om-leaf', \n prev:'div.om-menu-previous',\n next:'div.om-menu-next',\n axis:'xy',\n navigation:'',\n duration: 250,\n force:true,\n onBefore:function( e, elem, \$pane, \$items, pos ){\n e.preventDefault();\n if( this.blur ) this.blur();\n },\n onAfter:function( elem ){\n //'this' is the element being scrolled (\$pane) not jqueryfied\n }\n });\n }\n }\n }); ";
if ($longmenu == 'hover') {
drupal_add_js($longmenu_hover_scroll_js, "inline");
}
elseif ($longmenu == 'prev_next') {
drupal_add_js(OM_MAXIMENU_PATH . '/contrib/jquery.scrollTo.min.js');
drupal_add_js(OM_MAXIMENU_PATH . '/contrib/jquery.serialScroll.min.js');
drupal_add_js($longmenu_prev_next_scroll_js, "inline");
}
}