Bonjour!
Je profite d’un peu de répit ce dimanche pour terminer la première partie de ce tutoriel. Nous allons voir comment faire des drag’n drop (glisser déposer) avec JQuery. Dans un second temps nous verrons comment sauvegarder les modifications directement en base de donnée avec de l’ajax. Pour voir un exemple je vous propose d’aller faire un tour sur mon site de gestion d’une équipe de rugby (projet en cour) : teamManagerXV.
Bon allez on attaque?!
- Le coté client : XHTML
Comme d’habitude le code puis les explications
- <meta http-equiv=”Content-type” content=”text/html; charset=utf-8″ />
- <script type=”text/javascript” src=”jquery.js”></script>
- <script type=”text/javascript” src=”interface.js”></script>
- <script type=”text/javascript” src=”script.js”></script>
- <link rel=”stylesheet” type=”text/css” href=”styles.css” media=”all”/>
- </head>
- <h1>Waouuuuuuuhhhhhh</h1>
- <div class=”ingredient”>
- <div id=”1″ class=”drag”>sucre</div>
- <div id=”2″ class=”drag”>lait</div>
- <div id=”3″ class=”drag”>farine</div>
- <div id=”4″ class=”drag”>oeuf</div>
- <div id=”5″ class=”drag”>sel</div>
- </div>
- <div class=”recette” id=”r_1″>
- <h3>Pâte à crêpe</h3>
- <div class=”recette_ingredient”>
- </div>
- </div>
- <div class=”recette” id=”r_2″>
- <h3>Pâte brisée</h3>
- <div class=”recette_ingredient”>
- </div>
- </div>
- </div>
- </body>
- </html>
Alors rien de particulier pour le moment en terme de structure du document. Vous pouvez remarquer que nous avons 3 divs “principaux” : un pour les ingrédients et un pour chaque recette. Celui pour les ingrédients contient nos éléments draggables tandis que ceux pour les recettes contiennent nos récepteurs (zone de drop).
- un peu de style : CSS
- div{border:1px solid black}
- .drag,.recette_ingredient{height:20px;width:60px}
Pas grand chose ici! Juste des bordures pour que ce soit “compréhensible” et un largeur/hauteur définie pour les zones de drop et les drags.
- Enfin des trucs cool! Le javascript!
Comme notre code est basé sur le framework JQuery il faut que vous téléchargiez la librairie ainsi que la sur-couche “interface” (vous pouvez télécharger les deux sur le site d’interface). Ajustez les noms avec votre fichier xhtml. Enfin créez votre fichier script.js. Je pense avoir suffisament commenté le code pour ne pas revenir dessus. Si vous avez des questions n’hésitez pas, un petit commentaire et je vous répond dans la journée!
EDIT : grâce à piouPiouM j’ai pu résoudre le problème du mouseover.
- //on créé uen fonction pour rendre nos éléments draggable (merci piouPiouM ^^)
- function addDraggable(el){
- el.Draggable(
- {
- revert: true,
- zIndex: 1000,
- ghosting: true,
- opacity: 0.7
- }
- )
- };
- $(document).ready(
- function()
- {
- //Nos élements draggable sont définis ici. Ce sont tous les éléments avec la class CSS ‘.drag’.
- addDraggable($(’.drag’));
- //le div avec la class ‘.ingredient’ est notre première zone droppable. Elle contient nos ingrédients (original hein!).
- $(’.ingredient’).Droppable(
- {
- //elle accept les élément ayant la class ‘drag’
- accept : ‘drag’,
- //ici cela affecte des classes css suivant que la zone est active ou hover. Pratique pour changer de style au survol.
- //activeclass: ‘activeEmplacement’,
- //hoverclass: ‘hoverEmplacement’,
- //plusieurs zone de tolerance existe. Allez faire un tour sur la doc.
- //Ici nous choisissons de pouvoir dropper un élément quand le pointeur de la souri est dans la zone.
- tolerance: ‘pointer’,
- //on définit ce qu’il va se passer lorsqu’on drop un élément dans la zone. On passe l’élément draggé en parametre.
- ondrop: function (drag)
- {
- //on on récupère l’attribut recette si le drag en possede un
- var id_recette=$(drag).attr(’recette’);
- //si il en possède un on suprime le drag. Cela correspond à si un ingredient d’une recette est enlevé de sa recette.
- //supprimez le bloc et testez!
- if(id_recette){
- $(drag).remove();
- }
- },
- fit: true
- }
- );
- //Ici nous allons dropper nos ingrédient pour construire nos recettes.
- $(’.recette_ingredient’).Droppable(
- {
- accept : ‘drag’,
- activeclass: ‘activeEmplacement’,
- hoverclass: ‘hoverEmplacement’,
- tolerance: ‘pointer’,
- ondrop: function (drag)
- {
- //nous récuperons l’id de la recette. Il est contenu dans le div parent de la zone droppabe (alez revoir le xhtml ;-p).
- var id_recette=$(this).parents().attr(’id’);
- //on clone l’élément draggable. Cela permet de réutiliser un autre élément pour une autre recette!
- var drag1 = $(drag).clone();
- //nous ajoutons un attribut recette ayant pour valeur l’id de la recette.
- $(drag1).attr(’recette’,id_recette);
- //puis nous récuperons l’id de l’ingredient…
- var id_ingredient=$(drag1).attr(’id’);
- //…pour verifier qu’il ne soit pas déjà présent!
- if (!$(this).children().is(’#’ + id_ingredient)) {
- //s’il n’est pas présent on l’ajoute
- $(this).append(drag1);
- //on rend notre “clone” draggable
- addDraggable(drag1);
- //avec un petit effet pour l’apaprition :p
- $(drag1).fadeIn(”slow”);
- }
- },
- fit: true
- }
- );
- }
- );
Voila! Cette première partie est fini! Je ferais bientôt la suite avec la sauvegarde de vos recettes dans une base de donnée grâce à l’ajax!
Si vous voulez que je détail un point précis demandez via un petit commentaire! Puis si vous avez aimé n’hésitez pas à le dire c’est toujours sympa et ça motive :p
Autres articles intéressants :
- [certification mysql] #6 DDL : Modification de tables
- [certification mysql] #5 DDL : Création de tables
- [certification mysql] #4 DDL : Création de base de données
- [certification mysql] #3 DDL : Moteurs de stockage
- [html/css]ferme de liens
Articles les plus actifs :
- [tuto jquery] drag ‘n drop avec sauvegarde automatique en base de données (2/2) (28)
- [tuto mashup] Google maps sur votre site : c'est possible! (version statique) (22)
- [tuto jquery] drag ‘n drop avec sauvegarde automatique en base de données (1/2) (19)
- [tuto mashup] Galerie photo animée via Flickr : animer votre galerie (2/2) (17)
- [tuto web] cadre avec bordures extensibles valide xhtml/css (17)
- [vu sur le net] #1 résumé (7)
- [tuto flex] hello world en flex: il y a un début à tout! (6)
- [vu sur le net] #2 dominante développement et entrepreneuriat (6)
- Qui suis-je? (4)
- [annonce] La patate "fuzz" sur le web!! (et j'aime pas olivier martinez :p) (4)














![[certification mysql] #6 DDL : Modification de tables](http://antoine.guiral.info/wp-content/themes/Forte-fr/images/no-image.gif)










Cool ce tuto sur jquery, exactement ce qui me manquait pour me mettre à l’ajax (vivemenent la deuxième partie, donc)