Exemple de fichier js de menu dynamique responsive :
jQuery(document).ready(function(){ // Console de débogage pour mobile function mobile_log (message) { if( jQuery('#mobile_log')[0] == null ) { jQuery('body > *').last().after('<div id="mobile_log" style="bottom:0;background-color:white;padding:5px;font-family:monospace;left:0;-moz-box-sizing:content-box;box-sizing:content-box;width:100%;">--- Console pour mobile ---<br/></div>' ); } jQuery("#mobile_log").html( jQuery("#mobile_log").html()+message+"<br/>-----<br/>" ); } function isMobile() { if( (jQuery(window).width() > jQuery(window).height() && jQuery(window).width() <= 900) || (jQuery(window).width() <= jQuery(window).height() && jQuery(window).width() <= 700) ) { return true; } else { return false; } } function isMobilePortraitView() { if( (jQuery(window).width() > jQuery(window).height() && jQuery(window).width() <= 400) || (jQuery(window).width() <= jQuery(window).height() && jQuery(window).width() <= 700) ) { return true; } else { return false; } } // Reset du viewport si nécessaire if( jQuery("#resetViewport")[0] ) { var zed = setTimeout(function() { jQuery('meta[name="viewport"]').attr("content", "width=device-width, initial-scale=1.0"); },200); } // Si on est pas sur une des pages du menu, on remet leur opacité à 1 if(!jQuery('.current-menu-item').length) { jQuery('.menu-item, .sous-menu-pineau a').css({'opacity':1}); } function checkWidth() { jQuery('#image-produit').height("").width("");// Remise à zéro pour les calculs if(!isMobile()) { // On enlève la fonction d'affichage du #menu > div.table-cell jQuery('.sous-menu-pineau').off(); jQuery('#menu').off(); if( !jQuery('li.sous-menu-pineau').hasClass('current-menu-parent') ) { jQuery('.sub-menu').dequeue().stop().fadeOut(0); } jQuery('#menu > div.table-cell').dequeue().stop().fadeIn(0); // Gestion basique de l'animation du sous-menu pour le bureau jQuery('.sous-menu-pineau').on('mouseover', function() { jQuery('.sub-menu').dequeue().stop().fadeIn(400); }); jQuery('.sous-menu-pineau').on('mouseleave', function() { if( !jQuery('.sous-menu-pineau').hasClass('current-menu-ancestor') ) { var timer; timer = setTimeout(function() { jQuery('.sub-menu').fadeOut(1000); }, 2000); } }); } else { // Gestion du redimentionnement des images produit if(isMobilePortraitView()) { if(jQuery(window).height()*0.9 / (jQuery("#image-produit").attr("height")*1) * (jQuery("#image-produit").attr("width")*1) > jQuery(window).width() ) { jQuery('#image-produit').width( jQuery(window).width()*0.92+"px" ).height("auto"); } else if (jQuery('#image-produit').height() > jQuery(window).height()*0.9) { jQuery('#image-produit').height( jQuery(window).height()*0.9+"px" ).width("auto"); } } // On enlève les fonctions d'animation du sous-menu jQuery('.sous-menu-pineau').off(); jQuery('#menu').off(); jQuery('.sub-menu').dequeue().stop().fadeIn(0); if( jQuery('#menu-texte-mobile:hidden')[0] ) { jQuery('#menu > div.table-cell').dequeue().stop().fadeOut(0); } // On applique l'animation du #menu > div.table-cell entier jQuery('#menu').on('click', function(e) { if( jQuery(e.target).parent().is(jQuery('div#menu')) ) { jQuery('#menu > div.table-cell').fadeToggle(400); } }); } } checkWidth();// Premier lancement jQuery(window).on('resize', function() { checkWidth(); }); });