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

Téléchargez Discussion :

Comment retrouver les coordonnées X et Y d'un objet ?


Sujet :

Téléchargez

  1. #1
    Expert éminent

    Avatar de denisC
    Profil pro
    Développeur Java
    Inscrit en
    Février 2005
    Messages
    4 050
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Service public

    Informations forums :
    Inscription : Février 2005
    Messages : 4 050
    Points : 7 641
    Points
    7 641
    Par défaut Comment retrouver les coordonnées X et Y d'un objet ?
    Bonjour,

    Je vous propose un nouvel élément à utiliser : Comment retrouver les coordonnées X et Y d'un objet ?

    La fonction calculeOffsetLeft retourne le nombre de pixel à la gauche de l’élément (son abscisse), la fonction calculeOffsetTop le nombre au dessus (son ordonnée).

    Qu'en pensez-vous ?

  2. #2
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    Bonjour
    je n'ai pas testé mais je l'ai un peu transformé ta petite routine
    je part du principe que moins le moulin tourne mieux c'est
    sous cette forme la elle devrait de donner l'equivalent de getboundingclientrect en un seul tour

    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
    function calcule() {
     var position = calculeOffset(r);
     console.log(position.Left);
     console.log(position.Top);
    }
    function calculeOffset(element) {
     var oLeft = 0;
     var oTop = 0;
     while (element) {
      oLeft += element.offsetLeft;
      oTop += element.offsetTop;
                      element = element.offsetParent;
     }
     return {
      "left": oLeft,
      "Top": oTop,
             "Right": oLeft+=element.offsetWidth,
                    "Bottom": oTop+=element.offsetHeight
                 };
    }
    a tester bien sur
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  3. #3
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    16 959
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 16 959
    Points : 44 122
    Points
    44 122
    Par défaut
    Bonjour Patrick !!!!
    je part du principe que moins le moulin tourne mieux c'est
    Encore faut-il qu'il tourne !

    a tester bien sur
    quand on propose une source il est quand même important de l'avoir testée avant.

    Qu'aurais tu vu ?, ... que rien ne fonctionne

    • Ta fonction calcule() :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    function calcule() {
     var position = calculeOffset(r);
     console.log(position.Left);
     console.log(position.Top);
    }
    tu passes en paramètre r à ta fonction calculeOffset alors que cette variable n'est définie nulle part.

    • Ta fonction calculeOffset(element) :
    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 calculeOffset(element) {
     var oLeft = 0;
     var oTop = 0;
     while (element) {
      oLeft += element.offsetLeft;
      oTop += element.offsetTop;
      element = element.offsetParent;
     }
     return {
        "left": oLeft,
        "Top": oTop,
        "Right": oLeft += element.offsetWidth,
        "Bottom": oTop += element.offsetHeight
      };
    }
    que vaut ta variable element à la fin de ta boucle while ... null, donc quand tu écris plus bas element.offsetWidth cela plantera .

    elle devrait de donner l'equivalent de getboundingclientrect en un seul tour
    Dans ce cas pourquoi ne pas utiliser directement getBoundingClientRect(), pense à respecter la casse, la source de denisC permet de récupérer la position par rapport au document et non par rapport au premier parent positionné.

  4. #4
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    re Bonjour Nosmoking
    oui c'est vrai chez moi rest une variable globale representant un div

    sinon
    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
    function calcule() {
     var r = document.getElementById("toto");
     var position = calculeOffset(r);
     console.log(position.Left);
     console.log(position.Top);
    }
    //pour la fonction
    function calculeOffset(element) {
            var memo = element;
            var oLeft = 0;
            var oTop = 0;
            while (element) {
                    oLeft += element.offsetLeft;
                    oTop += element.offsetTop;
                    element = element.offsetParent;
            }
            return {
                    "left": oLeft,
                    "Top": oTop,
                    "Right": oLeft += memo.offsetWidth,
                    "Bottom": oTop += memo.offsetHeight
            };
    }
    la fonction de denisC remonte aussi jusqu'au document non ??, tant que element existe(element qui devient le parent a chaque tour de boucle )

    de meme que getboundingClientRect non?
    j'ai ajouté le top/bottom mais le but etait d'avoir le top/left en un seul coup et du coup maintenant on a les 4 valeurs

    on est bon comme ca ?
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  5. #5
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    16 959
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 16 959
    Points : 44 122
    Points
    44 122
    Par défaut
    oui c'est vrai chez moi rest une variable globale representant un div
    les variables globales sont à fuir lorsque l'on veut avoir une fonction facilement exportable.

    ... de meme que getboundingClientRect non?
    par rapport au document et par rapport au viewport ce n'est pas la même chose, fait un essai en scrollant la page et observe ce qui se passe au niveau des valeurs.

    on est bon comme ca ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    return {
      "left": oLeft,
      "Top": oTop,
      "Right": oLeft += memo.offsetWidth,
      "Bottom": oTop += memo.offsetHeight
    }
    essaie de respecter les conventions de nommage, le camelCase, ce qui devrait donner
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    return {
      "left": oLeft,
      "top": oTop,
      "right": oLeft + memo.offsetWidth,
      "bottom": oTop + memo.offsetHeight
    }
    Je ne vois pas trop ce que peut apporter ta « fonction » !

  6. #6
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    Ok NosMoking
    while ofssetparent...= position par rapport au document
    getBoundingClientRect() = position par rapport a la window
    j'ai testé
    disons la fonction de denisC modifié comme je l'ai fait donne une sorte de getBoundingDocumentRect()
    j'ai testé bien sur
    du coup j'en ai profité pour bien faire la différence aussi entre event.clientx et event.pageX
    merci
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  7. #7
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    16 959
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 16 959
    Points : 44 122
    Points
    44 122
    Par défaut
    Certes mais on s'éloigne de la proposition initiale qui est, et reste retrouver les coordonnées X et Y d'un objet.

    On peut faire quand même plus simple, au résultat de getboundingClientRect il suffit d'ajouter les valeurs de scroll du document et tu auras ta fonction

  8. #8
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    Bonjour Nosmoking
    oui plus simple certainement ca me permet d'aprendre ce que retourne les fonctions
    notament le fait d'utiliser e.pagex au lieu de e.clientx+scroll....
    des petites chose comme ca qui peuvent simplifié la vie
    je vais la faire cette fonction getboudingdocumentrect() avec clientrect
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

Discussions similaires

  1. Comment récupérer les coordonnées d’un clique sur une image ?
    Par da_sys dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 14/11/2006, 12h34
  2. Comment récupérer les coordonnées sur le bureau d'une form ?
    Par fma2112 dans le forum API, COM et SDKs
    Réponses: 2
    Dernier message: 22/02/2006, 23h43
  3. Comment retrouver les menus complets de Access ???
    Par sweety107 dans le forum Access
    Réponses: 3
    Dernier message: 20/12/2004, 11h33
  4. Réponses: 2
    Dernier message: 14/09/2004, 18h00
  5. Comment retrouver les propriétés d'un fichier ?
    Par JuanLopez1966 dans le forum x86 32-bits / 64-bits
    Réponses: 1
    Dernier message: 01/09/2004, 16h34

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