Bonjour,

je suis en train de faire mon petit design et je but sur le menu j'ai fais une courte vidéo pour vous rendre compte du souci https://youtu.be/Q4ZcalyzQeo

En gos voilà le menu en srollant dois resté sur sa position même si j'acutualise la page, mais il revien a sa position initial, je ne suis pas très fort en JS je ne connais pas la méthod

En vous remerciant, bonne soirée.

      <script>
      window.onscroll = function() {scrollFunction()};

      function scrollFunction() {
        if (document.body.scrollTop > 80 || document.documentElement.scrollTop > 80) {
          document.getElementById("boxnavbar").style.padding = "0";
          document.getElementById("boxnavbar").style.backgroundColor = "#101010";
          document.getElementById("boxnavbar").style.boxShadow = "0 0 1px 3px rgba(0, 0, 0, 0.3)";
          document.getElementById("boxnavbar").style.transition = ".2s";
          document.getElementById("roundednav").style.boxShadow = "unset";
          document.getElementById("roundednav").style.padding = "0";
          document.getElementById("roundednav").style.transition = ".2s";
          document.getElementById("logo").style.fontSize = "25px";
        } else {
          document.getElementById("boxnavbar").style.padding = "30px 10px";
          document.getElementById("boxnavbar").style.backgroundColor = "transparent";
          document.getElementById("boxnavbar").style.boxShadow = "unset";
          document.getElementById("boxnavbar").style.transition = ".2s";
          document.getElementById("roundednav").style.boxShadow = "0 0 1px 3px rgba(0, 0, 0, 0.3)";
          document.getElementById("roundednav").style.padding = "10px";
          document.getElementById("roundednav").style.transition = ".2s";
          document.getElementById("logo").style.fontSize = "35px";
        }
      }
      </script>

3 réponses


Levy Stephane
Réponse acceptée

Bonjour une chose que tu pourais faire c'est de sauvegarder l'état de ta nav dans le localStorage, puis mettre tes propriété css dans des fonction et appeler ces fonction en fonction de la valeur de l'état de ta nav exemple
Tu mets tes styles dans des fonctions

function boxNavBar() {
    document.getElementById("boxnavbar").style.padding = "0";
    document.getElementById("boxnavbar").style.backgroundColor = "#101010";
    document.getElementById("boxnavbar").style.boxShadow = "0 0 1px 3px rgba(0, 0, 0, 0.3)";
    document.getElementById("boxnavbar").style.transition = ".2s";
    document.getElementById("roundednav").style.boxShadow = "unset";
    document.getElementById("roundednav").style.padding = "0";
    document.getElementById("roundednav").style.transition = ".2s";
    document.getElementById("logo").style.fontSize = "25px";
}

function roundedNav() {
    document.getElementById("boxnavbar").style.backgroundColor = "transparent";
    document.getElementById("boxnavbar").style.boxShadow = "unset";
    document.getElementById("boxnavbar").style.transition = ".2s";
    document.getElementById("roundednav").style.boxShadow = "0 0 1px 3px rgba(0, 0, 0, 0.3)";
    document.getElementById("roundednav").style.padding = "10px";
    document.getElementById("roundednav").style.transition = ".2s";
    document.getElementById("logo").style.fontSize = "35px";
}

En suite tu fais ta condition

window.onscroll = function() {scrollFunction()};

function scrollFunction(){
    if (document.body.scrollTop > 80 || document.documentElement.scrollTop > 80){
        localStorage.setItem("roundednav", "false");
        boxNavBar();
    }else{
        localStorage.setItem("roundednav", "true");
        roundedNav();
    }
}

dans le code de haut , si le scroll dépasse 80px on stock l'état de la nav dans le localStorage avec pour nom roundednav et pour valeur false
dans le cas contraire, donc dans le else on modifie cette valeur en true.
en suit tu peut donc faire une condition au tout debut de ton code et verifier si roundednav==false ou roundednav==true appliquer le style qui correspond

let navSate = localStorage.getItem("roundednav");
if(navSate!=null){
    if(navSate=='false'){
        boxNavBar();
    }else{
        roundedNav();
    }
}

du coup lorsque ta page va etre charger ou recharger c'est selon, on va dabord verifier si notre roundednav existe dans le localStorage, s'il n'existe pas ce code sera ignoré et passera à la suite mais s'il existe on verifie s'il vaut false ou true et on applique le css correspondant en executant soit boxNavBar() soit roundedNav()

popotte
Réponse acceptée

Hello :)

Alors pour l'actualisation tu peux simplement ajouter un event onload:

     window.onscroll = function() {scrollFunction()};
    document.addEventListener('DOMContentLoaded', (event) => {
        scrollFunction()
    })

      // La suite de ton JS...

Comme ça ta function se lance quand le contenu html est chargé, ett tu gardes aussi l'event scroll ^^

Sinon petit avis perso: ce serait plus propre de mettre tout ton style dans des class, et ensuite appliquer la class en JS :p

//CSS
#boxnavbar {
    /* le style initial qui est dans le else */
}

#boxnavbar.scrolled_nav {
    /* le style qui est dans le if */
}

#roundednavbar {
    /* le style initial qui est dans le else */
}

#roundednavbar.scrolled_nav {
    /* le style qui est dans le if */
}

// JS
 function scrollFunction() {
        if (document.body.scrollTop > 80 || document.documentElement.scrollTop > 80) {
          document.getElementById("boxnavbar").classList.add('scrolled_nav')
          document.getElementById("roundednav").classList.add('scrolled_nav')
          document.getElementById("logo").style.fontSize = "25px";
        } else {
          document.getElementById("boxnavbar").classList.remove('scrolled_nav')
          document.getElementById("roundednav").classList.remove('scrolled_nav')
          document.getElementById("logo").style.fontSize = "35px";
        }
  }
neecride
Auteur

Salut,

Je vais peaufiné par la suite avec les css mais en attendant j'ai le résultat escompté si c'est bon pour vous niveau js, j'avoue quand même que c'est le menu de instant gamin j'ai découvert le site il y a 1 semaine et j'ai kiffer le menu.

je vais surement créer un topic pour mon editeur markdown lol

Just pour voir le résultat : https://youtu.be/zLWoEURM0ao c'est pas très smooth mais c'est ce que je voulais :)

//menu
$(document).ready(function() {
  updateNavbarOnScroll();
  restoreNavbarPosition();
});

function boxNavBar() {
  $('#boxnavbar').css({
    'padding': '0',
    'background-color': '#101010',
    'box-shadow': '0 0 1px 3px rgba(0, 0, 0, 0.3)',
    'transition': '.2s'
  });
  $('#roundednav').css({
    'box-shadow': 'unset',
    'padding': '0',
    'transition': '.2s'
  });
  $('#logo').css({
    'font-size': '25px'
  });
}

function roundedNav() {
  $('#boxnavbar').css({
    'padding': '30px 10px',
    'background-color': 'transparent',
    'box-shadow': 'unset',
    'transition': '.2s'
  });
  $('#roundednav').css({
    'box-shadow': '0 0 1px 3px rgba(0, 0, 0, 0.3)',
    'padding': '10px',
    'transition': '.2s'
  });
  $('#logo').css({
    'font-size': '35px'
  });
}

function updateNavbarOnScroll() {
  window.onscroll = function() {scrollFunction()};

  function scrollFunction(){
      if (document.body.scrollTop > 80 || document.documentElement.scrollTop > 80){
          localStorage.setItem("roundednav", "false");
          boxNavBar();
      }else{
          localStorage.setItem("roundednav", "true");
          roundedNav();
      }
  }
}

function restoreNavbarPosition() {
  let navSate = localStorage.getItem("roundednav");
  if(navSate!=null){
      if(navSate=='false'){
          boxNavBar();
      }else{
          roundedNav();
      }
  }
}