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 :

Animation JS au scroll vers le haut (vers le bas ça marche ! :) )


Sujet :

JavaScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2023
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Juillet 2023
    Messages : 2
    Par défaut Animation JS au scroll vers le haut (vers le bas ça marche ! :) )
    Bonjour à tous,

    Je suis en train de développer un site sur lequel je souhaite mettre en place une animation des titres au scroll. voici le lien de ma page test :
    https://mlc.agence-communication-brest.fr/test/


    Au scroll vers le bas les 2 lignes de titres se séparent bien pour aller chacune dans leur direction, au moment ou elles apparaissent visibles à l’écran.
    C’est quand on scroll vers le haut que réside mon problème. Le dernier titre visible reprend bien sa position initiale, lorsqu’on arrive à sa hauteur, mais cela remet aussi en position initiale tous les titres qui sont plus haut sur la page et donc non visibles.
    Je souhaiterais que chaque titre reprenne sa place uniquement quand on remonte à sa hauteur. Je pense qu’il ne manque pas grand chose, mais je suis très mauvais en JS et j’ai atteint mes limites techniques là-dessus ! Est-ce que quelqu’un aurait une petite idée de comment arriver à mes fins svp ? 🙂

    Voici les codes HTML, CSS et JS que j’ai généré.



    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <div class="toto ">
      <span class="titrehaut">Lorem ipsum</span><br>
      <span class="titrebas">dolor sit amet !</span>
    </div>
     
    <div class="toto ">
      <span class="titrehaut">Lorem ipsum</span><br>
      <span class="titrebas">dolor sit amet !</span>
    </div>
     
    <div class="toto ">
      <span class="titrehaut">Lorem ipsum</span><br>
      <span class="titrebas">dolor sit amet !</span>
    </div>


    Code css : 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
    .toto {
      overflow: visible;
    }
     
    .toto span {
      display: inline-block;
      vertical-align: middle;
      transition: transform 3.5s;
    }
     
    .titrehaut.translate-right {
      transform: translateX(100%);
    }
     
    .titrebas.translate-left {
      transform: translateX(-100%);
    }


    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    <script>
    var lastScrollPos = window.pageYOffset;
     
    window.addEventListener('scroll', function() {
      var titresHaut = document.querySelectorAll('.titrehaut');
      var titresBas = document.querySelectorAll('.titrebas');
      var currentScrollPos = window.pageYOffset;
     
      if (currentScrollPos > lastScrollPos) {
        // Scroll vers le bas
        titresHaut.forEach(function(element) {
          var rect = element.getBoundingClientRect();
          if (rect.top < window.innerHeight && rect.bottom >= 0) {
            element.classList.add('translate-right');
          } else {
            element.classList.remove('translate-right');
          }
        });
     
        titresBas.forEach(function(element) {
          var rect = element.getBoundingClientRect();
          if (rect.top < window.innerHeight && rect.bottom >= 0) {
            element.classList.add('translate-left');
          } else {
            element.classList.remove('translate-left');
          }
        });
      } else {
        // Scroll vers le haut
        titresHaut.forEach(function(element) {
                  element.classList.remove('translate-right');
        });
     
        titresBas.forEach(function(element) {
          element.classList.remove('translate-left');
        });
      }
     
      lastScrollPos = currentScrollPos;
    });
    </script>




    Un grand grand merci pour votre aide !



    Yann

  2. #2
    Membre Expert
    Avatar de Archimède
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2005
    Messages
    1 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 644
    Par défaut
    Salut, en fait dans ton else, tu ne gères que si tu te déplaces vers le haut et lorsque tes textes sont en dehors de la page, ils sont déjà revenus dans leur position initiale et le problème vient de là...
    Donc dans le principe, il faudrait que tu fasses un truc comme ça. A toi de simplifier ((optimiser 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
    21
    22
    23
    24
    25
    26
    27
     
     else {
                // Scroll vers le haut
     
                  titresHaut.forEach(function(element) {
                      var rect = element.getBoundingClientRect();
                      if (rect.top < window.innerHeight && rect.bottom >= 0){
                         element.classList.remove('translate-right');
                      }
                      else{
                        element.classList.add('translate-right');
                      }
                  });
     
                  titresBas.forEach(function(element) {
                    var rect = element.getBoundingClientRect();
                    if (rect.top < window.innerHeight && rect.bottom >= 0){
                       element.classList.remove('translate-left');
                    }
                    else{
                      element.classList.add('translate-left');
                    }
                  });
     
              }
              lastScrollPos = currentScrollPos;
            });

  3. #3
    Candidat au Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2023
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Juillet 2023
    Messages : 2
    Par défaut
    Merci Archimède ! ça correspond exactement à ce que je voulais faire !!!
    Une énorme merci pour ton aide précieuse !

    bon week-end !

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 11/12/2013, 22h09
  2. Div bloquée sur fenêtre au scroll vers le bas
    Par jiojio dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 20/09/2013, 15h44
  3. Positionner le scroll vers le bas
    Par pesti dans le forum GWT et Vaadin
    Réponses: 3
    Dernier message: 12/08/2009, 01h34
  4. TIA/EIA 568A : detrompeur vers le haut ou vers le bas
    Par devlopassion dans le forum Hardware
    Réponses: 3
    Dernier message: 02/11/2008, 20h56
  5. portage d'animation Flash de Win vers Linux
    Par Sarita04 dans le forum Intégration
    Réponses: 1
    Dernier message: 16/05/2008, 19h32

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