J'ai une fonction hashchange configurée pour afficher/masquer différentes sections d'une page à peu près sans avoir 7 pages séparées. Tout fonctionne bien, très bien, il y a juste une petite chose qui me dérange, quand le contenu pertinent est affiché à l'écran, par exemple: #about01
si vous cliquez à nouveau sur le bouton de menu, le navigateur saute vers le haut de cette div, Je ne veux pas arriver.
Voici mon jQuery:jquery: hashchange, empêche de sauter en hash
jQuery(document).ready(function(){
jQuery(window).on('hashchange', function(){
var hashFound = determineContent();
if(hashFound) return false;
});
function determineContent(){
var hash = window.location.hash;
jQuery('.about').hide();
jQuery('.sub-menu').each(function(){
if (jQuery(this).attr('hook') === hash.replace('#about', '')) {
jQuery('#about'+jQuery(this).attr('hook')).fadeIn();
return true;
}
});
jQuery('html, body').animate({scrollTop:0}, 'slow');
return false;
}
determineContent();
});
HTML:
<div id="sub-menu">
<li id="sub-menu-01" class="sub-menu" hook="01"><a href="#about01">TEST</a></li>
<li id="sub-menu-02" class="sub-menu" hook="02"><a href="#about02">TEST</a></li>
<li id="sub-menu-03" class="sub-menu" hook="03"><a href="#about03">TEST</a></li>
<li id="sub-menu-04" class="sub-menu" hook="04"><a href="#about04">TEST</a></li>
<li id="sub-menu-05" class="sub-menu" hook="05"><a href="#about05">TEST</a></li>
<li id="sub-menu-06" class="sub-menu" hook="06"><a href="#about06">TEST</a></li>
<li id="sub-menu-07" class="sub-menu" hook="07"><a href="#about07">TEST</a></li>
</div>
<div id="about01" class="about">CONTENT HERE
</div>
<div id="about02" class="about">CONTENT HERE
</div>
<div id="about03" class="about">CONTENT HERE
</div>
<div id="about04" class="about">CONTENT HERE
</div>
<div id="about05" class="about">CONTENT HERE
</div>
<div id="about06" class="about">CONTENT HERE
</div>
<div id="about07" class="about">CONTENT HERE
</div>
Comme je le dis, si #about01
est affiché, et l'utilisateur clique alors sur #sub-menu-01
à nouveau, la fenêtre défile vers le haut de cette div , comme c'est le comportement normal pour les hashs dans url. Est-ce un moyen d'empêcher le comportement par défaut et ne pas faire défiler vers le haut de cette div sur le clic?
En outre, j'essaie de comprendre s'il y a un moyen d'afficher #about01
sur le chargement de la page de www.website.com/about
au lieu d'avoir à mettre www.website.com/about/#about01
etc?
Malheureusement, cela ne semble pas fonctionner, le navigateur défile toujours à la div pertinente si vous cliquez deux fois? – user1374796
@ user1374796 J'ai écrit un violon avec votre code, mais je ne suis pas capable de reproduire le problème. Pourriez-vous le modifier afin que je puisse vous donner une réponse plus précise? http://jsfiddle.net/dnsxf/1/ – davids
merci pour cela, je l'ai mis à jour: http://jsfiddle.net/dnsxf/2/ J'ai fait les sous-menus vraiment élevés de sorte que vous pouvez voir que si vous cliquez sur un '.sub-menu' deux fois le navigateur défile vers la div, ce qui n'est pas ce que je veux – user1374796