IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

Flèche pour remonter en haut de page se comporte bizarrement


Sujet :

JavaScript

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    189
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 189
    Points : 79
    Points
    79
    Par défaut Flèche pour remonter en haut de page se comporte bizarrement
    Bonjour ! J'ai un petit souci avec ma flèche pour remonter en haut de l'écran que je n'avais pas avant... quand j'ouvre ma page et que je scroll vers le bas elle n'apparait pas. Elle reste en display: none, par contre si j'actualise ma page en étant au milieu de la page par exemple, elle apparait bien, sauf qu'elle ne disparait pas une fois que je suis en haut de page et donc reste en display: block... J'ai revu mon code concernant cette partie mais je comprend pas :
    J'utilise Tailwind et Sass

    index.php
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        <div id="arrow" class="arrow z-40 cursor-pointer">
            <svg width="50px" height="50px" viewBox="0 0 512 512" xmlns="http://www.w3.org/2000/svg"><title>ionicons-v5-a</title><polyline points="112 244 256 100 400 244" style="fill:none;stroke:#9ca3af;stroke-linecap:round;stroke-linejoin:round;stroke-width:48px"/><line x1="256" y1="120" x2="256" y2="412" style="fill:none;stroke:#9ca3af;stroke-linecap:round;stroke-linejoin:round;stroke-width:48px"/></svg>
        </div>

    script.js
    Code JavaScript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    let posY = window.scrollY;
    let btn = document.getElementById('arrow');
    if (posY > 1000){
        btn.style.display = 'block';
    }else{
        btn.style.display = 'none';
    }
    btn.addEventListener('click', ()=>{
        window.scrollTo({
            top: 0,
            left: 0,
            behavior: 'smooth',
        })
    });

    main.scss
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    .arrow{
        position: fixed;
        bottom: 2%;
        right: 2%;
    }

    Du coup je me demande si le problème ne viendrait pas d'autre chose... Vu que je travaille avec Tailwind, beaucoup de style css est réalisé sur l'index, on ajoute à cela un fichier scss et du js... est-ce un souci d'optimisation ? Je précise que je travail en locale avec Wamp. Qu'en pensez vous ? Merci

  2. #2
    Membre émérite Avatar de darkstar123456
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 1 896
    Points : 2 835
    Points
    2 835
    Par défaut
    Bonjour,


    Vous n'avez pas d'événement "on scroll" dans votre javascript; donc le code s'exécute une seule fois seulement, au chargement évidemment

    EDIT : Voici un Codepen avec quelques corrections : https://codepen.io/DarkStar123456/pen/ExXyRZw

    Corrections :
    1. J'ai tout mis dans une fonction comme ça on peut facilement exécuter le code au load et au scroll
    2. Plutôt que de mettre une valeur fixe pour afficher la flèche, j'ai plutôt fait en sorte de l'afficher dès qu'on a scroller d'une hauteur de window if (window.scrollY > window.innerHeight){
    3. Pour éviter un effet de clignotement de la flèche au chargement de la page, on ajoute style="display: none;" afin de la cacher par défaut, c'est le JS qui décidera quoi faire ensuite
    4. Utilisation de la balise <button> plutôt que <div> car c'est quand même plus propre !


    Le code :
    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    let btn = document.getElementById('arrow');
     
    function goToTopArrow() {
      if (window.scrollY > window.innerHeight){
          btn.style.display = 'block';
      }else{
          btn.style.display = 'none';
      }
    }
     
    goToTopArrow();
    window.addEventListener('scroll', goToTopArrow);
     
    btn.addEventListener('click', ()=>{
        window.scrollTo({
            top: 0,
            left: 0,
            behavior: 'smooth',
        })
    });

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    189
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 189
    Points : 79
    Points
    79
    Par défaut
    Super ! Ça marche nickel ! Merci beaucoup !!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Deux nouveautés pour le système de navigation en haut de page
    Par Janitrix dans le forum Evolutions du club
    Réponses: 0
    Dernier message: 24/07/2009, 12h25
  2. pied de page qui remonte en haut...
    Par gazelle dans le forum Mise en page CSS
    Réponses: 8
    Dernier message: 28/04/2008, 12h08
  3. [jquery] Faire un simple scroll pour "haut de page"
    Par Tchupacabra dans le forum jQuery
    Réponses: 2
    Dernier message: 11/02/2008, 11h29
  4. popup sans remonter en haut de la page
    Par cancrat dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 09/08/2007, 15h03
  5. # et retour en haut de page
    Par littleqi dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 11/12/2004, 16h08

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo