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 :

[POO] Coordonnées d'un objet


Sujet :

JavaScript

  1. #1
    Expert éminent
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Points : 8 389
    Points
    8 389
    Par défaut [POO] Coordonnées d'un objet
    Bonjour. Pourriez-vous m'indiquer la méthode pour connaître la position et les dimensions d'un objet d'une page web. Par exemple, on a quelque part :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <table>
        <tr>
            <td id="x">
            </td>
        </tr>
    </table>
    Quelles méthodes ou propriétés de l'objet document.getElementById("x") me permettent de connaître la position (left et top) et les dimensions (width et height) de cet objet. Merci de votre aide.

  2. #2
    Expert éminent sénior

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Points : 36 571
    Points
    36 571
    Par défaut
    Bonjour,
    il suffit de récupérer les styles CSS.
    Pour la taille, c'est simple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    document.getElementById('x').style.width;
    document.getElementById('x').style.height;
    Pour la position, la même syntaxe te donneras la position par rapport au bloc parent
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    document.getElementById('x').style.left;
    document.getElementById('x').style.top;
    Pour avoir le décalage par rapport à la page, c'est offsetTop et offsetLeft au lieu de top et left.

    A+
    Pour tout savoir sur l'utilisation du forum

    En postant votre message, n'oubliez pas les Règles du Club.

  3. #3
    Expert éminent
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Points : 8 389
    Points
    8 389
    Par défaut
    Merci pour offsetTop et offsetLeft c'est bien ce que je cherchais, parce que top et left justement me renvoyaient toujours 0. Et au fait, comment les convertir facilement en nombre? Jusqu'à présent je fais toujours :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Number(document.getElementById("x").style.left.slice(0,-2))
    Merci beaucoup.

  4. #4
    Expert éminent sénior

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Points : 36 571
    Points
    36 571
    Par défaut
    Citation Envoyé par Melem Voir le message
    comment les convertir facilement en nombre?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    parseInt(document.getElementById("x").style.left.slice(0,-2), 10)
    Un bug (évoqué dans les contributions) fait qu'il faut préciser la base (10) de conversion (sinon la base risque d'être fausse - hoctale par ex. - suivant le 1° caractère de la chaine à convertir) ....

    A+
    Pour tout savoir sur l'utilisation du forum

    En postant votre message, n'oubliez pas les Règles du Club.

  5. #5
    Expert éminent
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Points : 8 389
    Points
    8 389
    Par défaut
    C'est bête. J'avais tellement confiance à la réponse qu'on m'a donné que je ne l'avais même pas testé au jour le jour et maintenant me revoilà dans le même pétrin. Voici ce que j'ai :
    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
    16
    17
    18
    19
    20
    21
    22
    23
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
     
    <html xmlns="http://www.w3.org/1999/xhtml">
     
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
        <title>Hello</title>
    </head>
     
    <body>
        <center>
            <div id="hello">
                <table><tbody><tr><td style="background-color:#000000; color:#FFFFFF; font:18pt Verdana;">
                    Hello world !
                </td></tr></tbody></table>
            </div>
     
            <script type="text/javascript" language="javascript" >
                alert(document.getElementById("hello").style.left);
            </script>
        </center>
    </body>
    </html>
    J'espérais obtenir à l'affichage la valeur de l'abscisse de la couche hello dans le document mais ça ne m'a rien du tout donné (puisque je ne l'ais pas spécifié). Quant à style.offsetLeft, ce n'est même pas défini (IE6 & Firefox 1.5). document.getElementById("hello").offsetLeft est défini mais vaut toujours 8 quelle que soit la position de la couche. Par contre document.getElementById("hello").offsetTop a l'air de fonctionner !

    J'aimerais savoir comment obtenir les coordonnées (x et y) et les dimensions d'un élément du document, sans que je les ai moi-même spécifiées.

    Merci.

  6. #6
    Expert confirmé
    Avatar de le_chomeur
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2006
    Messages
    3 653
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 3 653
    Points : 4 835
    Points
    4 835
    Par défaut
    ton élément n'étant pas définit en position absolute ET dépendant de ses parents, il te faut faire une addition , sur les offset de tous les parents de ton objet
    est ton ami fait gagner du temps à ceux qui aident , donc un message avec la balise résolu laisse plus de temps pour résoudre d'autres problèmes

    Premier ministre du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts )

  7. #7
    Expert éminent
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Points : 8 389
    Points
    8 389
    Par défaut
    Oui mais ici le div est dans une balise center qui est dans la balise body donc quel parents ? En effet, si j'ai spécifié la position absolue du div le problème ne se posait pas, mais je veux placer un objet et demander sa position, pas placer un objet en spécifiant sa position.

  8. #8
    Expert confirmé
    Avatar de le_chomeur
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2006
    Messages
    3 653
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 3 653
    Points : 4 835
    Points
    4 835
    Par défaut
    il te faut utiliser une fonction récursive , récupérant la position de chaques parents, jusqu'à arriver jusqu'au body
    est ton ami fait gagner du temps à ceux qui aident , donc un message avec la balise résolu laisse plus de temps pour résoudre d'autres problèmes

    Premier ministre du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts )

  9. #9
    Expert éminent
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Points : 8 389
    Points
    8 389
    Par défaut
    il te faut utiliser une fonction récursive , récupérant la position de chaques parents jusqu'à ...
    ... et comment on fait ? Sachant que certaines solutions qu'on m'avait déjà donné (style.offsetLeft ...) ne semblent pas marcher .


  10. #10
    Expert confirmé
    Avatar de le_chomeur
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2006
    Messages
    3 653
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 3 653
    Points : 4 835
    Points
    4 835
    Par défaut
    voila un exemple complet

    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
    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
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
     
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
    <title>Document sans titre</title>
    <script type="text/javascript">
    function findPos(obj) {
    	//position x / y de l'objet
        var x = obj.offsetLeft || 0;
        var y = obj.offsetTop || 0;
    	//tant qu'il y a un parent, on ajoute la position de son parent
        while (obj = obj.offsetParent) {
            x += obj.offsetLeft
            y += obj.offsetTop
        }
    	//Ici on retour x ou y ( ou les deux dans un tableau ou un hash
        return x;
    }
    </script>
    </head>
     
    <body>
    <table width="100%" border="1">
      <tr>
        <td>&nbsp;</td>
        <td>&nbsp;</td>
        <td>&nbsp;</td>
      </tr>
      <tr>
        <td>&nbsp;</td>
        <td>&nbsp;</td>
        <td>&nbsp;</td>
      </tr>
      <tr>
        <td>&nbsp;</td>
        <td>&nbsp;</td>
        <td onclick="alert(findPos(this))">click ici </td>
      </tr>
      <tr>
        <td>&nbsp;</td>
        <td>&nbsp;</td>
        <td>&nbsp;</td>
      </tr>
      <tr>
        <td>&nbsp;</td>
        <td>&nbsp;</td>
        <td>&nbsp;</td>
      </tr>
      <tr>
        <td>&nbsp;</td>
        <td onclick="alert(findPos(this))">et ici </td>
        <td>&nbsp;</td>
      </tr>
    </table>
    <div id="titi" style="background-color:#CCCCCC;position:absolute;left:500px;top:400px;" onclick="alert(findPos(this))">
    	cettte div est positionné en absolute a 500px de gauche et 400px par raport au bord supérieur <br />
    	click moi dessus pour vérifier;
    </div>
     
    <div id="titi" style="background-color:#CCCCCC;position:absolute;left:500px;top:500px;width:200px;" >
    	<div style="background-color:#666666;position:absolute;left:150px;top:100px;" onclick="alert(findPos(this))">
    	cettte div est positionné en absolute à l'intérieur d'une autre a 150 de gauche et 100en y<br />
    	click moi dessus pour vérifier;
    	</div>
    </div>
    </body>
    </html>
    est ton ami fait gagner du temps à ceux qui aident , donc un message avec la balise résolu laisse plus de temps pour résoudre d'autres problèmes

    Premier ministre du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts )

  11. #11
    Expert éminent
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Points : 8 389
    Points
    8 389
    Par défaut
    Incroyable, ça marche !!! . Merci beaucoup.

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

Discussions similaires

  1. [POO] débutante dans les objets COM
    Par SandraG dans le forum Langage
    Réponses: 11
    Dernier message: 16/03/2006, 12h03
  2. [POO] PHP et Programmation objet
    Par debianben dans le forum Langage
    Réponses: 5
    Dernier message: 13/02/2006, 11h43
  3. Réponses: 1
    Dernier message: 11/02/2006, 12h50
  4. [POO] Coordonée d'un objet
    Par JHelp dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 19/04/2005, 16h59
  5. [POO] Rendre invisible un objet Flash en Javascript
    Par tafkap dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 15/10/2004, 19h39

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