Centrer une popup au passage de la souris
haelfyk
-
HaelfyK -
HaelfyK -
hello !
je me suis permise d'essayer un script posté il y a quelques temps sur ce forum afin d'ouvrir automatiquent une image au passage de la souris sur une vignette puis disparaisse une fois la souris enlevée : )
par contre j'aimerais arriver à ce que l'image quand elle s'ouvre soit toujours au même endroit, par exemple centrée, et malheureusement je n'y arrive pas : /
pour l'instant, quand j'ai une vignette qui se trouver toute à droite de la fenêtre, l'image qui s'ouvre se perd et est coupée....
possible de m'aider ? je galère un peu pour trouver une solution : )
merci !
je me suis permise d'essayer un script posté il y a quelques temps sur ce forum afin d'ouvrir automatiquent une image au passage de la souris sur une vignette puis disparaisse une fois la souris enlevée : )
par contre j'aimerais arriver à ce que l'image quand elle s'ouvre soit toujours au même endroit, par exemple centrée, et malheureusement je n'y arrive pas : /
pour l'instant, quand j'ai une vignette qui se trouver toute à droite de la fenêtre, l'image qui s'ouvre se perd et est coupée....
possible de m'aider ? je galère un peu pour trouver une solution : )
merci !
A voir également:
- Centrer une popup au passage de la souris
- Quelle touche pour débloquer la souris ? - Guide
- Passage qwerty azerty - Guide
- Fake mcafee popup - Accueil - Piratage
- Souris ordinateur - Guide
- Passage windows 10 à 11 gratuit - Guide
<script>
function Target(id, picture, width, height)
{
this.id = id;
this.ref = null;
this.width = width;
this.height = height;
this.picture = picture;
}
// Attention : offsetHeight ne fonctionne que si l'élément ne comporte ni marges, ni bordures, ni padding sinon ...
Target.prototype.getHeight = function()
{
var elt = document.getElementById(this.id);
return elt.offsetHeight;
}
Target.prototype.getWidth = function()
{
var elt = document.getElementById(this.id);
return elt.offsetWidth;
}
function TargetList(popupId, popupWidth, popupHeight)
{
this.popupId = popupId;
this.popupWidth = popupWidth;
this.popupHeight = popupHeight;
this.items = new Array();
this.currentIndex = -1;
}
TargetList.prototype.addTarget = function(id,picture,width,height)
{
var item = new Target(id,picture,width,height);
item.index = this.items.length;
var elt = document.getElementById(id);
this.items.push(item);
}
TargetList.prototype.hidePopup = function()
{
if (this.currentIndex != -1)
{
document.getElementById(this.popupId).style.left=-10000+"px";
this.currentIndex = -1;
}
}
TargetList.prototype.selectTarget = function(index)
{
if (this.currentIndex != index)
{
if ((index >=0) && (index < this.items.length))
{
document.getElementById(this.popupId).innerHTML='<img src="'+this.items[index].picture+'">';
this.currentIndex = index;
}
}
}
TargetList.prototype.showPopup = function(x,y)
{
var elt = document.getElementById(this.popupId);
elt.style.left=x+5+"px";
elt.style.top=y-this.popupHeight+"px";
}
TargetList.prototype.findTarget = function(x,y)
{
var index = -1;
for (var i=0; i < this.items.length; i++)
{
var position = findPosition(this.items[i].id);
if ((x >= position.x) && (x < position.x+this.items[i].getWidth()) && (y >= position.y) && (y < position.y+this.items[i].getHeight()))
{
index = i;
break;
}
}
return index;
}
var targetList = new TargetList("popup",400,250);
function strToNumber(value)
{
var nbr = parseInt(value);
if (isNaN(nbr)) { nbr = 0;}
return nbr;
}
// Retourne la position de la souris sur la page (et pas sur l'écran !)
function mousePosition(e)
{
var result = new Array();
result["x"] = 0;
result["y"] = 0;
if (!e) var e = window.event;
if (e.pageX || e.pageY) {
result["x"] = e.pageX;
result["y"] = e.pageY;
}
else if (e.clientX || e.clientY) {
result["x"] = e.clientX + document.body.scrollLeft
+ document.documentElement.scrollLeft;
result["y"] = e.clientY + document.body.scrollTop
+ document.documentElement.scrollTop;
}
return result;
}
// Retourne la position absolue d'un objet sur la page
function findPosition(id)
{
var elt = document.getElementById(id);
var result = new Array();
result["x"] = 0;
result["y"] = 0;
while (elt)
{
result["x"] += elt.offsetLeft;
result["y"] += elt.offsetTop;
elt = elt.offsetParent;
}
return result;
}
function mouseMove(e)
{
var mouse = mousePosition(e);
index =targetList.findTarget(mouse.x,mouse.y);
if (index != -1)
{
targetList.selectTarget(index);
targetList.showPopup(mouse.x,mouse.y);
}
else
{
targetList.hidePopup();
}
}
function load()
{
targetList.addTarget("image1","../images/01_projets/P01_place_riponne/P1_1_riponne.jpg",567,281);
targetList.addTarget("image2","../images/01_projets/P01_place_riponne/P1_2_riponne.jpg",454,362);
targetList.addTarget("image3","../images/01_projets/P01_place_riponne/P1_3_riponne.jpg",453,362);
targetList.addTarget("image4","../images/01_projets/P01_place_riponne/P1_4_facade_nord_jour.jpg",595,421);
targetList.addTarget("image5","../images/01_projets/P01_place_riponne/P1_5_retouche.jpg",595,421);
targetList.addTarget("image6","../images/01_projets/P01_place_riponne/P1_6_retouche2.jpg",595,421);
targetList.addTarget("image7","../images/01_projets/P01_place_riponne/P1_7_toiture_jour.jpg");
targetList.addTarget("image8","../images/01_projets/P01_place_riponne/P1_8_testfilm3m.jpg");
targetList.addTarget("image9","../images/01_projets/P01_place_riponne/P1_9_Passage_FINAL.jpg");
targetList.addTarget("image10","../images/01_projets/P01_place_riponne/P1_10_riponne.jpg");
targetList.addTarget("image11","../images/01_projets/P01_place_riponne/P1_11_parking.jpg");
document.onmousemove=mouseMove;
}
</script>
</head>
<body onload="load()">
<div class="popup" id="popup"></div>
<table width="1020" height="600" border="0" align="center" cellpadding="0" cellspacing="0">
<tr>
<td class="image"><img src="../images/01_projets/P01_place_riponne/mini_P1_1_riponne.jpg" id="image1"></td>
<td class="spaceh"> </td>
<td class="image"><img src="../images/01_projets/P01_place_riponne/mini_P1_2_riponne.jpg" id="image2"></td>
...etc...
La solution que je vais vous donner, permet uniquement pour vous de spécifier la position fixée que vous souhaitez utiliser, cependant il faudra nettoyer le code du reste ou encore, si vous pensez avoir l'utilité du code avec l'affichage à droite de l'élément créer une deuxième fonction d'affichage simplifiée pour le cas présent.
A MODIFIER
TargetList.prototype.showPopup = function(x,y)
{
var elt = document.getElementById(this.popupId);
elt.style.left=x+5+"px";
elt.style.top=y-this.popupHeight+"px";
}
REMPLACE PAR
TargetList.prototype.showPopup = function(x,y)
{
var elt = document.getElementById(this.popupId);
// je passe l'élément en position absolute, on peut aussi la mettre en fixed ou relative selon les besoins
elt.style.position= "absolute";
elt.style.top= 10+"px";
elt.style.left= 15+"px";
}
ça m'émerveille à chaque fois quand cela fonctionne :D
je vais essayer de nettoyer le code de ce qui n'est pas nécessaire, sans tout faire foirer ^_^
et encore voir pourquoi sur IE ça ne fonctionne pas. j'ai un tout vieux, le 5.2 pour mac, c'est peut-être pour ça
Oui, pour IE c'est sûrement du fait de l'ancienneté de la version.
Conseil :
Voici les navigateurs sur lesquels il est important de tester si vous voulez être sûr que quasiment tous les utilisateurs auront le bon rendu : IE7/IE8, Firefox3, Safari, Chrome
enfin, il faut bien commencer quelque part et apprendre ^_^
je n'utilise pas les div, je fais des tableaux, des CSS, je mélange tout et je me perd.
je bidouille et après plus rien ne fonctionne, donc je suis revenue à ma bête base.
argh.
mon test et là : http://www.mplusv.ch/test/test.html
merci de ne pas rigoler en regardant le code...! x_o''
si vous avez des liens pour apprendre la base de la base expliqué simplement pour les 2 neurones et demi que mon cerveau contient, je suis preneuse... : )