J'ai un titre flottant qui disparaît lorsque vous faites défiler la page. Fonctionne bien, mais pas sur mon iPad.
Lorsque je fais défiler la page vers le haut, le menu de navigation apparaît comme prévu, mais dès que je lâche la page, il disparaît à nouveau. Il apparaît également lorsque la page atteint le bas
<!doctype html> <html> <head> <title>Our Funky HTML Page</title> <meta name="description" content="Our first page"> <meta name="keywords" content="html tutorial template"> <style> .main-header { width: 100%; position: fixed; top: 0; background-color: #ffff00; padding: 0.5rem 2.0rem 0.5rem 1.9rem; height: 7.0rem; z-index: 50; display: flex; margin: auto; align-items: center; justify-content: space-between; transition: top 0.4s; /* Transition effect when sliding down (and up) */ } .content { width: 100%; background-color: #ff0000; height: 2000px; } </style> <script> var prevScrollpos = window.pageYOffset; window.onscroll = function() { var currentScrollPos = window.pageYOffset; // if ( ( (prevScrollpos > currentScrollPos) || ( currentScrollPos < 50 ) ) ){ if ( ( (prevScrollpos >= currentScrollPos) ) ){ document.getElementById("main-header").style.top = "0rem"; } else { document.getElementById("main-header").style.top = "-8rem"; // "-70px"; } prevScrollpos = currentScrollPos; } </script> </head> <body> <div class="main-header" id="main-header"></div> <div class="content" ></div> </body> </html>
Ce site Web est construit avec vuejs
Parties associées :
<!doctype html> <html> <head> <title>Our Funky HTML Page</title> <meta name="description" content="Our first page"> <meta name="keywords" content="html tutorial template"> <style> .main-header { width: 100%; position: fixed; top: 0; background-color: #ffff00; padding: 0.5rem 2.0rem 0.5rem 1.9rem; height: 7.0rem; z-index: 50; display: flex; margin: auto; align-items: center; justify-content: space-between; transition: top 0.4s; /* Transition effect when sliding down (and up) */ } .content { width: 100%; background-color: #ff0000; height: 2000px; } </style> <script> var prevScrollpos = window.pageYOffset; window.onscroll = function() { var currentScrollPos = window.pageYOffset; // if ( ( (prevScrollpos > currentScrollPos) || ( currentScrollPos < 50 ) ) ){ if ( ( (prevScrollpos >= currentScrollPos) ) ){ document.getElementById("main-header").style.top = "0rem"; } else { document.getElementById("main-header").style.top = "-8rem"; } prevScrollpos = currentScrollPos; } </script> </head> <body> <div class="main-header" id="main-header"> </div> <div class="content" > </div> </body> </html>
Je suis aux prises avec ce problème depuis un moment, alors voici ce que j'ai trouvé :
Le problème est que sur iOS, la page rebondit autour des bords supérieur et inférieur, de sorte que la valeur window.pageYOffset peut être négative et plus grande que la hauteur réelle de la page. La condition
prevScrollpos >= currentScrollPos
n’est donc pas suffisante.Une solution consiste à désactiver l'effet de rebond en ajoutant
overscroll-behavior: none;
à l'élément html.La bonne solution est d'étendre la condition aux cas extrêmes :