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 :

Scrollbar du body ?


Sujet :

JavaScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    opérateur
    Inscrit en
    Avril 2023
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : opérateur

    Informations forums :
    Inscription : Avril 2023
    Messages : 30
    Par défaut Scrollbar du body ?
    Bonjour,

    Y a t'il un élément particulier à cibler pour le Scrollbar de la page ?

    J'ai testé sur getElementsByTagName("BODY")[0]; mais le calcul ne se fait pas.
    Peut-être normal puisque l'élément scroll ne fait pas partie des Propriétés de l'objet corps ?
    Ou erreur de code..

    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
    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
    <!DOCTYPE html>
    <html>
    <style>
    #myDIV {
      height: 250px;
      width: 250px;
      overflow: auto;
    }
     
    #content {
      height: 800px;
      width: 2000px;
      background-color: coral;
    }
    </style>
     
    <body onscroll="myFunction()">
    <h1>The Element Object</h1>
    <h2>The scrollTop and scrollLeft Properties</h2>
     
    <p>Scroll the content below to display the number of pixels it is scrolled.</p>
     
    <div id="myDIV">
      <div id="content">Scroll me!</div>
    </div>
     
    <p id="demo"></p>
     
    <script>
    function myFunction() {
      const element = document.getElementsByTagName("BODY")[0];
      let x = element.scrollLeft;
      let y = element.scrollTop;
      document.getElementById ("demo").innerHTML = "Horizontally: " + x.toFixed() + "<br>Vertically: " + y.toFixed();
    }
    </script>
     
    </body>
    </html>

    Pour le résultat que je cherche, il y a un petit désagrément avec les scrollbar. Lorsque un display est ouvert en z-index niveau supérieur avec un [c=CSS]overflow:auto;[/B] il se passe que quand ce display scrollbar a terminer sa course et que l'on continue à scroller avec la souris, c'est le scrollbar de la page générale qui se met à défiler. Du coup je cherche à fixer ce dernier. Si cela est possible !

    Merci de vos retours et piste

  2. #2
    Membre averti
    Homme Profil pro
    opérateur
    Inscrit en
    Avril 2023
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : opérateur

    Informations forums :
    Inscription : Avril 2023
    Messages : 30
    Par défaut semi avancée
    j'ai trouvé ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    window.scroll(x-coord, y-coord)
    Se rapporte à window.

    Mais s'il déplace bien les coordonnées de la scrollbar, je ne vois pas d'option pour la rendre fixe.


  3. #3
    Expert confirmé Avatar de Toufik83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    2 499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 2 499
    Par défaut
    Bonjour,

    Vous voulez récupérer le scroll du body ou bien celui de <div id="myDIV"> ?

    Si c'est le deuxième élément, déplacez la propriété onscroll vers l'élément pour qu'il devient comme ça <div id="myDIV" onscroll="myFunction()"> puis vous pouvez essayer ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    function myFunction() {
      const element = document.getElementById("myDIV");
      let x = element.scrollLeft;
      let y = element.scrollTop;
      document.getElementById ("demo").innerHTML = "Horizontally: " + x.toFixed() + "<br>Vertically: " + y.toFixed();
    }

  4. #4
    Membre averti
    Homme Profil pro
    opérateur
    Inscrit en
    Avril 2023
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : opérateur

    Informations forums :
    Inscription : Avril 2023
    Messages : 30
    Par défaut
    Bonjour,

    De la sorte ce code est fonctionnel. Tout à fait.

    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
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    <!DOCTYPE html>
    <html>
    <style>
    #myDIV { height: 250px; width: 250px; overflow: auto; }
    #content { height: 800px; width: 2000px; background-color: coral; }
    </style>
     
    <body>
     
    <div id="myDIV" onscroll="myFunction()">
      <div id="content">Scroll me!</div>
    </div>
     
    <p id="demo"></p>
     
    <script>
    function myFunction() {
      const element = document.getElementById("myDIV");
      let x = element.scrollLeft;
      let y = element.scrollTop;
      document.getElementById ("demo").innerHTML = "Horizontally: " + x.toFixed() + "<br>Vertically: " + y.toFixed();
    }
    </script>
     
    </body>
    </html>

    Je vous met ci-bas un autre code. En le testant vous vous apercevrez que lorsque l'on positionne la souris dans le myDIV, que lorsque la y scrollbar arrive à la fin et que, vous continuez à scroller quelques tour avec la souris, il arrive un moment ou ce sera la scrollbar du document qui défilera.

    J'aurai souhaiter que, lorsque par un mouseenter sur myDIV, la scrollbar du document se fixe et se dé-fixe en mouseleave.

    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
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    <!DOCTYPE html>
    <html>
    <style>
    #contenuGlobal { width: 100%; height: 200vh;}
    #myDIV { height: 250px; width: 250px; overflow: auto;  }
    #content { height: 800px; width: 2000px; background-color: coral; }
    </style>
     
    <body>
     
    <div id="contenuGlobal">
     
    <div id="myDIV" onscroll="myFunction()">
      <div id="content">Scroll me!</div>
    </div>
    <p id="demo"></p>
     
    </div>
     
    <script>
    function myFunction() {
      const element = document.getElementById("myDIV");
      let x = element.scrollLeft;
      let y = element.scrollTop;
      document.getElementById ("demo").innerHTML = "Horizontally: " + x.toFixed() + "<br>Vertically: " + y.toFixed();
    }
    </script>
     
    </body>
    </html>

  5. #5
    Expert confirmé Avatar de Toufik83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    2 499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 2 499
    Par défaut
    Bonjour,

    Vous pouvez désactiver le scroll du body lors d'un mouseenter (souris dedans) sur le div et le réactiver lors d'un mouseleave (souris dehors), pour ceci ajoutez ces deux écouteurs d'événements dans votre script JS :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    document.getElementById('myDIV').addEventListener('mouseenter',function(){
    	document.body.classList.add('noScroll');
    });
    document.getElementById('myDIV').addEventListener('mouseleave',function(){
    	document.body.classList.remove('noScroll');
    });
    Et la classe noScroll :
    Code css : Sélectionner tout - Visualiser dans une fenêtre à part
    .noScroll{overflow:hidden}

  6. #6
    Membre averti
    Homme Profil pro
    opérateur
    Inscrit en
    Avril 2023
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : opérateur

    Informations forums :
    Inscription : Avril 2023
    Messages : 30
    Par défaut overflow:hidden
    Bonjour,

    Le test a bien été effectué.

    Petit problème.

    En overflow:hidden, le scroll disparaît, mais l'espace que celui-ci occupait initialement est automatiquement remplit par la page, qui elle, s'agrandit pour combler ce vide.


    Je ne sais pas s'il est possible de fixer la scollbar, mais cette histoire de style m'a donné une petite idée ( fonctionnelle ) qui pourrait bien faire l'affaire.

    Code js : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    document.getElementById('div').addEventListener('mouseleave',function(){
       var styleElement = document.createElement("style");
       styleElement.appendChild(document.createTextNode("::-webkit-scrollbar-thumb { background-image: url('img/logo_scroll_out.png'); }"));
       document.getElementsByTagName("head")[0].appendChild(styleElement);
    });
    document.getElementById('div').addEventListener('mouseenter',function(){
       var styleElement = document.createElement("style");
       styleElement.appendChild(document.createTextNode("::-webkit-scrollbar-thumb { background-image: none;}"));
       document.getElementsByTagName("head")[0].appendChild(styleElement);
    });

    A défaut de merle

Discussions similaires

  1. Défilement d'une div container avec scrollbar sur body
    Par krunch dans le forum Mise en page CSS
    Réponses: 0
    Dernier message: 08/03/2015, 23h02
  2. Scrollbar d'une div dans body
    Par defacta dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 29/10/2014, 11h26
  3. Scrollbar dans le body
    Par defacta dans le forum Mise en page CSS
    Réponses: 7
    Dernier message: 28/10/2006, 16h25
  4. [Listbox] ScrollBar Horizontal
    Par haleem dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 20/04/2005, 07h53
  5. [visuel]ScrollBar et StatusBar
    Par psl dans le forum Composants VCL
    Réponses: 2
    Dernier message: 24/08/2002, 21h28

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