0
0
Comment retrouver les coordonnées X et Y d'un objet ?
Bonjour Patrick !!!!
je part du principe que moins le moulin tourne mieux c'est ;)Encore faut-il qu'il tourne !
a tester bien sur:nono: 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 :aie:
• Ta fonction calcule() :
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) :
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 :aie:.elle devrait de donner l'equivalent de getboundingclientrect en un seul tourDans 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é.
re Bonjour Nosmoking
oui c'est vrai chez moi rest une variable globale representant un div
sinon
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 ?
| Code : | Sélectionner tout |
1 2 3 4 5 6 | return {
"left": oLeft,
"Top": oTop,
"Right": oLeft += memo.offsetWidth,
"Bottom": oTop += memo.offsetHeight
} |
| Code : | Sélectionner tout |
1 2 3 4 5 6 | return {
"left": oLeft,
"top": oTop,
"right": oLeft + memo.offsetWidth,
"bottom": oTop + memo.offsetHeight
} |
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
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
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
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
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