Précédent   Forum des professionnels en informatique > Webmasters - Développement Web > JavaScript > Bibliothèques & Frameworks > jQuery
jQuery Forum d'entraide sur le framework jQuery. Avant de poster : Tutoriels jQuery, FAQ jQuery, Tous les tutoriels JavaScript, Toutes les FAQ 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 29/01/2011, 18h52   #1
Nouveau Membre du Club
 
Inscription : juillet 2009
Messages : 110
Détails du profil
Informations forums :
Inscription : juillet 2009
Messages : 110
Points : 37
Points : 37
Par défaut animate mouseover mouseout

Bonjour à tous,

je coince sur un petit problème lors d'une animation dans un menu.

HTML :
Code :
1
2
3
4
5
6
<div id="menu"><ul>
<li><a href="">a</a></li>
<li><a href="">b</a></li>
<li><a href="">c</a></li>
<li><a href="">d</a></li>
</ul></div>
JS :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
$('div#menu ul li').mouseover(function() {
	$(this).animate({
    width: '200px',
    height: '300px'
  }, 1000, function() {
    // Animation complete.
  });
});
$('div#menu ul li').mouseout(function() {
	$(this).animate({
    width: '108px',
    height: '195px'
  }, 1000, function() {
    // Animation complete.
  });
});
Vous avez compris l'idée, je souhaite agrandir la taille des <li> au survol et leur faire retrouver leur petite taille lorsque la souris sort du <li>.

Mon problème : si je survol vite les <li>, la fonction mouseout est appelé lorsque l'animation mouseover est terminé.

La solution (mais comment ?) : exécuté la fonction mouseout dès que la souris sort du <li> et arrété l'exécution mouseover, mais je ne vois pas comment faire...

Merci
gianni7033 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/01/2011, 23h15   #2
Rédacteur
 
Avatar de danielhagnoul
 
Homme Daniel Hagnoul
Étudiant perpétuel
Inscription : février 2009
Messages : 3 221
Détails du profil
Informations personnelles :
Nom : Homme Daniel Hagnoul
Âge : 61
Localisation : Belgique

Informations professionnelles :
Activité : Étudiant perpétuel
Secteur : Enseignement

Informations forums :
Inscription : février 2009
Messages : 3 221
Points : 6 767
Points : 6 767
Bonsoir

Voici un exemple, mais le résultat esthétique dépend de la manière et de la vitesse à laquelle l'utilisateur survole le menu. Si l'utilisateur promène le pointeur rapidement de haut en bas à plusieurs reprises ce n'est pas joli. J'ai déjà testé plusieurs solutions, mais aucune n'est vraiment satisfaisante. C'est pourquoi je me limite à utiliser stop() : http://api.jquery.com/stop/.

Je n'utilise jamais de menu animé, l'animation bouleverse la mise en page ou alors il faut utiliser un positionnement absolu et jouer sur le z-index. Voir : http://www.developpez.net/forums/d10...v/#post5744105

Code :
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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
<!doctype html>
<html lang="fr">
<head>
	<meta http-equiv="X-UA-Compatible" content="chrome=1">
	<meta charset="utf-8">
	<meta name="Author" content="Daniel Hagnoul">
	<title>Forum jQuery</title>
	<style>
		body { background-color:#dcdcdc; color:#000000; font-family:sans-serif; font-size:medium; font-style:normal;
		font-weight:normal; line-height:normal; letter-spacing:normal; }
		h1,h2,h3,h4,h5 { font-family:serif; }
		div,p,h1,h2,h3,h4,h5,h6,ul,ol,dl,form,table,img { margin:0px; padding:0px; }
		h1 { font-size:2em; text-shadow: 4px 4px 4px #bbbbbb; text-align:center; }
		p { padding:6px; }
		div#conteneur { width:95%; min-width:800px; min-height:500px; margin:12px auto; background-color:#FFFFFF;
		color:#000000; border:1px solid #666666; }
 
		/* TEST */
		#menu ul li {
			display:block;
			width:200px;
			height:36px;
			padding:6px;
			border:1px solid grey;
		}
	</style>
</head>
<body>
	<h1>Forum jQuery</h1>
	<div id="conteneur">
		<div id="menu">
			<ul>
				<li><a href="">a</a></li>
				<li><a href="">b</a></li>
				<li><a href="">c</a></li>
				<li><a href="">d</a></li>
			</ul>
		</div>		
	</div>
	<script charset="utf-8" src="http://code.jquery.com/jquery-1.4.4.min.js"></script>
	<script>
		$(function(){
			$("li", "#menu").hover(
				function(){
					$(this).stop(true, true).animate({
						"width": "+=100px",
						"height": "+=36px"
					}, "slow");
				},
				function(){
					$(this).stop(true, true).animate({
						"width": "-=100px",
						"height": "-=36px"
					}, "slow");
				}
			);
		});
	</script>
</body>  
</html>
__________________

FAQ jQuery

Mon cahier d’exercices sur jQuery & Co

Si un message vous a aidé ou vous semble pertinent, votez pour lui !
danielhagnoul est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/01/2011, 05h22   #3
Nouveau Membre du Club
 
Inscription : juillet 2009
Messages : 110
Détails du profil
Informations forums :
Inscription : juillet 2009
Messages : 110
Points : 37
Points : 37
bonsoir merci de votre réponse,

après un bon moment passé sur la fonction stop, sans modifier le css, ni mettre de position absolute ni z-index, j'ai ajouté 2 stop (sans pour autant comprendre ce que j'ai fais lol )

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
$('#menu ul li').mouseover(function(){
	$(this).stop();	
	$(this).animate({
    width: '200px',
    height: '300px'
  }, 150, function(){
    // Animation complete.
		$(this).children('div').animate({marginTop: "50px"}, 150);
  });
});

$('#menu ul li').mouseout(function(){
	$('#menu ul li').stop();
	$('#menu ul li').animate({
    width: '108px',
    height: '195px'
  }, 150, function(){
    // Animation complete.
		$(this).children('div').animate({marginTop: "-25px"}, 150);
  });
});
gianni7033 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 05h15.


 
 
 
 
Partenaires

Hébergement Web