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 09/08/2011, 10h45   #1
Membre Expert
 
Avatar de Doksuri
 
Tiger Scott
Développeur Web
Inscription : juin 2006
Messages : 1 246
Détails du profil
Informations personnelles :
Nom : Tiger Scott
Âge : 42

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : juin 2006
Messages : 1 246
Points : 1 504
Points : 1 504
Par défaut recuperer position souris ie

Bonjour a tous

je sais ce que vous vous dites avec le titre : "il y a 10 000 codes sur le net"...
en effet, j'en ai teste pas mal... mais sans succes..
j'ai teste plein de facon differentes de recuperer la position, mais idem...

je veux faire une sorte d'infobulle

pour l'instant, j'en suis rendu la
Code JavaScript :
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
function move(e) {
	if(infobulle) {  // Si la bulle est visible
		if (navigator.appName!="Microsoft Internet Explorer") { // Si on est pas sous IE
			x = e.pageX - ($("#clear").offset().left);
			y = e.pageY -  ($("#clear").offset().top) - 140;
    //document.getElementById("infobulle").style.left=e.pageX - ($("#clear").offset().left) + 15 + "px";
    //document.getElementById("infobulle").style.top=e.pageY -  ($("#clear").offset().top) - 140 + "px";
		}
	else {// IE
 
/*divX = getPos(document.getElementById("clear")).l;
divY = getPos(document.getElementById("clear")).t;
mouseX = e.clientX + document.body.scrollLeft;//- tempX;
mouseY = e.clientY + document.body.scrollTop;// - tempY;
tempX = mouseX - divX;
tempY = mouseY - divY;*/
		//x = e.clientX + (document.documentElement.scrollLeft ? document.documentElement.scrollLeft : document.body.scrollLeft);
		x = e.clientX;// + document.body.scrollLeft;//- tempX;
		y = e.clientY;// + document.body.scrollTop;// - tempY;
		//x = tempX;
		//y = tempY;
	}
	//alert('x : ' + x + ', y : ' + y);
	document.getElementById("infobulle").style.left= x + 15 + "px";
	document.getElementById("infobulle").style.top=  y + 10 + "px";
	}
}
le probleme (sous IE...-troll detected-), c'est que e.clientX et Y se base sur le coin du navigateur...jusque la, pas de probleme... mais si on redimentionne le navigateur, genre on le met pas en fullscreen, ca bouge l'infobulle a l'ouest...

du coup, je me dis "je vais le caller par rapport au div dans lequel je suis"...
mais la ou ce devient comique, c'est que le calcul de position d'un div se fait par rapport au div globale du site (je sais pas si c'est super clair)
du coup, je test... wah, c'est joli...attends, quand on scroll, ca bouge l'infobulle...
en gros, plus on scroll vers le bas, plus l'infobulle sera hors du site vers le bas, et plus on remonte, plus elle sera haut dans le site (voir meme hors du site vers le haut)

bref... ca commence a me gonfler severe, et j'en demande a votre grande conaissance avant que le pc passe par la fenetre
__________________
La forme des pyramides prouve que l'Homme a toujours tendance a en faire de moins en moins.

N'oubliez pas le Le tag resolu.

Need_!
Doksuri est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/08/2011, 10h55   #2
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
Bonjour,
visiblement tu utilises jQuery, alors pourquoi ne pas l'utiliser en plein
- event.pageX
- event.pageY
NoSmoking est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/08/2011, 10h56   #3
Responsable Développement Web

 
Avatar de Bovino
 
Homme Didier Mouronval
Développeur Web
Inscription : juin 2008
Messages : 13 807
Détails du profil
Informations personnelles :
Nom : Homme Didier Mouronval
Âge : 41
Localisation : France, Gironde (Aquitaine)

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : juin 2008
Messages : 13 807
Points : 35 797
Points : 35 797
Code :
1
2
x = e.clientX;// + document.body.scrollLeft;//- tempX;
y = e.clientY;
Le problème, c'est qu'avec IE, e n'existe pas

Sinon, je comprends pas trop tes explications
Citation:
le probleme (sous IE...-troll detected-), c'est que e.clientX et Y se base sur le coin du navigateur...jusque la, pas de probleme... mais si on redimentionne le navigateur, genre on le met pas en fullscreen, ca bouge l'infobulle a l'ouest...

Le redimensionnement de la fenêtre n'empêche pas le "coin du navigateur" de rester en haut et à gauche de la fenêtre

Citation:
plus on scroll vers le bas, plus l'infobulle sera hors du site vers le bas
T'es en train de nous dire que ton infobulle s'affiche en dehors du navigateur ?
__________________
Pas de question technique par MP !
Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
Vous possédez un blog et aimeriez diffuser vos billets sur le forum, contactez-moi !
Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
Mon livre sur jQuery
Bovino est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/08/2011, 11h21   #4
Membre Expert
 
Avatar de Doksuri
 
Tiger Scott
Développeur Web
Inscription : juin 2006
Messages : 1 246
Détails du profil
Informations personnelles :
Nom : Tiger Scott
Âge : 42

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : juin 2006
Messages : 1 246
Points : 1 504
Points : 1 504
Citation:
Envoyé par NoSmoking Voir le message
visiblement tu utilises jQuery, alors pourquoi ne pas l'utiliser en plein
=> parceque ca me met une erreur sous ie (et la ligne de l'erreur correspond a mon div infobulle)


Citation:
Envoyé par Bovino Voir le message
Le problème, c'est qu'avec IE, e n'existe pas
si, je lui passe event lors de l'appel

Citation:
Envoyé par Bovino Voir le message
Le redimensionnement de la fenêtre n'empêche pas le "coin du navigateur" de rester en haut et à gauche de la fenêtre
c'est sur, mais mon site est centre, donc en fullscreen, il est a ~200px de la gauche (ca depend de la taille de l'ecran), et en mode "fenetre", il est donc a 0px de la gauche

Citation:
Envoyé par Bovino Voir le message
T'es en train de nous dire que ton infobulle s'affiche en dehors du navigateur ?
non, mais plus on scroll vers le bas, plus l'infobulle descend et arrive un moment ou l’ascenseur du navigateur augmente xD,
et vers le haut, elle disparait dans les meandres du navigateur
__________________
La forme des pyramides prouve que l'Homme a toujours tendance a en faire de moins en moins.

N'oubliez pas le Le tag resolu.

Need_!
Doksuri est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/08/2011, 12h56   #5
Membre chevronné
 
Homme Krusty
Inscription : mai 2009
Messages : 472
Détails du profil
Informations personnelles :
Nom : Homme Krusty
Localisation : France

Informations forums :
Inscription : mai 2009
Messages : 472
Points : 617
Points : 617
Citation:
Le problème, c'est qu'avec IE, e n'existe pas
faux la preuve

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<!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>
<script>
 
function souris(e){
 
var setX =e.clientX;
var setY =e.clientY;
 
document.getElementById('inpute').value=setX+'  '+setY;
}
</script>
 
</head>
 
<body onmousemove='souris(event)'>
 
<input type="texte" id="inpute">
<br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br>
</body>
</html>
c'est fou

le probleme avec ie c'est que l'on ne peut pas faire d'ajout dynamique d'evenement tout en lui indiquant un evenement
__________________
programmer n'est pas connaitre tous les moindres détails d'un langage mais savoir exploiter sous toutes ses facettes ce que l'on connait.
mekal est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/08/2011, 13h53   #6
Responsable Développement Web

 
Avatar de Bovino
 
Homme Didier Mouronval
Développeur Web
Inscription : juin 2008
Messages : 13 807
Détails du profil
Informations personnelles :
Nom : Homme Didier Mouronval
Âge : 41
Localisation : France, Gironde (Aquitaine)

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : juin 2008
Messages : 13 807
Points : 35 797
Points : 35 797
Citation:
Envoyé par mekal Voir le message
faux la preuve

Code :
<body onmousemove='souris(event)'>
Oh le vilain tricheur !
__________________
Pas de question technique par MP !
Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
Vous possédez un blog et aimeriez diffuser vos billets sur le forum, contactez-moi !
Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
Mon livre sur jQuery
Bovino est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/08/2011, 14h07   #7
Membre Expert
 
Avatar de Doksuri
 
Tiger Scott
Développeur Web
Inscription : juin 2006
Messages : 1 246
Détails du profil
Informations personnelles :
Nom : Tiger Scott
Âge : 42

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : juin 2006
Messages : 1 246
Points : 1 504
Points : 1 504
onmousemove="move(event)"
=> heu c'est comme ca que je fais, c'est pas bon ?
__________________
La forme des pyramides prouve que l'Homme a toujours tendance a en faire de moins en moins.

N'oubliez pas le Le tag resolu.

Need_!
Doksuri est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/08/2011, 14h17   #8
Responsable Développement Web

 
Avatar de Bovino
 
Homme Didier Mouronval
Développeur Web
Inscription : juin 2008
Messages : 13 807
Détails du profil
Informations personnelles :
Nom : Homme Didier Mouronval
Âge : 41
Localisation : France, Gironde (Aquitaine)

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : juin 2008
Messages : 13 807
Points : 35 797
Points : 35 797
Oui et non... mais il est quand même préférable de savoir pourquoi
Contrairement aux autres navigateurs, IE<9 n'envoie pas en argument à la fonction de rappel l'objet event associé, mais comme window est implicite en JavaScript, c'est bien window.event qui sera envoyé.
Le seul problème, c'est que dans ce cas, ce sont les autres navigateurs qui ne sont pas contents car du coup, ils attendent 2 paramètres dans la fonction !
La syntaxe correcte est
puis
Code :
1
2
3
function move(e){
    var evt = e ? e : window.event;
}
__________________
Pas de question technique par MP !
Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
Vous possédez un blog et aimeriez diffuser vos billets sur le forum, contactez-moi !
Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
Mon livre sur jQuery
Bovino est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/08/2011, 10h00   #9
Membre Expert
 
Avatar de Doksuri
 
Tiger Scott
Développeur Web
Inscription : juin 2006
Messages : 1 246
Détails du profil
Informations personnelles :
Nom : Tiger Scott
Âge : 42

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : juin 2006
Messages : 1 246
Points : 1 504
Points : 1 504
ENFIN !!!!!
merci a vous pour vos lumieres. voici ma solution
Code JavaScript :
1
2
3
4
5
6
7
8
9
10
11
12
function move(e) {
	if(infobulle) {  // Si la bulle est visible
		if (navigator.appName!="Microsoft Internet Explorer") { // Si on est pas sous IE
			document.getElementById("infobulle").style.left = e.pageX - $("#clear").offset().left + 15 + "px";
			document.getElementById("infobulle").style.top =  e.pageY -  $("#clear").offset().top - 10 + "px";
		}
		else {// IE
			document.getElementById("infobulle").style.left = e.clientX - $("#clear").offset().left + 15 + "px";
			$(document).bind('mousemove',function(e){ document.getElementById("infobulle").style.top = e.pageY - $("#clear").offset().top - 10 + "px";});
		}
	}
}
c'est moche, mais fonctionnel
__________________
La forme des pyramides prouve que l'Homme a toujours tendance a en faire de moins en moins.

N'oubliez pas le Le tag resolu.

Need_!
Doksuri est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/08/2011, 14h43   #10
Membre Expert
 
Avatar de Doksuri
 
Tiger Scott
Développeur Web
Inscription : juin 2006
Messages : 1 246
Détails du profil
Informations personnelles :
Nom : Tiger Scott
Âge : 42

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : juin 2006
Messages : 1 246
Points : 1 504
Points : 1 504
heu, petit detail...
comment je passe
Code JavaScript :
$(document).bind('mousemove',function(e){ document.getElementById("infobulle_" + bloc).style.top = e.pageY - $("#clear").offset().top - 10 + "px";});
dans une variable y ? (pour faire des tests dessus par la suite)
genre
Code JavaScript :
1
2
var y;
$(document).bind('mousemove',function(e){ y = e.pageY - $("#clear").offset().top - 10 + "px"; return y;});
(j'ai essaye plein de syntaxes, mais aucune ne fonctionne :/
__________________
La forme des pyramides prouve que l'Homme a toujours tendance a en faire de moins en moins.

N'oubliez pas le Le tag resolu.

Need_!
Doksuri est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/08/2011, 22h26   #11
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
il te suffit de mettre à jour cette variable dans la fonction
Code :
1
2
3
4
5
var mouseY;  // variable globale
$(document).bind('mousemove',function(e){
    mouseY = e.pageY - $("#clear").offset().top - 10 + "px";
    // return y; devient inutile
  });
Citation:
c'est moche, mais fonctionnel
on ne peut pas te donner tord

Il faut dans cette fonction uniquement récupérer la position brute, pourquoi ajouter une récupération de position et un calcul?

Citation:
Envoyé par Doksuri
=> parceque ca me met une erreur sous ie (et la ligne de l'erreur correspond a mon div infobulle)
c'est peut être de ce coté qu'il faudrait corriger...
NoSmoking est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/08/2011, 10h56   #12
Membre Expert
 
Avatar de Doksuri
 
Tiger Scott
Développeur Web
Inscription : juin 2006
Messages : 1 246
Détails du profil
Informations personnelles :
Nom : Tiger Scott
Âge : 42

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : juin 2006
Messages : 1 246
Points : 1 504
Points : 1 504
merci pour ta reponse, je l'ai mis en variable globale et ca passe bien

Code html :
1
2
3
4
5
6
7
8
9
<div id="infobulle_<?php echo $i; ?>" class="infobulle_<?php echo $i; ?>" style="
position:absolute;
display:none;
top:25px;
border:1px solid Black;
padding:8px;
font-family:Verdana, Arial;
font-size:10px;
background-color:#FFFFCC;"></div>
mon infobulle est vraiment basique... je ne pense pas que ca vienne de la le probleme :/
quoi qu'il en soit... c'est fonctionnel...
ca rame a mort sous IE... mais c'est IE hein...
__________________
La forme des pyramides prouve que l'Homme a toujours tendance a en faire de moins en moins.

N'oubliez pas le Le tag resolu.

Need_!
Doksuri 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 08h07.


 
 
 
 
Partenaires

Hébergement Web