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 27/10/2011, 16h34   #1
Nouveau Membre du Club
 
Inscription : novembre 2004
Messages : 114
Détails du profil
Informations forums :
Inscription : novembre 2004
Messages : 114
Points : 33
Points : 33
Envoyer un message via MSN à selinav
Par défaut Evénement hover ou mouseout ?

Bonjour,

Je reprends le script de http://tympanus.net/Tutorials/ElegantAccordion/ permettant de mettre un joli accordéon dynamique, toutefois j'aimerais le personnaliser pour que lorsque l'on sort de la zone (sorti du ul) le dernier item de liste (li) survolé reste ouvert.

J'ai jeté un oeil, je comprends bien ce qu'il faut faire dans la 2eme fonction, il faut que lorsque l'on sort de la zone on teste si la zone dans laquelle on se trouve est un autre item de liste ou non.
Si oui on exécute le code actuel, sinon on met la taille à 340px sans effet de transition.

Par contre je n'arrive pas à le formaliser, comment savoir si la souris est sorti du "ul" ou pas?

Merci de votre aide

Voici le code js
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
 
$(function() {
	$('.accordion > li').hover(
		function () {
			var $this = $(this);
			$this.stop().animate({'width':'340px'},500);
			$('.heading',$this).stop(true,true).fadeOut();
			$('.bgDescription',$this).stop(true,true).slideDown(500);
			$('.description',$this).stop(true,true).fadeIn();
		},
		function () {
			var $this = $(this);
			$this.stop().animate({'width':'150px'},1000);
			$('.heading',$this).stop(true,true).fadeIn();
			$('.description',$this).stop(true,true).fadeOut(500);
			$('.bgDescription',$this).stop(true,true).slideUp(700);
		}
	);
 
});
selinav est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/10/2011, 16h58   #2
Nouveau Membre du Club
 
Inscription : novembre 2004
Messages : 114
Détails du profil
Informations forums :
Inscription : novembre 2004
Messages : 114
Points : 33
Points : 33
Envoyer un message via MSN à selinav
J'ai ajouté le code suivant, ça fonctionne, pensez-vous qu'il y ai un meilleur moyen de le faire ?

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
 
$(function() {
	$('.accordion ').mouseout(
		function () {
			//on laisse le dernier ouvert
			var $this = last;
			$this.stop().animate({'width':'340px'},500);
			$('.heading',$this).stop(true,true).fadeOut();
			$('.bgDescription',$this).stop(true,true).slideDown(500);
			$('.description',$this).stop(true,true).fadeIn();
 
			//on ferme les autres
			var $items = $('.accordion').find("li").not(last);
			$items.each(function(i) {
				$autre=$(this);				 
				$autre.stop().animate({'width':'150px'},1000);
				$('.heading',$autre).stop(true,true).fadeIn();
				$('.description',$autre).stop(true,true).fadeOut(500);
				$('.bgDescription',$autre).stop(true,true).slideUp(700);
			});
		}
	);					
});
selinav est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/10/2011, 22h39   #3
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

Lors de l'entrée dans un volet, le code ci-dessous gère l'ouverture du volet et la fermeture du dernier volet ouvert sauf s'il s'agit du même volet.

Ce code remplace tous les autres.

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
var lastLI = null;
 
$('#accordion > li').mouseenter(function(){
	var $this = $(this);
	$this.stop().animate({'width':'480px'},500);
	$('.heading',$this).stop(true,true).fadeOut();
	$('.bgDescription',$this).stop(true,true).slideDown(500);
	$('.description',$this).stop(true,true).fadeIn();
 
	if (lastLI){
		var jObj = lastLI;
		lastLI = $(this);
		jObj.stop().animate({'width':'115px'},1000);
		$('.heading', jObj).stop(true,true).fadeIn();
		$('.description', jObj).stop(true,true).fadeOut(500);
		$('.bgDescription', jObj).stop(true,true).slideUp(700);
	} else {
		lastLI = $(this);
	}
});
__________________

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 10
Vieux 28/10/2011, 08h51   #4
Membre confirmé
 
Homme Lionel Chaumeau
Développeur Web
Inscription : octobre 2011
Messages : 75
Détails du profil
Informations personnelles :
Nom : Homme Lionel Chaumeau
Localisation : France, Puy de Dôme (Auvergne)

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : octobre 2011
Messages : 75
Points : 264
Points : 264
Merci bcp danielhagnoul
(moi aussi la question m'intéressait)
Ca marche nickel !
__________________
My laptop, my bike and my double-sticks...
kalimukti est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/10/2011, 09h18   #5
Nouveau Membre du Club
 
Inscription : novembre 2004
Messages : 114
Détails du profil
Informations forums :
Inscription : novembre 2004
Messages : 114
Points : 33
Points : 33
Envoyer un message via MSN à selinav
merci beaucoup, mais que pensez-vous de mon code?
selinav est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/10/2011, 09h25   #6
Membre confirmé
 
Homme Lionel Chaumeau
Développeur Web
Inscription : octobre 2011
Messages : 75
Détails du profil
Informations personnelles :
Nom : Homme Lionel Chaumeau
Localisation : France, Puy de Dôme (Auvergne)

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : octobre 2011
Messages : 75
Points : 264
Points : 264
Citation:
Envoyé par selinav Voir le message
merci beaucoup, mais que pensez-vous de mon code?
tu l'insères comment par rapport au code original ?
(parce que j'ai essayé vite fait hier soir et tel que je l'ai inséré, y marchait po )
__________________
My laptop, my bike and my double-sticks...
kalimukti est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/10/2011, 10h13   #7
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
Bonjour

Oops ! En lisant vos réponses, je m'aperçois que je ne vous ai pas donné la dernière version, celle qui tient compte de l'entrée dans un volet déjà ouvert. Dans ce cas précis, la version précédente provoque une bogue.

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
var lastLI = null;
 
$('#accordion > li').mouseenter(function(){
	var $this = $(this);
	$this.stop().animate({'width':'480px'},500);
	$('.heading',$this).stop(true,true).fadeOut();
	$('.bgDescription',$this).stop(true,true).slideDown(500);
	$('.description',$this).stop(true,true).fadeIn();
 
	if (lastLI){
		var jObj = lastLI;
		lastLI = $(this);
 
		if (jObj[0] != lastLI[0]){
			jObj.stop().animate({'width':'115px'},1000);
			$('.heading', jObj).stop(true,true).fadeIn();
			$('.description', jObj).stop(true,true).fadeOut(500);
			$('.bgDescription', jObj).stop(true,true).slideUp(700);
		}
	} else {
		lastLI = $(this);
	}
});
__________________

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 28/10/2011, 11h09   #8
Nouveau Membre du Club
 
Inscription : novembre 2004
Messages : 114
Détails du profil
Informations forums :
Inscription : novembre 2004
Messages : 114
Points : 33
Points : 33
Envoyer un message via MSN à selinav
Voici le code complet qui fonctionne

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
 
<script type="text/javascript">
	(function ($) {
		$(document).ready(function() {
 
 
			$(function() {
				$('.accordion > li').hover(
					function () {
						var $this = $(this);
						$this.stop().animate({'width':'340px'},500);
							$('.heading',$this).stop(true,true).fadeOut();
							$('.bgDescription',$this).stop(true,true).slideDown(500);
							$('.description',$this).stop(true,true).fadeIn();
							last=$this;
						},
						function () {
							var $this = $(this);
							$this.stop().animate({'width':'150px'},1000);
							$('.heading',$this).stop(true,true).fadeIn();
							$('.description',$this).stop(true,true).fadeOut(500);
							$('.bgDescription',$this).stop(true,true).slideUp(700);
						}
					);					
 
				});
 
				$(function() {
					$('.accordion ').mouseout(
						function () {
							//on laisse le dernier ouvert
							var $this = last;
							$this.stop().animate({'width':'340px'},500);
							$('.heading',$this).stop(true,true).hide();
							$('.bgDescription',$this).stop(true,true).show();
							$('.description',$this).stop(true,true).show();
 
							//on ferme les autres
							var $items = $('.accordion').find("li").not(last);
							$items.each(function(i) {
								$autre=$(this);				 
								$autre.stop().animate({'width':'150px'},1000);
								$('.heading',$autre).stop(true,true).fadeIn();
								$('.description',$autre).stop(true,true).fadeOut(500);
								$('.bgDescription',$autre).stop(true,true).slideUp(700);
							});
						}
 
					);					
 
				});
 
 
			});
		}(jQuery));
	</script>
selinav est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/10/2011, 11h20   #9
Membre confirmé
 
Homme Lionel Chaumeau
Développeur Web
Inscription : octobre 2011
Messages : 75
Détails du profil
Informations personnelles :
Nom : Homme Lionel Chaumeau
Localisation : France, Puy de Dôme (Auvergne)

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : octobre 2011
Messages : 75
Points : 264
Points : 264
ok, merci (danielhagnoul pour la v2 de code ) et selinav pour l'ensemble de ton code
vu, selinav, ça fonctionne, donc on peut dire que ton code est bon
et le principe est le même que dans le code de danielhagnoul, mais je préfère le code de daniel car plus concis, donc aussi plus clair.. si je reviens sur un code comme ça dans deux mois, je le relis assez facilement et assez rapidement... alors que ton code me semblera plus obscur (moi aussi j'ai tendance à faire plus long que nécessaire... et des fois je me maudis quand je fais du jquery verbeux...)
(en plus, la gestion des variables: last ne dis pas le dernier quoi... avec lastLI, je sais tout de suite ce que je manipule)
__________________
My laptop, my bike and my double-sticks...
kalimukti est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 05h47.


 
 
 
 
Partenaires

Hébergement Web