Bonjour, amis geeks.
Après avoir consciencieusement pillé ce site depuis un certain temps, je me suis enfin décidé à m'inscrire sur ce chouette forum. J'espère ne pas faire trop de bêtises (désolé...juste au cas où...)
Je vais commencer fort avec un problème qui me casse les pieds depuis quelques heures. J'essaie de réaliser une galerie d'image assez traditionnelles. Càd des miniatures, avec ouverture d'une fenêtre vers l'image en taille normale lors du clic. Pas de problème jusque là...
Par contre, j'aurais aimé qu'une prévisualisation de l'image apparaisse dans un fenêtre popup lorsque la souris passe sur la miniature. Pour vous donner une idée, allez voir ce qu'ils ont fait sur cette page :http://www.gameblog.fr/news_1388_maj-l-ile-des-singes-colporteurs
(à noter qu'il y a aussi une petite fonction pour "illuminer" l'image)
J'ai réussi à faire quelque chose de correct sur une page HTML isolée. Malheureusement, lorsque je tente d'importer le bouzin dans ma page, ça coince.
Je précise tout de suite que ma structure CSS est un peu "spéciale". En fait, j'ai créé de fausses frames en CSS. J'ai un bloc fixe sur toute la hauteur à gauche, de 150px de largeur, et un autre fixe sur toute la longueur en haut, de 100 px de hauteur. Le contenu de ma page s'affiche donc dans un div "contenu" qui occupe le reste de la page...
Le problème, c'est que lorsque je passe la souris sur ma miniature, le popup, au lieu de s'ouvrir 20px à droite et 20 px au dessous de mon curseur, se colle en haut et à gauche de mon div "contenu". Smiley sweatdrop
Du coup, lorsque la preview chevauche la miniature, j'ai un scintillement, puisque les deux div se chevauchent....
J'ai cru comprendre que dans ce cas, les coordonnées de la souris sont erronées : une histoire de position sur la page, et non dans mon "contenu"....mais je suis un peu rouillé en javascript, et j'ai tenté quelques trucs sans aucun résultat...Au secours !
Je vous donne une version light de mon code (celle qui marche bien sur une page isolée) :



<html>
<head>
<title>test images popups</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />

<style type="text/css">
.popup { POSITION: absolute; VISIBILITY: hidden }
</style>

<script language="JavaScript">

function makevisible(cur,which)
	{
	if(document.getElementById)
		{
		if (which==0)
			{
			if(document.all)
				cur.filters.alpha.opacity=100
			else
				cur.style.setProperty("-moz-opacity", 1, "");
			}
		else
			{
			if(document.all)
				cur.filters.alpha.opacity=40
			else
				cur.style.setProperty("-moz-opacity", .4, "");
			}
		}
	}
</script>
</head>

<body>
<div class="popup" id="popbox"></div>	

<script type="text/javascript">
if (document.getElementById){
box = document.getElementById("popbox").style;
if(navigator.appName.substring(0,3) == "Net")
document.captureEvents(Event.MOUSEMOVE);
document.onmousemove = pointer;
}
function poplink(contenu){
var content ="<table border='0' cellpadding='0' cellspacing='0' bgcolor='#000000'><tr><td><table width='1' cellpadding='3' cellspacing='1'><tr><td bgcolor='#FFFFFF'><center>"+contenu+"</center></td></tr></table></td></tr></table>";
if (document.getElementById)
{
document.getElementById("popbox").innerHTML =
content;
box.visibility = "visible";
}
}
function pointer(e)
{
var x = (navigator.appName.substring(0,3) == "Net") ? e.pageX : event.x+document.contenu.scrollLeft;
var y = (navigator.appName.substring(0,3) == "Net") ? e.pageY : event.y+document.body.scrollTop;
box.left = x+20;
box.top = y+20;
}
function closepopup()
{
if (document.getElementById)
box.visibility = "hidden";
}
</script>


<table align="center" style="text-align: center; 90%;" border="0" cellpadding="0" cellspacing="10">
<tbody>
	<TR>
	<td style="text-align: center; vertical-align: middle; background-color: white;"> 
<a href="" onMouseOver="poplink('<img src=\'groupe2.jpg\' alt=\'Big Img\' width=\'400px\'><P>bourrins</P>');" onmouseout="closepopup()" ><img src="smallgroupe2.jpg" border="0" alt="Little Img"
style="filter:alpha(opacity=40); -moz-opacity: .4;" 
onMouseover="makevisible(this,0)" 
onMouseout="makevisible(this,1)"></a>
	</TD>
	</TR>
	</TBODY>
	</TABLE>
	
</body>
</html>


A vot' bon coeur, messieurs dames...(pitié, j'en peux plus, j'ai les yeux qui piquent...)
Modifié par kea (29 Jul 2007 - 15:01)
Déjà, merci de te pencher sur mon problème, ça fait chaud au coeur.
Ensuite, oui, j'avais jeté un oeil au tuto, mais à priori, l'idée qui m'amusait, c'était que la position de la preview soit relative à l'emplacement de la souris sur la miniature. (Enfin, c'est juste parce que je suis têtu, hein...j'aime pas trop baisser les bras. C'est un peu stupide, vu que j'ai trouvé des scripts de galleries qui en jettent vraiment un peu partout sur le réseau...mais bon...)
La solution semble intéressante, ceci-dit. Si jamais je craque, j'aviserai...

Enfin...en attendant, j'ai hébergé mon site à l'arrache histoire que vous puissiez mieux voir de quoi je cause...(ai-je besoin de préciser qu'il n'est pas fini ?)
Vous pouvez le trouver ici :http://perso.orange.fr/seb.kea/index.htm
Le problème qui nous concerne ici se trouve sur la page "images".
Merci encore...

(accessoirement, je ne suis pas certain d'avoir compris comment insérer proprement un lien sur ce forum....je suis vraiment naze...)
Modifié par kea (28 Jul 2007 - 01:57)
Merci kea pour le lien.

J'ai comparé avec le code que tu as donné dans ton premier post et je me suis aperçue que :

<style type="text/css">
.popup { POSITION: absolute; VISIBILITY: hidden }
</style>

manque dans le code de ton fichier "images.htm".

Sinon, c'est la ligne DOCTYPE qui crée le scintillement de ton image on dirait, si tu l'enlèves, tout fonctionne bien.

Par contre, ne me demande pas pourquoi, je n'en sais rien, mais quelqu'un d'autre pourra sûrement t'aider Smiley cligne

edit : j'allais oublier de te dire que, par contre, ta méthode n'a pas l'air de fonctionner avec IE Smiley ohwell
Modifié par blue (28 Jul 2007 - 15:36)
\o/
Merci, blue !!! Tu es mon nouveau héros ! (Ou ma nouvelle héroïne, si j'ai bien compris...)
En fait, la ligne de code "popup" est passée dans mon fichier de mise en page CSS...
Donc ça marche nickel. Génial ! Par contre, franchement, moi pas comprendre le pourquoi du comment... Smiley sweatdrop
Un peu frustrant comme rafistolage, mais bon, on va s'éviter des migraines inutiles et faire un croix sur le doctype, hein...J'ai passé assez de temps sur ce truc à la noix, et je suis à la bourre sur mon planning.
Y'a plus qu'à mettre le sujet en résolu (si je trouve comment faire)...n'empêche que si quelqu'un a une explication, ne vous gênez surtout pas, hein...
Je sens que ce forum va me plaire. Vous êtes formidables. ^^


EDIT : RHAAAAAA !!! IE le boulet a encore frappé !!! Effectivement, ça plante... Smiley decu Bouuuhouhouu...j'en ai marre...
Bon, du coup je laisse le sujet ouvert, mais je vais me pencher sur des solutions alternatives, ras le bol.
Merci encore, blue.
Modifié par kea (28 Jul 2007 - 15:49)
le doctype est obligatoire en plus.

L'exemple que tu as pris marche bien avec IE au départ ? et y a t'il un doctype ? car c'est peut-être tes modifications qui font buguer, sans vouloir te vexer Smiley cligne
L'exemple (sur page isolée) fonctionnait correctement sous IE.
Quant à mon doctype, la page "image" est la même pour les deux navigateurs. J'ai seulement créé une "mise en page" CSS spécifique pour cette bouse d'IE (et je te raconte pas à quoi ressemble le code...mais ça marche, un miracle...alors j'y touche plus. Smiley lol )
Bon, de toute façon ça me fait des trucs étranges. Comme la boite, même invisible, est prise en compte, ça m'agrandit la fenêtre lorsque j'approche le curseur du bord. (Je le vois au barres de défilement qui s'étendent...)
Fait suer. Bon, soit je tente de dépouiller le code du site que je donnais en lien au début (encore du retard...), soit j'oublie la preview et je me tourne vers des outils sympa comme ça :
http://orangoo.com/labs/GreyBox/
ou ça :
http://www.cssplay.co.uk/menu/slide_show.html#portrait2

Résultat du match : Kea 0 - 1 IE

Damned !

(edit : et je ne me vexe jamais lorsqu'on tente de m'aider...il n'y avait pas de doctype sur le code originel que j'ai modifié. C'était un exemple trouvé sur un forum) Smiley smile
Modifié par kea (28 Jul 2007 - 16:28)
Bonjour,

Voilà un code javascript que j'avais fait en m'inspirant d'un autre qui affichait les title dans un div.
Il affiche les images dans un div flottant à côté de la souris sur tous les liens qui possèdent un attribut rel="imgShow", en remplaçant "big" par "small" dans le chemin (si pas voulu enlever la partie en gras).

Pour le reste, je suis (de loin) pas un pro du javascript donc je le fournis tel-quel parce qu'il peut aider mais c'est tout Smiley cligne .

var positionX = 5; // décalage axe X par rapport à la souris
var positionY = 5; // décalage axe Y par rapport à la souris


// classe principale
imgShow = {
  offsetX : positionX,
  offsetY : positionY,
  imgBox : null,
  imgTag : null
}

imgShow.init = function () {
	if (!document.getElementById) return;

	// créer le code html suivant
	// <div id="imgShow">
	//   <img />
	// </div>
	this.imgTag = document.createElement('img');

	this.imgBox = document.createElement('div');
	this.imgBox.setAttribute('id', 'imgShow');
	this.imgBox.style.position = 'absolute';
	this.imgBox.style.display = 'none';

	document.getElementsByTagName('body').item(0).appendChild(this.imgBox);
	this.imgBox.appendChild(this.imgTag);

	// suivre la souris
	document.onmousemove = function (evt) {imgShow.move (evt)};

	// parcourire les liens
	var a;
	var anchors = document.getElementsByTagName('a');

	for (var i = 0; i < anchors.length; i ++) {
		a = anchors[ i ];   // les espaces c'est pour que le forum n'en fasse pas de l'italique
		if(a.getAttribute('rel') == 'imgShow') {
			a.onmouseover = function() {imgShow.start(this.getAttribute('href')[b].replace(/big/, 'small')[/b])};
			a.onmouseout = function() {imgShow.end()};
		}
	}
}

// suivre la souris (de  http://solardreamstudios.com)
 
imgShow.move = function (evt) {
	var x=0, y=0;
	if (document.all) {//IE
		x = (document.documentElement && document.documentElement.scrollLeft) ? document.documentElement.scrollLeft : document.body.scrollLeft;
		y = (document.documentElement && document.documentElement.scrollTop) ? document.documentElement.scrollTop : document.body.scrollTop;
		x += window.event.clientX;
		y += window.event.clientY;

	} else {//Good Browsers
		x = evt.pageX;
		y = evt.pageY;
	}
	this.imgBox.style.left = (x + this.offsetX) + "px";
	this.imgBox.style.top = (y + this.offsetY) + "px";
}

// afficher une image
imgShow.start = function (imgToUse) {
	if (!this.imgBox) return;
	document.onmousemove = function (evt) {imgShow.move (evt)};
	this.imgTag.src = imgToUse;
	this.imgBox.style.display = 'block';
}

// cacher une image
imgShow.end = function () {
	document.onmousemove = null;
	if (!this.imgBox) return;
	this.imgBox.style.display = 'none';
}

window.onload = function () {
	imgShow.init ();
}

Modifié par Necromantik (28 Jul 2007 - 17:23)
Yes, merci Nekromantik !
Je tente ça plus tard dans le week end (pas le temps, là..) et je reviens te dire ce que ça a donné.

(chouette pseudo, au fait...Encore un cinéphile au goût très sûr. .. Smiley lol )
kea a écrit :
L'exemple (sur page isolée) fonctionnait correctement sous IE.
Quant à mon doctype, la page "image" est la même pour les deux navigateurs. J'ai seulement créé une "mise en page" CSS spécifique pour cette bouse d'IE (et je te raconte pas à quoi ressemble le code...mais ça marche, un miracle...alors j'y touche plus. Smiley lol )
Bon, de toute façon ça me fait des trucs étranges. Comme la boite, même invisible, est prise en compte, ça m'agrandit la fenêtre lorsque j'approche le curseur du bord. (Je le vois au barres de défilement qui s'étendent...)
Fait suer. Bon, soit je tente de dépouiller le code du site que je donnais en lien au début (encore du retard...), soit j'oublie la preview et je me tourne vers des outils sympa comme ça :
http://orangoo.com/labs/GreyBox/
ou ça :
http://www.cssplay.co.uk/menu/slide_show.html#portrait2

Résultat du match : Kea 0 - 1 IE

Damned !

(edit : et je ne me vexe jamais lorsqu'on tente de m'aider...il n'y avait pas de doctype sur le code originel que j'ai modifié. C'était un exemple trouvé sur un forum) Smiley smile


En fait, je voulais parler de l'exemple que tu avais trouvé sur un forum lol.

J'espère que la solution de Necromantik va marcher Smiley smile
Nekromantik 1 - 0 IE6

You win.

Les affaires reprennent !
\o/
I feel good, tadadadadadadaaaaaaaa ta da !
Smiley smile
Encore un gigantesque merci à tous les deux. J'espère pouvoir vous rendre la pareille un jour (quand je serai à niveau, d'ici un ou deux siècles....
Smiley lol )

Allez zou, au boulot, kea, t'as plus d'excuse...
Salut c'est exactement ce que je recherche , par contre je n'en comprend pas du tout son utilisation , où doit on mettre ton code ? et comment l'utiliser , j'avoue etre un peut perdu avec ce code .