11499 sujets

JavaScript, DOM et API Web HTML5

Bonjour,

Voici le résultat que je souhaite.

Au survol d'une image, elle s’agrandit et un texte apparait par dessus elle. Lorsqu'on retire le curseur de l'image, elle reprend sa taille et le texte disparait.

J'ai l'effet souhaité si ce n'est un problème de focus. C'est à dire que lorsque le curseur passe sur le texte, alors je perd le focus sur l'image et celle-ci reprend sa taille et le texte disparait.

J'ai cherché après beaucoup de solution mais n'ai rien trouvé pour le moment. Je test actuellement bind et unbind, mais ce n'est pas concluant pour le moment.

Je pense que le problème est en partie lié au z-index utilisé pour que le texte passe au dessus de l'image, mais je ne vois pas comment faire autrement pour afficher ce texte. L'idéal serai de trouver une fonction qui rende le texte 'fantôme', c'est à dire qu'il ne prenne pas le focus...

J'utilise bien évidement du Jquery.

Même si je pense pas vraiment que ce soit mon code qui pose problème mais plutôt trouver la bonne fonction, je vous le mets quand même ^^

code HTML :

			<div class="menu_accueil">
				<a href=""><div class="icon1"><span>test</span><img class="icon1" src="img/menu1.png" alt="Pose d'enrobés" /></div></a>
				<a href=""><div class="icon2"><span>test</span><img class="icon2" src="img/menu2.png" alt="Pavage Bordures" /></div></a>
				<a href=""><div class="icon3"><span>test</span><img class="icon2" src="img/menu3.png" alt="Pavage Bordures" /></div></a>
				<a href=""><div class="icon4"><span>test</span><img class="icon4" src="img/menu4.png" alt="Pavage Bordures" /></div></a>
				<a href=""><div class="icon5"><span>test</span><img class="icon5" src="img/menu5.png" alt="Pavage Bordures" /></div></a>
				<a href=""><div class="icon6"><span>test</span><img class="icon6" src="img/menu6.png" alt="Pavage Bordures" /></div></a>
				<a href=""><div class="icon7"><span>test</span><img class="icon7" src="img/menu7.png" alt="Pavage Bordures" /></div></a>
				<a href=""><div class="icon8"><span>test</span><img class="icon8" src="img/menu8.png" alt="Pavage Bordures" /></div></a>
				<a href=""><div class="icon9"><span>test</span><img class="icon9" src="img/menu9.png" alt="Pavage Bordures" /></div></a>
			</div>


Code css ( c'est surtout du positionnement ) :

/****************************************************************************/
/*  <<<<<<<<<<<<<<<<<<<<<<<<<<         menu_accueil       >>>>>>>>>>>>>>>>>>>>   */
/**************************************************************************/
div.menu_accueil{
	position:relative;
	float:left;
	border: yellow 0px solid;
	margin: 100px 0px 0px 0px;
	z-index:0;
}
div.menu_accueil div{
	position:absolute;
}
div.menu_accueil span{
	position:absolute;
	top:30px;
	right:25px;
	color:red;
	display:none;
}
/*  par colonne */
div.icon1, div.icon4, div.icon7{
	margin-left: -25px;
	z-index:0;
}
	div.icon1 img, div.icon4 img, div.icon7 img{width: 140px;}
	
div.icon2, div.icon5, div.icon8{
	margin-left: 90px;
	z-index:-1;
}
	div.icon2 img, div.icon5 img, div.icon8 img{width: 120px;}
	
div.icon3, div.icon6, div.icon9{
	margin-left: 190px;
	z-index:-2;
}
	div.icon3 img, div.icon6 img, div.icon9 img{width: 100px;}

/* individuel */
div.menu_accueil div.icon1{
	margin-top: 0px;
}
div.menu_accueil div.icon2{
	margin-top: 23px;
}
div.menu_accueil div.icon3{
	margin-top: 42px;
}
div.menu_accueil div.icon4{
	margin-top: 140px;
}
div.menu_accueil div.icon5{
	margin-top: 148px;
}
div.menu_accueil div.icon6{
	margin-top: 153px;
}
div.menu_accueil div.icon7{
	margin-top: 275px;
}
div.menu_accueil div.icon8{
	margin-top: 265px;
}
div.menu_accueil div.icon9{
	margin-top: 258px;
}



Code Jquery :


 	$("div.icon1").mouseover(function(){
 		$(this).stop().animate({margin:"-20px 0px 0px -55px"},300);
 		$(this).children("img").stop().animate({width:"185px"},300);
 		$(this).children("span").fadeIn();
 	});
 	
 	$("div.icon1").mouseout(function(){
 		$(this).stop().animate({margin:"0px 0px 0px -25px"},300);
 		$(this).children("img").stop().animate({width:"140px"},300);
 		$(this).children("span").stop().fadeOut();
 	});
 	//$("span").mouseover(function(){ alert('ttt'); });
 	$("div.icon1").children("span").unbind();
Je n'utilise pas JQuery donc je ne peux pas t'aider sur le code en lui-même. Par contre sur le principe, tu ne peux pas modifier ton script pour que l'effet du mouseover/mouseout soit ignoré si le curseur passe de l'image au texte et vice-versa ? Ce serait sans doute le plus logique et le plus simple. Ca a l'avantage que si le texte dépassait de l'image et que le curseur se trouvait sur la partie de texte qui dépasse, l'effet de survol resterait, ce qui est beaucoup plus logique que s'il devait disparaître dès lors qu'on quitte l'image tout en étant quand même sur le texte (j'imagine l'effet anti-user-friendly que ça peut faire). Tu ne peux pas exclure à 100% que ça n'arrivera jamais...

De plus, je ne vois pas comment tu pourrais garder ton texte affiché en premier plan tout en le rendant « transparent à la souris ». Je pense que la seule façon de le faire est de se fier au propriétés de bubbling... Ce genre de truc ne me paraît pas très stable du point de vue compatibilité navigateur, il me semble me souvenir que tous n'ont pas le même point de vue sur le sujet du bubbling.

Pour t'aider à faire ce que je propose, deux pistes à explorer
1 - Vérifier exactement quelle est la séquence d'évènements provoquée quand tu passes de l'image au texte et vice-versa
2 - Si tu es certain que tous les navigateurs envoie mouseover sur le texte avant mouseout sur l'image, une variable booléenne suffira pour faire ignorer le mouseout quand on arrive sur le texte
3 - Si tu n'es pas certain du n°2 ou si tu veux un truc à coup sûr plus solide et aussi probablement plus user-friendly, ne fais pas disparaître immédiatement l'effet dès que l'image est quittée mais ajoute un petit délai (genre 200ms); tu pourras toujours annuler le timer dès que tu reçois mouseover sur le texte.

Note d'accessibilité #1: les alt de tes images ne sont probablement pas très pertinentes, sauf si c'est un site de carreleur... il faudrait probablement dupliquer le texte du span, ou alors ne pas le rendre invisible par défaut
Note d'accessibilité #2: attention à ne pas oublier les utilisateurs de claviers et donc doubler si possible tous les effets de survol à un effet au focus clavier (ça doit devenir un réflexe).
Modifié par QuentinC (31 Oct 2013 - 16:34)
Juste pour signaler qu'a priori, ce ne serai pas le texte qui fait perdre le focus, mais autre chose. Et pas moyen de savoir quoi !!!!!

EDIT : Bon, je viens de voir ton message. La je fait une pause parce que ça commence à m'énerver ^^. Mais comme je disais précédemant ce n'est finalement pas un problème avec le texte car même en le supprimant j'ai le problème. Faut que je trouve d'où ça viens, mais ça ne corresponds pas à mes élément html... C'est pas normal et du coup, je trouve pas.

Avec quoi tu peut voir le déroulement du script séquence par séquence ?
Modifié par MrWhite (31 Oct 2013 - 16:50)
le fait de mettre des elements en z-index négatif dans le navigateur rends celui ci transparent donc indétectable . Essai de gérer tes z-index de façon positif ... peux être un début de solution ...