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 :

Savoir si un élément est affiché ou non


Sujet :

JavaScript

  1. #1
    Rédacteur
    Avatar de romaintaz
    Homme Profil pro
    Java craftsman
    Inscrit en
    Juillet 2005
    Messages
    3 790
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Java craftsman
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2005
    Messages : 3 790
    Points : 7 275
    Points
    7 275
    Par défaut Savoir si un élément est affiché ou non
    Bonjour,

    J'aimerais savoir, via une fonction Javascript, si un élément donné de ma page est visible. Je ne parle pas de la visibilité du genre element.style.display, je parle d'une visibilité en rapport au scroll vertical (ou horizontal) de ma page.
    Autrement dit, j'aimerais savoir si à un instant T, un élément E est bien présent sur la partie affichée de ma page.

    J'imaginais procéder comme suit : Je calcule la position de E dans ma page (par exemple comme ça), puis je calcule les coordonnées de la partie visible de la page, et je regarde sur les positions de E sont bien dans cette zone.
    Hélas, je ne sais pas comment calculer les coordonnées de la partie visible de mon écran !

    Est-il possible de faire ça ?

    Merci.

  2. #2
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 640
    Points : 66 663
    Points
    66 663
    Billets dans le blog
    1
    Par défaut
    En fouillant dasn ma mémoire il me semble qu'il existe une propriété sous IE ... et toujours de mémoire ça devait être javatwister qui m'en avait parlé ...
    Mais quel credit accorder à ma mémoire ... ???

  3. #3
    Rédacteur
    Avatar de romaintaz
    Homme Profil pro
    Java craftsman
    Inscrit en
    Juillet 2005
    Messages
    3 790
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Java craftsman
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2005
    Messages : 3 790
    Points : 7 275
    Points
    7 275
    Par défaut
    Ah, juste pour info : mon appli ne tourne que sur IE 6...

  4. #4
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 640
    Points : 66 663
    Points
    66 663
    Billets dans le blog
    1
    Par défaut
    je dois confondre avec ScrollIntoViex ...

    parcontre tu peux essayer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    <script type="text/javascript">
     
    function IsVisible(obj){
    var d=document,w=window
    var Elm=d.getElementById(obj)
    var relTop=Elm.offsetTop-(w.scrollY||d.body.scrollTop)
    var docHg=w.innerHeight||d.documentElement.offsetHeigh t
    if(relTop<-20||(+relTop+Elm.offsetHeight/4)>docHg){return false;}
    else {return true}
     
    }
    </script>

  5. #5
    Rédacteur
    Avatar de romaintaz
    Homme Profil pro
    Java craftsman
    Inscrit en
    Juillet 2005
    Messages
    3 790
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Java craftsman
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2005
    Messages : 3 790
    Points : 7 275
    Points
    7 275
    Par défaut
    Merci Spacefrog, ça marche à peu près !
    Visiblement, il y a l'air d'y avoir un petit décalage... Peux-tu m'expliquer un petit peu cette ligne : if(relTop<-20||(+relTop+Elm.offsetHeight/4)>docHg) ? Pourquoi le test avec -20 ?

  6. #6
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 640
    Points : 66 663
    Points
    66 663
    Billets dans le blog
    1
    Par défaut
    la hauteur d'une line-height ?

    je ne sais pas à vrai dire je n'ai pas testé, j'ai trouvé ce code, je l'ai survolé et adapté un peu

  7. #7
    Rédacteur
    Avatar de romaintaz
    Homme Profil pro
    Java craftsman
    Inscrit en
    Juillet 2005
    Messages
    3 790
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Java craftsman
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2005
    Messages : 3 790
    Points : 7 275
    Points
    7 275
    Par défaut
    Bon, merci bien SpaceFrog, j'ai adapté ce code, pour le rendre un peu plus compréhensible (par contre, j'ai viré sa compatibilité avec FF je pense).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    function testVisibility(elt) {
        // Récupération des positions "haute" et "basse" du composant...
        var posTop = getPositionTop(elt);
        var posBottom = posTop + elt.offsetHeight;
        // Récupération des positions "haute" et "basse" de la partie visible de la fenêtre...
        var visibleTop = document.body.scrollTop;
        var visibleBottom = visibleTop + document.documentElement.offsetHeight;
        // On teste !
        if ((posBottom > visibleTop) && (posTop < visibleBottom)) {
            return true;
        } else {
            return false;
        }
    }
    Merci bieng !

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

Discussions similaires

  1. [DOM] Seul le dernier élément est affiché
    Par COLOMBAT dans le forum Format d'échange (XML, JSON...)
    Réponses: 3
    Dernier message: 21/12/2007, 18h12
  2. [MySQL] Savoir si un élément est déjà présent dans la table
    Par camzo dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 30/12/2006, 17h46
  3. [VB]Savoir si un fichier est ouvert ou non
    Par voileux dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 21/01/2006, 16h01
  4. savoir si un nombre est pair ou non
    Par shirya dans le forum C++
    Réponses: 25
    Dernier message: 23/11/2005, 17h53
  5. [Liste] Savoir si un élément est présent dans une liste
    Par Wookai dans le forum Collection et Stream
    Réponses: 11
    Dernier message: 02/05/2005, 20h44

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