Précédent   Forum des professionnels en informatique > Webmasters - Développement Web > JavaScript
JavaScript Forum programmation JavaScript. Lire : Cours JavaScript, FAQ JavaScript, Toutes les FAQ JavaScript et Sources JavaScript
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 13/06/2011, 16h55   #1
Candidat au titre de Membre du Club
 
Inscription : mars 2007
Messages : 52
Détails du profil
Informations forums :
Inscription : mars 2007
Messages : 52
Points : 11
Points : 11
Par défaut Récupérer la position Y courante d'une ancre

Bonjour à tous,

Est-il possible, au déclenchement d'un évènement JS, de récupérer la position Y d'une ancre (identifiée par son nom ou son id), et plus précisément sa position courante, c'est-à-dire sa distance depuis le haut de l'écran de l'utilisateur au moment même où l'on déclenche l'évènement ?

Merci beaucoup pour vos lumières !
@+
Marmotton76 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/06/2011, 17h23   #2
Membre Expert
 
Avatar de Watilin
 
Homme Matilin Torre
Étudiant
Inscription : juin 2010
Messages : 679
Détails du profil
Informations personnelles :
Nom : Homme Matilin Torre
Âge : 23
Localisation : France, Ille et Vilaine (Bretagne)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : juin 2010
Messages : 679
Points : 1 202
Points : 1 202
Oui, c'est possible, au prix d'un petit calcul et d'un peu de jonglage avec les différents navigateurs.

Il faut d'abord récupérer la postion de l'élément par rapport au document, ensuite tu récupères le scroll de la page, et enfin tu fais la soustraction.

Je te laisse te débrouiller avec ça : http://blog.stannard.net.au/2010/05/...th-javascript/

J'espère que tu es à l'aise avec l'anglais ^^
__________________
Disposition de clavier ergonomique française : Bépo
Watilin est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/06/2011, 19h21   #3
Candidat au titre de Membre du Club
 
Inscription : mars 2007
Messages : 52
Détails du profil
Informations forums :
Inscription : mars 2007
Messages : 52
Points : 11
Points : 11
Merci beaucoup Watilin, j'avais déjà creusé ce genre de fonction mais : le pb est que, quelle que soit la position à l'écran de l'ancre considérée, j'ai toujours le même résultat : position y=0 ! Je pensais que c'était à cause de la position CSS de l'ancre (dépendante d'un parent lui-même positionné en absolute, relative, float ou autre) mais que nenni : quelle que soit la position de l'élément parent, j'ai toujours ce même résultat inchangé et décourageant !)
Là franchement, et après plusieurs heures passées à me documenter, je crains fort qu'il n'existe aucune solution miracle qui me récupèrerait cette fichue valeur de position y absolue [à l'écran] d'un élément (ou d'une balise) HTML... Détrompez-moi SVP !!!
@+ et merci
Marmotton76 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/06/2011, 19h44   #4
Membre Expert
 
Avatar de Watilin
 
Homme Matilin Torre
Étudiant
Inscription : juin 2010
Messages : 679
Détails du profil
Informations personnelles :
Nom : Homme Matilin Torre
Âge : 23
Localisation : France, Ille et Vilaine (Bretagne)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : juin 2010
Messages : 679
Points : 1 202
Points : 1 202
Tu testes sous quel navigateur ? Tu as quel DOCTYPE sur ta page ?
__________________
Disposition de clavier ergonomique française : Bépo
Watilin est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/06/2011, 22h48   #5
Modérateur
 
Avatar de NoSmoking
 
Homme
Inscription : janvier 2011
Messages : 2 944
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Isère (Rhône Alpes)

Informations forums :
Inscription : janvier 2011
Messages : 2 944
Points : 4 774
Points : 4 774
Bonsoir,
même si l'on peut faire plus court, la fonction DOIT te retourner les bonnes valeurs et ce quelque soit le conteneur...
NoSmoking est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/06/2011, 01h23   #6
Membre confirmé
 
Inscription : janvier 2009
Messages : 298
Détails du profil
Informations forums :
Inscription : janvier 2009
Messages : 298
Points : 206
Points : 206
Est-ce que ce code peut te servir ?

Code :
1
2
3
4
5
6
7
8
9
10
 
function findPos(obj) {
        var curleft = obj.offsetLeft || 0;
        var curtop = obj.offsetTop || 0;
        while (obj = obj.offsetParent) {
                curleft += obj.offsetLeft
                curtop += obj.offsetTop
        }
        return {x:curleft,y:curtop};
}
offsetLeft et offsetTop sont des fonctions DOM de javascript.
dragonno est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/06/2011, 07h52   #7
Rédacteur/Modérateur
 
Avatar de andry.aime
 
Homme Andry Aimé
Inscription : septembre 2007
Messages : 5 128
Détails du profil
Informations personnelles :
Nom : Homme Andry Aimé
Localisation : Ile Maurice

Informations forums :
Inscription : septembre 2007
Messages : 5 128
Points : 7 269
Points : 7 269
Citation:
Envoyé par dragonno Voir le message
offsetLeft et offsetTop sont des fonctions DOM de javascript.
Ceux ne sont pas des fonctions, ceux sont des attributs (propriétés).
andry.aime est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/06/2011, 09h32   #8
Candidat au titre de Membre du Club
 
Inscription : mars 2007
Messages : 52
Détails du profil
Informations forums :
Inscription : mars 2007
Messages : 52
Points : 11
Points : 11
Bon, j'ai trouvé (merci à quirksmode.org !) ce trio de fonctions qui marchent impec pour moi (FF et IE, doctype Strict), et pour ceux que ça intéresse :

Code :
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
 
 	// findPos() by quirksmode.org
	// Finds the absolute position of an element on a page
	function findPos(obj) {
		var curleft = curtop = 0;
		if (obj.offsetParent) {	
			do {
				curleft += obj.offsetLeft;
				curtop += obj.offsetTop;	
			} while (obj = obj.offsetParent);
		}
		return [curleft,curtop];
	}
 
	// getPageScroll() by quirksmode.org
	// Finds the scroll position of a page
	function getPageScroll() {
		var xScroll, yScroll;
		if (self.pageYOffset) {
			yScroll = self.pageYOffset;
			xScroll = self.pageXOffset;
		} else if (document.documentElement && document.documentElement.scrollTop) {
			yScroll = document.documentElement.scrollTop;
			xScroll = document.documentElement.scrollLeft;
		} else if (document.body) {// all other Explorers
			yScroll = document.body.scrollTop;
			xScroll = document.body.scrollLeft;
		}
		return [xScroll,yScroll];
	}
 
	// Finds the position of an element relative to the viewport.
	function findPosRelativeToViewport(obj) {
		var objPos = this.findPos(obj);
		var scroll = this.getPageScroll();
		return [ objPos[0]-scroll[0], objPos[1]-scroll[1] ];
	}
Merci à tous de m'avoir mis sur la bonne piste !
@+
Marmotton76 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 01h00.


 
 
 
 
Partenaires

Hébergement Web