Bonjour,
Je suis nouveau dans le monde du dev et c'est la première fois que je post sur un forum d'entraide
Je crée un site "vitrine" pour une boite de communication, elle veut un menu header avec uniquement leur logo et un menu burger à gauche qui ouvre la nav. Elle veut également que son menu disparaisse quand on scroll vers le bas et réapparaît quand on scroll vers le haut : jusque là tout vas bien.
Voici mon problème : J'ai une classe "nav-is-stuck" qui est nativement présent dans mon code et qui à pour fonction d'être présent quand on scroll vers le haut (et donc de faire apparaître le menu) et de disparaître quand on scroll vers le bas. Sauf que j'ai besoin que cette classe "nav-is-stuck" ne commence qu'a disparaître a partir d'un certain endroit dans mon code pour laisser le menu apparent quand l'utilisateur est en haut du site.
Je ne sais pas si je suis bien clair, je vous joint le code HTML
Et le code JS pour gérer le scroll
Merci d'avance pour votre aide ... je suis un peu désemparé ...
Cordialement
Cyril
Modifié par Cyril06750 (15 Jan 2021 - 18:10)
Je suis nouveau dans le monde du dev et c'est la première fois que je post sur un forum d'entraide
Je crée un site "vitrine" pour une boite de communication, elle veut un menu header avec uniquement leur logo et un menu burger à gauche qui ouvre la nav. Elle veut également que son menu disparaisse quand on scroll vers le bas et réapparaît quand on scroll vers le haut : jusque là tout vas bien.
Voici mon problème : J'ai une classe "nav-is-stuck" qui est nativement présent dans mon code et qui à pour fonction d'être présent quand on scroll vers le haut (et donc de faire apparaître le menu) et de disparaître quand on scroll vers le bas. Sauf que j'ai besoin que cette classe "nav-is-stuck" ne commence qu'a disparaître a partir d'un certain endroit dans mon code pour laisser le menu apparent quand l'utilisateur est en haut du site.
Je ne sais pas si je suis bien clair, je vous joint le code HTML
<!DOCTYPE html>
<html lang="fr" class="nav-is-stuck">
<header id="header" role="banner">
<div class="menu-wrap">
<input type="checkbox" onchange="changeColorToggle(this) "class="toggler">
<div class="hamburger">
<div></div>
</div>
<div class="menu">
<div>
<div>
<ul>
<li><a href="#">Accueil</a></li>
<li><a href="#">Notre Savoir-faire</a></li>
<li><a href="#">Nos réalisations</a></li>
<li><a href="#">L' équipe</a></li>
<li><a href="#">Contact</a></li>
</ul>
</div>
</div>
</div>
</div>
<a href="#"><img class="logo-cynes" src="/assets/img/CYNES-logo-noir.png" alt="Logo Cynes"></a>
</header>
Et le code JS pour gérer le scroll
(function scroll(w, d)
{
var el_html = d.documentElement,
el_body = d.getElementsByTagName('body')[0],
header = d.getElementById('header'),
lastScroll = w.pageYOffset || el_body.scrollTop,
menuIsStuck = function (triggerElement, wScrollTop, lastScroll)
{
regexp = /(nav\-is\-stuck)/i,
classFound = el_html.className.match(regexp),
navHeight = header.offsetHeight,
bodyRect = el_body.getBoundingClientRect(),
scrollValue = triggerElement ? triggerElement.getBoundingClientRect().top - bodyRect.top - navHeight : 0;
if (wScrollTop > scrollValue && !classFound && wScrollTop < lastScroll)
{
el_html.className = el_html.className + 'nav-is-stuck';
el_body.style.paddingTop = navHeight + 'px';
}
if (classFound && wScrollTop > lastScroll)
{
el_html.className = el_html.className.replace(regexp, '');
el_body.style.paddingTop = '0';
}
},
onScrolling = function ()
{
var wScrollTop = w.pageYOffset || el_body.scrollTop;
menuIsStuck(d.querySelector('header'), wScrollTop, lastScroll);
lastScroll = wScrollTop;
};
w.addEventListener('scroll', function ()
{
if (document.querySelector('.toggler').checked == false)
w.requestAnimationFrame(onScrolling);
});
}(window, document));
Merci d'avance pour votre aide ... je suis un peu désemparé ...
Cordialement
Cyril
Modifié par Cyril06750 (15 Jan 2021 - 18:10)