jQuery UI

jQuery UI

Tutoriel publié en mai 2011 par Galdon dans la catégorie jQuery

jQuery UI est une surcouche de jQuery qui propose des outils pour créer des interfaces graphiques interactives. Ses fonctionnalités se divisent en 3 catégories :

  • Interactions
    Elles permettent de donner des propriétés très intéressantes à des éléments HTML, comme le fait de pouvoir être attrapé et déplacé avec la souris (drag & drop), d'être redimensionné comme une fenêtre, ou encore d'être sélectionné comme des icônes sur le bureau de votre OS.

  • Widgets
    Les widgets sont des objets "clé en main " qui proposent des fonctionnalités de haut niveau comme le DatePicker par exemple, qui affiche un calendrier permettant de sélectionner une date.

  • Effects
    Ils enrichissement les effets par défaut proposés par jQuery que l'on a vus dans les chapitres précédents (fadeIn, slideUp...).
    Grâce à jQuery UI, il est par exemple possible d'animer la propriété CSS background-color avec .animate(), chose qui n'est pas possible dans jQuery seul, ou encore d'ajouter des transitions lors des addClass/removeClass...

Pour utiliser jQuery UI, il faut bien entendu avoir inclus jQuery dans votre page web avec la balise <script> , mais il faut aussi ajouter le fichier .js de jQuery UI ainsi qu'une feuille de style.

En effet, jQuery UI fonctionne avec des thèmes (CSS), ces thèmes sont nécessaires pour afficher correctement les widgets notamment.

Aller, voici le code à mettre dans le <head> en utilisant le CDN Google API :

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.5.2/jquery.min.js"></script>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.12/jquery-ui.min.js"></script>
<link rel="stylesheet" type="text/css" href="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.12/themes/smoothness/jquery-ui.css" />

Datepicker

On va commencer doucement avec le Datepicker, qui affiche un calendrier pour choisir une date.

<input type="text" id="datepicker">
jQuery(document).ready(function($){
	$("#datepicker").datepicker();
});
Tester /ressources/exemple/cours-jquery/ch7_exemple1.html
Exemple 1
Datepicker jQuery UI

Vous voyez que les mois sont affichés en Anglais (langue par défaut). Heureusement, il est parfaitement possible d'utiliser une traduction dans la langue de votre choix (il suffit d'une petite recherche sur Google).

Dans le cas présent, il suffit de mettre ce code JavaScript avant d'utiliser le datepicker, pour définir sa langue.

$.datepicker.regional['fr'] = {
	closeText: 'Fermer',
	prevText: 'Précédent',
	nextText: 'Suivant',
	currentText: 'Aujourd\'hui',
	monthNames: ['Janvier','Février','Mars','Avril','Mai','Juin','Juillet','Août','Septembre','Octobre','Novembre','Décembre'],
	monthNamesShort: ['Janv.','Févr.','Mars','Avril','Mai','Juin','Juil.','Août','Sept.','Oct.','Nov.','Déc.'],
	dayNames: ['Dimanche','Lundi','Mardi','Mercredi','Jeudi','Vendredi','Samedi'],
	dayNamesShort: ['Dim.','Lun.','Mar.','Mer.','Jeu.','Ven.','Sam.'],
	dayNamesMin: ['D','L','M','M','J','V','S'],
	weekHeader: 'Sem.',
	dateFormat: 'dd/mm/yy',
	firstDay: 1,
	isRTL: false,
	showMonthAfterYear: false,
	yearSuffix: ''
};
$.datepicker.setDefaults($.datepicker.regional['fr']);

Slider

Le slider jQuery est un widget qu'on utilise généralement dans les formulaires, pour permettre à l'utilisateur de sélectionner une valeur ou un intervalle de valeurs.

Pour l'exemple, on va prendre un cas concret en réalisant un slider permettant de définir une fourchette de prix.

Il va nous falloir 2 valeurs : le prix minimum et le prix maximum, donc on va créer le slider en mode range (traduction : "intervalle").

<form id="form">
	<div><b>Fourchette de prix :</b></div><br/>
	<div id="bornes_prix">De <span id="prix_min"></span> à <span id="prix_max"></span> €</div>
	<div id="slider_prix"></div>
</form>
jQuery(document).ready(function($){
	// Création d'un slider dans l'élément id slider_prix
	$("#slider_prix").slider({
		range:  true,
		min:    0,			// valeur min
		max:    1000,		// valeur max
		values: [0, 600],	// position des 2 curseurs à l'initialisation
		
		// Action à effectuer lorsqu'on déplace l'un des curseur
		slide: function(event, ui){
			$('#prix_min').html(ui.values[0]);
			$('#prix_max').html(ui.values[1]);
		}
	});
	
	// Initialisation des valeurs numériques au chargement de la page
	$('#prix_min').html($("#slider_prix").slider("values", 0));
	$('#prix_max').html($("#slider_prix").slider("values", 1));
});
Tester /ressources/exemple/cours-jquery/ch7_exemple2.html
Exemple 2
Slider jQuery en mode "range" : fourchette de prix

Drag & drop

Pour créer un drag & drop (glisser-déposer) avec jQuery UI, on utilise des interactions (draggable et droppable).

Ça va être un peu plus complexe que les widgets puisque les interactions ne fonctionnent pas "out of the box".

Nous allons prendre un exemple concret : 2 voitures et 2 personnages sur un parking, le but du jeu va être de pouvoir déplacer à la fois les voitures et les personnages, et aussi de pouvoir glisser-déposer un personnage dans une voiture (le faire monter dedans en quelque sorte).

Voici le code HTML des éléments que l'on va manipuler (vous trouverez le code CSS dans la source de l'exemple 3) :

<div id="parking">
	<div id="voiture_bleue" class="voiture"></div>
	<div id="voiture_rouge" class="voiture horizontale"></div>
	<div id="boby" class="personnage">
		<span class="nom">Boby</span>
	</div>
	<div id="jeanne" class="personnage">
		<span class="nom">Jeanne</span>
	</div>
</div>

Drag

La première chose que l'on va faire, c'est permettre de déplacer les personnages et les voitures avec la souris. Pour cela, on va utiliser l'interaction draggable.

Par ailleurs, on va s'arranger pour que l'utilisateur ne puisse pas déplacer un de ces éléments en dehors du parking, grâce au paramètre containment de l'interaction draggable :

jQuery(document).ready(function($){
	$(".voiture").draggable({ containment: 'parent' });
	$(".personnage").draggable({ containment: 'parent' });
});
Tester /ressources/exemple/cours-jquery/ch7_exemple3-1.html
Exemple 3.1
Parking avec éléments draggable

Drop

Nous pouvons déplacer les éléments qui se trouvent dans le parking, maintenant il faut s'arranger pour pouvoir faire monter les personnages dans les voitures.

Pour cela, on va utiliser l'interaction droppable sur les voitures. Ça signifie qu'on va pouvoir déposer des éléments draggable dans les voitures, avec la souris.

jQuery(document).ready(function($){
	$( ".voiture" ).draggable({ containment: 'parent' });
	$( ".personnage" ).draggable({ containment: 'parent' });
	
	$( "#voiture_rouge" ).droppable({
		accept: "#jeanne",				// Seul le personnage #jeanne peut monter dans la voiture rouge
		drop: function( event, ui ) {	// Action effectuée lorsqu'on dépose un élément dans la voiture rouge
			// ui.draggable désigne l'élément déplacé, exemple : #jeanne ou #boby
			ui.draggable.appendTo( $(this) )			// On place le personnage dans la voiture (au niveau du DOM)
				.css({									// Positionnement CSS du personnage au centre de la voiture
					left: '65px',
					top:  '15px'
				})
				.draggable({ containment: 'parent' });	// Le personnage ne peut plus sortir de la voiture
		}
	});
	
	// On fait pareil pour la voiture bleue
	$( "#voiture_bleue" ).droppable({
		accept: "#jeanne, #boby",
		drop: function( event, ui ) {
			ui.draggable.appendTo( $(this) )
				.css({
					left: '25px',
					top:  '50px'
				})
				.draggable({ containment: 'parent' });
		}
	});
});
Tester /ressources/exemple/cours-jquery/ch7_exemple3-2.html
Exemple 3.2
The end !

En pratique, le drag & drop peut être très utile pour effectuer des opérations qui seraient trop peu ergonomiques via des formulaires (comme déplacer des mails dans un dossier sur un webmail...).

Le mot de la fin

Ce cours sur jQuery est terminé, j'espère qu'il vous aura été utile pour débuter et acquérir les bases. Si vous bloquez, vous pouvez poser des questions sur le forum. N'oubliez pas de consulter la documentation jQuery qui est très bien fournie lorsque vous rencontrez des problèmes, c'est le premier reflex à avoir.

Allez donc jeter un oeil sur cette page : incorporer un modèle 3d dans une photographie.

Ce tutoriel fait partie d'un cours : aller au sommaire pour voir les autres chapitres.

12 commentaires :
commentaire n°1937 par cedric
cedric lundi 5 septembre 2011, 14:17
un grand merci pour cette découverte

j utilisais jusqu a présent des petits script jquery sans vraiment comprendre le code -
c est + limpide maintenant
commentaire n°2223 par rostyttr
rostyttr vendredi 4 mai 2012, 18:33
Slt, merci pour le tuto il est génial, je suis débutant en web, comment faire un site intégrale en jquery ui please...
commentaire n°2251 par bk
bk mercredi 30 mai 2012, 15:38
Merci pour ce cours.
commentaire n°2277 par regi07
regi07 mardi 3 juillet 2012, 15:37
super!
commentaire n°2476 par Cofacoul
Cofacoul mercredi 30 janvier 2013, 01:25
Merciiii INFINIMENT pour ce super tuto. Grace a ce tuto le drag and drop n'est plus un secret. Très limpide.
commentaire n°2554 par aidezmoi
aidezmoi lundi 13 mai 2013, 17:00
Bonjour,
SVP j ai une application trés urgente à faire,le probléme que j'ai c'est que j'arrive pas à lier entre le php et le javascript ,je sais que je dois utiliser Ajax mais j'arrive pas à trouver l'idée pour le faire, et si qqn peut m'aider je serai trés reconnaissant à lui.

commentaire n°2649 par SLK
SLK lundi 30 septembre 2013, 23:05
Merci beaucoup !

par contre, j'imagine que les scripts vont changer de version un jour ou l'autre. Par exemple quand on écrit ça dans notre page HTML :

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.12/jquery-ui.min.js";></script>

Quand le site fera évoluer son "jquery-ui.min.js" au-delà de la version 1.8.12 est-ce que mon script plantera ?

Si oui, on peut remédier a ce problème ?
commentaire n°2656 par Galdon
Galdon jeudi 3 octobre 2013, 22:56
Non justement ça ne plante pas parce qu'il y a la version dans l'URL. Si Google héberge une nouvelle version, cette nouvelle version sera accessible depuis une autre URL.

Après, c'est sûr que si un jour (dans quelques années) Google décide de faire un peu de ménage et de virer les vielles versions, ça ne fonctionnera plus.

En tout cas j'utilise le CDN Google depuis plusieurs années (2011 au moins), et je n'ai jamais eu le moindre problème.

Par contre j'ai eu récemment ce problème avec le bootstrap twitter, hébergé sur un CDN autre que Google (qui fait des modifs "sauvages").
commentaire n°2688 par louise
louise samedi 30 novembre 2013, 11:39
Bonjour Galdon.

Merci pour ces exemples, ça fait gagner un temps fou aux débutants comme moi tout en comprenant ce que l'on fait.
J'ai une question.

Sur ton exemple de slider avec les fourchettes de prix saurais-tu comment on peut modifier les paramètres d'une url lorsque l'on change les valeurs avec le slider?
Par exemple j'ai une url :
ventedebonbon.co/roudoudou?minprix=10&maxprix=100

je ne veux pas forcément utiliser ajax, un changement de page avec les nouveaux parametres irait bien.

Merci.
commentaire n°2694 par Galdon
Galdon mercredi 4 décembre 2013, 12:08

Il suffit d'utiliser des champs hidden pour ça, dans un formulaire en GET (method="get") qui cible la page courante (action="").

De cette manière, dès qu'on va submit le formulaire, la page courante va être rappelée avec les champs hidden en paramètre (minprix et maxprix).

Voici un exemple :

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<link rel="stylesheet" type="text/css" href="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.12/themes/smoothness/jquery-ui.css" />
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.5.2/jquery.min.js"></script>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.12/jquery-ui.min.js"></script>
<script type="text/javascript">
jQuery(document).ready(function($){
	$('#slider_prix').slider({
		range:  true,
		min:    0,
		max:    1000,
		values: [0, 600],
		slide: function(event, ui){
			$('#prix_min').val(ui.values[0]);
			$('#prix_max').val(ui.values[1]);
		}
	});
});
</script>
</head>
<body>
<form method="get" action="">
	<div id="slider_prix"></div>
	<input type="hidden" name="minprix" id="prix_min" value="" />
	<input type="hidden" name="maxprix" id="prix_max" value="" />
	<input type="submit" value="Rechercher" />
</form>
</body>
</html>
commentaire n°2792 par saad37
saad37 mercredi 9 avril 2014, 13:57
TOut d'abord merci pour ce tuto que je trouve trés intéressent, dans le cas de mon application , j'ai mis un div pour afficher le calendrier de datpicker ce que je souhaite c'est mettre le curseur sur une date données une bull s'affiche avec des données concernant les evenements effectuer lors de cette date
commentaire n°2889 par Remy
Remy mercredi 17 septembre 2014, 23:50
Super !
Bon décryptage.
Clair.
Accessible.
Bien rédigé.
J'ai aimé l'humour.

Bref merci beaucoup !
Petite note : dans ta page de comparateur de hdd ssd, le titre de la page est "Compatateur" ! c'est mignon, mais ce n'est peut-être pas ce que tu voulais y mettre.
facultatif
Facebook Twitter RSS Email
Forum Excel
Venez découvrir le nouveau forum excel question/réponse à la stackoverflow.com !
Forum Excel
hit parade n'en a rien a foutre du W3C Positionnement et Statistiques Gratuites Vincent Paré