Problème au onMouseout sur Image et Lien

Résolu
Gordon4h04 Messages postés 2 Date d'inscription   Statut Membre Dernière intervention   -  
Gordon4h04 Messages postés 2 Date d'inscription   Statut Membre Dernière intervention   -
Salut à tous,

D'abord, merci d'avance à celui/celle/ceux qui prendront le temps de me filer un coup de main avec mon souci.

J'en explique donc le contexte :

J'ai modifié quelques codes Javascript déjà trouvés sur Internet pour créer une div qui servirait à un menu "déroulant" qui apparaît et disparaît en haut de la page.. Cependant, au onMouseout, j'ai un problème.

En effet, quand la souris passe sur l'image et/ou sur un lien, la fenêtre se "range". Ma question est : comment éviter cela ? Mais gardez toutes les fonctions disponibles !

J'aimerais vraiment qu'il y ai des images et des liens dans ce menu, c'est important :)

Quelqu'un voit comment faire ?

(Et puisqu'un bout de code vaut toujours mieux qu'un long discours, voilà le code, et le lien de l'exemple !)

Exemple : http://4h04.com/test/testdiv.php

Et le code :

<html>
<head>

<style type='text/css'>
.pro
{height:200px;
width:100%;
border:solid red 1px;
background-color:gray;
position:relative;
margin-top:0px;
top:-190px;
text-align:center;
}
</style>

</head>
<body>



<div id="menu" onclick='deplace();' onMouseout='range();' class='pro'>
Un <a href='#'>lien</a> ça rentre <img src="gordon_head.png" onMouseout='range();'/>
</div>



<script language='javascript'>
var compte=0;
obj=document.getElementById('menu');
obj.style.top=obj.offsetTop;
topDepart=obj.offsetTop;

function fDeplace()
{
if(obj.offsetTop<=0)
{obj.style.top=obj.offsetTop+10;
deplace();}
}

function deplace()
{
vitesseDeplacement=30;
if(compte==0)
{
deplacement=setTimeout("fDeplace()",vitesseDeplacement);}
else
{clearTimeout(rangement);
deplacement=setTimeout("fDeplace()",vitesseDeplacement);
compte=0;
}
}


function fRange()
{
if(obj.offsetTop>=-172)
{
obj.style.top=obj.offsetTop-10;
range();}
}


function range()
{
clearTimeout(deplacement);
vitesseRange=3;
rangement=setTimeout("fRange()",vitesseRange);
compte=1;
}


</script>


</body>
</html>


Merci d'avance à tous ceux qui pourront me filer un coup de main (ou peut-être une solution alternative si il y en a ? Avec CSS3 ou je ne sais quoi, c'est fou ce qu'on est capable de faire maintenant !)

Bref, merci d'avance pour vos réponses :)

Cordialement,

Gordon,

A voir également:

2 réponses

Mihawk Messages postés 4315 Date d'inscription   Statut Contributeur Dernière intervention   846
 
Hello,

Je te conseille d'utiliser "onMouseEnter" plutôt que "onClick" pour dérouler, car d'une part c'est plus ergonomique, et d'autre part le "onMouseEnter" gère le fait que la souris survole des éléments enfants tels que des div ou des images.
1
Gordon4h04 Messages postés 2 Date d'inscription   Statut Membre Dernière intervention  
 
Merci Pierre !

Le conseil est avisé :)

En effet, du coup, j'y ai repensé et j'ai même mis un onMouseover, parce que le onMouseEnter semblait avoir quand même du mal avec l'image et le lien.

Mais désormais, ça marche !

Je laisse ce bout de code, si éventuellement ça peut intéresser quelqu'un par la suite :)

Merci encore de la réponse, ça m'a donné à réfléchir en plus de ce qui m'est arrivé à l'esprit dans la nuit :3

Je laisse aussi la page de test pendant un mois ou deux, comme ça les gens pourront voir un exemple !

Exemple : http://4h04.com/test/testdiv.php


<html>
<head>

<style type='text/css'>
.pro
{height:200px;
width:100%;
border:solid red 1px;
background-color:gray;
position:relative;
margin-top:0px;
top:-190px;
text-align:center;
}
</style>

</head>
<body>


<div id="hide" style="width:450px;height:150px;overflow:hidden;">

<div id="menu" onMouseover='deplace();' onMouseout='range();' class='pro'>
Un <a href='#' onclick='range();'>lien</a> passe <img src="gordon_head.png" onclick='range();'/> Si on clique sur l'image, la div se range.
</div>
</div>


<script language='javascript'>
var compte=0;
obj=document.getElementById('menu');
obj.style.top=obj.offsetTop;
topDepart=obj.offsetTop;

function fDeplace()
{
if(obj.offsetTop<=0)
{obj.style.top=obj.offsetTop+10;
deplace();}
}

function deplace()
{
vitesseDeplacement=30;
if(compte==0)
{
deplacement=setTimeout("fDeplace()",vitesseDeplacement);}
else
{clearTimeout(rangement);
deplacement=setTimeout("fDeplace()",vitesseDeplacement);
compte=0;
}
}


function fRange()
{
if(obj.offsetTop>=-172)
{
obj.style.top=obj.offsetTop-10;
range();}
}


function range()
{
clearTimeout(deplacement);
vitesseRange=3;
rangement=setTimeout("fRange()",vitesseRange);
compte=1;
}


</script>


</body>
</html>
0