« STIC:STIC I - exercice 5 (Yoshi) » : différence entre les versions

De EduTech Wiki
Aller à la navigation Aller à la recherche
Aucun résumé des modifications
 
(18 versions intermédiaires par le même utilisateur non affichées)
Ligne 1 : Ligne 1 :
{{ En construction }}
{{stic archive}}
{{stic12}}
<categorytree mode="pages" depth="0" style="float:right; clear:right; margin-left:3px; border:1px solid gray; padding:0.7ex; background-color:#f9f9f9;">STIC</categorytree>
<categorytree mode="pages" depth="0" style="float:right; clear:right; margin-left:3px; border:1px solid gray; padding:0.7ex; background-color:#f9f9f9;">STIC</categorytree>


Ligne 22 : Ligne 21 :
Lectures conseillées :
Lectures conseillées :


* [[JQuery]] : se familiariser avec la syntaxe de base --> $("..")
* {{ goblock | [[JQuery]] }} : se familiariser avec la syntaxe de base --> $("..")


Prérequis techniques :
Prérequis techniques :
Ligne 54 : Ligne 53 :
**:* D is the distance from the starting point to the center of the target.
**:* D is the distance from the starting point to the center of the target.
**:* W is the width of the target measured along the axis of motion.
**:* W is the width of the target measured along the axis of motion.
** Résumé : '''plus grand est la distance et plus petit le target, plus grande la difficulté'''
* Implications visuo-spatiales
* Implications visuo-spatiales
** Nécessite de motricité fine (à ne pas sous-estimer en fonction du public cible)
** Nécessite de motricité fine (à ne pas sous-estimer en fonction du public cible)
Ligne 71 : Ligne 71 :
=== JQuery UI ===
=== JQuery UI ===


* Démo / étudier les exemples drag and drop dans le tutoriel [[JQuery_UI#Drag_and_drop_avec_jQuery_UI|JQuery UI]]
* Page de référence {{ Goblock | [[JQuery UI]] }}
** En particulier [[JQuery_UI#Drag_and_drop_avec_jQuery_UI|La séction sur le drag&drop]]


'''Hands on'''
==== Exemples (code + liens) ====
* [http://jqueryui.com/download/ Télécharger une config. de JQuery UI], ensuite dezipper dans un dossier approprié.
* Enregistrez une copy du HTML de [http://tecfaetu.unige.ch/perso/maltt/fritz0/guides/jquery-ui/ex6_drag_and_drop_no_code.html jQuery UI - application drag and drop sans code supplémentaire] (Exemple de difficulté moyenne). N'enregistrez '''pas''' la page complète !
* Il suffit de bouger la page dans le dossier ''jquery-ui-1.11.2.custom'' et elle marchera. Le dossier contient déjà la bibliothèque JQuery (dans le dossier external).


Une version raccourcie de cet exemple simple est ci-dessous:
Le code des exemples est disponibles :
<source lang="HTML5">
 
<!doctype html>
* {{ Goblock | [https://github.com/MALTT-STIC/stic-1-jquery-ui Repository MALTT-STIC/stic-1-jquery-ui] }} pour le download
<html>
* {{ Goblock | [https://maltt-stic.github.io/stic-1-jquery-ui/index.html Liste des exemples] }} pour tester
<head>
 
<meta charset="utf-8">
À voir particulièrement :
<title>jQuery Ui Exemple  : application drag and drop sans code supplémentaire</title>
<link rel="stylesheet" type="text/css" href="jquery-ui.min.css">
<style>
.item {
float: left;
width: 150px;
border: 1px solid #999;
background-color: #F9F6D0;
padding: 10px 15px;
font-weight: bold;
font-size: 16px;
margin-right: 20px;
margin-bottom: 50px;
}


.clear {
* [https://maltt-stic.github.io/stic-1-jquery-ui/ex03-drag-simple/ Drag simple] (ex04): comment appliquer facilement le comportement draggable à un élément
clear: both;
* [https://maltt-stic.github.io/stic-1-jquery-ui/ex04-drag-with-options/ Drag avec options] (ex05) : fournir des options au comportement draggable, par exemple pour limite l'axe de mouvement ou modifier le type de curseur pour signaler l'affordance
overflow: hidden;
* [https://maltt-stic.github.io/stic-1-jquery-ui/ex05-drop-basic/ Drop basic] (ex06) : comment appliquer le comportement droppable à un élément, et accepter seulement certains élément draggable
}


.container {
==== Exemples de référence technique ====
float: left;
width: 200px;
height: 250px;
border: 1px solid #999;
background-color: #DEF8FC;
padding: 10px 15px;
margin-right: 20px;
}
</style>
</head>


<body>
Application sur nations/continents. '''Voir exemple 07 pour le code''' :
* {{ Goblock | [https://maltt-stic.github.io/stic-1-jquery-ui/ex06-countries-continents-example/ jQuery UI - application drag and drop sans code supplémentaire] }}


<h1>jQuery UI - application drag and drop sans code supplémentaire</h1>
{{ bloc important | Il s'agit d'un exemple de référence '''technique''' ! D'un point de vue pédagogique, ce type d'application n'exploite pas vraiment le drag&drop }}
<p>Ce petit jeu concernant la géographie est développé exclusivement à l'aide des méthodes,  
options et événements disponibles avec jQuery UI, c'est-à-dire qu'il n'a pas fallu écrire
du code JavaScript spécifique. </p>
<p><strong>Trainer les pays dans le continent correspondant.</strong></p>
<div class="item amerique">Bolivie</div>
<div class="item afrique">Côte d Ivoire</div>
<div class="item europe">Grèce</div>
<div class="item asie">Thailande</div>
<div class="item amerique">Canada</div>
<div class="item asie">Inde</div>
<div class="item oceanie">Nouvelle Zelande</div>
<div class="item afrique">Tanzanie</div>
<div class="item europe">Moldavie</div>
<div class="item oceanie">Australie</div>


<div class="clear"></div>
<source lang="HTML5">
<div class="container afrique-container"><h2>Afrique</h2></div>
<!DOCTYPE html>
<div class="container amerique-container"><h2>Amérique</h2></div>
<html>
<div class="container asie-container"><h2>Asie</h2></div>
  <head>
<div class="container europe-container"><h2>Europe</h2></div>
    <meta charset="utf-8" />
<div class="container oceanie-container"><h2>Oceanie</h2></div>
    <title>
<div class="clear"></div>
      jQuery Ui Exemple : application drag and drop sans code supplémentaire
<hr>
    </title>
<p><a href="http://tecfaetu.unige.ch/perso/maltt/fritz0/">MAF</a> (23.08.2014)</p>
    <!-- Le fichier CSS -->
    <link
      rel="stylesheet"
      href="../assets/vendor/jquery-ui/jquery-ui.min.css"
    />
    <style>
      .item {
        float: left;
        width: 150px;
        border: 1px solid #999;
        background-color: #f9f6d0;
        padding: 10px 15px;
        font-weight: bold;
        font-size: 16px;
        margin-right: 20px;
        margin-bottom: 50px;
      }


<script src="external/jquery/jquery.js"></script>
      .clear {
<script src="jquery-ui.min.js"></script>
        clear: both;
<script>
        overflow: hidden;
$(".item").draggable({
      }
revert: "invalid",
 
cursor: "move"
      .container {
});
        float: left;
        width: 200px;
        height: 250px;
        border: 1px solid #999;
        background-color: #def8fc;
        padding: 10px 15px;
        margin-right: 20px;
      }
    </style>
  </head>


$(".afrique-container").droppable({
  <body>
accept: ".afrique"
    <h1>jQuery UI - application drag and drop sans code supplémentaire</h1>
    <p>
      Ce petit jeu concernant la géographie est développé exclusivement à l'aide
      des méthodes, options et événements disponibles &quot;out of the box&quot;
      avec jQuery UI, c'est-à-dire qu'il n'a pas fallu écrire du code JavaScript
      spécifique.
    </p>
    <p><strong>Trainer les pays dans le continent correspondant.</strong></p>
    <div class="item amerique">Bolivie</div>
    <div class="item afrique">Côte d'Ivoire</div>
    <div class="item europe">Grèce</div>
    <div class="item asie">Thailande</div>
    <div class="item amerique">Canada</div>
    <div class="item asie">Inde</div>
    <div class="item oceanie">Nouvelle Zelande</div>
    <div class="item afrique">Tanzanie</div>
    <div class="item europe">Moldavie</div>
    <div class="item oceanie">Australie</div>
    <div class="clear"></div>
    <div class="container afrique-container"><h2>Afrique</h2></div>
    <div class="container amerique-container"><h2>Amérique</h2></div>
    <div class="container asie-container"><h2>Asie</h2></div>
    <div class="container europe-container"><h2>Europe</h2></div>
    <div class="container oceanie-container"><h2>Oceanie</h2></div>
    <div class="clear"></div>
    <p>Voici le code pour cet exemple :</p>
    <pre>
&lt;script&gt;
$(&quot;.item&quot;).draggable({
  revert: &quot;invalid&quot;,
  cursor: &quot;move&quot;
});</pre
    >
    <pre>
$(&quot;.afrique-container&quot;).droppable({
  accept: &quot;.afrique&quot;
});
});
$(".amerique-container").droppable({
$(&quot;.amerique-container&quot;).droppable({
accept: ".amerique"
  accept: &quot;.amerique&quot;
});
});
$(".asie-container").droppable({
$(&quot;.asie-container&quot;).droppable({
accept: ".asie"
  accept: &quot;.asie&quot;
});
});
$(".europe-container").droppable({
$(&quot;.europe-container&quot;).droppable({
accept: ".europe"
  accept: &quot;.europe&quot;
});
});
$(".oceanie-container").droppable({
$(&quot;.oceanie-container&quot;).droppable({
accept: ".oceanie"
  accept: &quot;.oceanie&quot;
});
});
  </script>
&lt;/script&gt;</pre
</body>
    >
    <hr />
    <p><a href="https://tecfa.unige.ch/perso/mafritz/">MAF</a> (29.11.2018)</p>
    <!-- Les fichiers JavaScript dans l'ordre suivant -->
    <script src="../assets/vendor/jquery-ui/external/jquery/jquery.js"></script>
    <script src="../assets/vendor/jquery-ui/jquery-ui.min.js"></script>
    <script>
      $(".item").draggable({
        revert: "invalid",
        cursor: "move"
      });
 
      $(".afrique-container").droppable({
        accept: ".afrique"
      });
      $(".amerique-container").droppable({
        accept: ".amerique"
      });
      $(".asie-container").droppable({
        accept: ".asie"
      });
      $(".europe-container").droppable({
        accept: ".europe"
      });
      $(".oceanie-container").droppable({
        accept: ".oceanie"
      });
    </script>
  </body>
</html>
</html>
</source>


</source>
=== Petit exercice ===
 
Adaptez l'exemple de référence du point précédent de la manière suivante :
 
# Ajoutez deux nations pour qu'elles puissent être placées dans les conteneurs correspondants (seulement HTML)
# Complexifiez l'exercice avec un conteneur supplémentaire :
## Insérez deux items draggable avec des noms de villes ou régions ou autre (tout sauf le nom d'un pays)
## Insérez un conteneur droppable labellisé "Pas un pays"
## Adaptez le code HTML et JavaScript pour ajouter le mécanisme de contrôle comme pour les autres conteneurs/continents


== Projet 5 / Tâche ==
== Projet 5 / Tâche ==
Ligne 196 : Ligne 253 :


* Le sujet de l'application doit être en rapport avec une thématique "MALTT"
* Le sujet de l'application doit être en rapport avec une thématique "MALTT"
* Vous pouvez (mais ne devez pas) reprendre le code des exemples discuté en cours.  
* Vous pouvez reprendre le code des exemples proposés dans le matériel pédagogique '''à condition de le modifier de manière substantielle''' (e.g. ne pas se limiter à changer les labels des items et des conteneurs)
* Il faut veiller à bien introduire l'utilisateur à la tâche. Cela peut se faire avec une page d'entrée qui explique le contexte et donne éventuellement une petite aide (mais cette dernière peut aussi se placer dans la page pour le "jeu"). Note: Il est possible d'utiliser une seule page HTML (à condition que ses éléments changent, plus difficile à implémenter).
* Il faut veiller à bien introduire l'utilisateur à la tâche. Cela peut se faire avec une page d'entrée qui explique le contexte et donne éventuellement une petite aide ou directement sur la page du dispositif lui-même, par exemple à travers une manipulation du DOM qui cache/affiche le texte.
* Vous pouvez utiliser du "artwork" externe (mais pas plus que 66 %)
* Vous pouvez utiliser des éléments graphiques externes (e.g. SVG) et/ou du code JavaScript/JQuery fabriqué par d'autres, mais vous devez citer la source et vérifier les droits.
* Vous pouvez utiliser et/ou adapter du code JavaScript/JQuery fabriqué par d'autres, mais vous devez le citer et vérifier les droits.
* Vous ne pouvez pas combiner '''sur la même page''' les exercices 5 et 6
* Vous devez citer les sources !
** Mais vous pouvez utiliser le même sujet (e.g. ''mini''-site avec deux pages)
 
==== Conseils ====
 
Pour un exercice très bien fait et original vous pouvez considérer les éléments suivants :
 
* Vous pouvez rendre presque tout type d'élément "draggable" (e.g. images, audio, vidéos, ...)
** Attention : très probablement vous ne pouvez pas faire du drag&drop à l'intérieur d'un élément SVG, mais vous pouvez trainer des éléments SVG séparés. Même principe pour un SVG en tant que target "droppable",  à la limite vous pouvez construire un "wrapper" HTML autour :
**: <code><nowiki><div class="draggable-element"><svg ...></div></nowiki></code>)
* Pensez à une scénarisation qui exploite les dimensions visuo-spatiales du drag&drop
* Pour faciliter l'agencement des items draggable et/ou des zones droppable vous pouvez vous appuyer sur [https://css-tricks.com/snippets/css/a-guide-to-flexbox/ Flexbox]


=== Exercice alternatif ===
=== Exercice alternatif ===


Utilisez l'API JavaScript au lieu de jQuery/jQuery UI. Dans ce cas il faudra également documenter l'API et améliorer la page [[Drag and drop javascript]] créée par un étudiant l'année passée.
Si vous n'aimez pas la snytaxe jQuery/jQuery UI ou vous voulez essayer quelque chose de différente vous pouvez :
 
* Utilisez l'API JavaScript de base pour le Drag&Drop (i.e. pas de bibliothèque externe réquise). Dans ce cas il faudra également documenter l'API et améliorer la page [[Drag and drop javascript]] créée par un étudiant l'année passée.
* Utilisez (et documenter) une autre bibliothèque JavaScript, par exemple :
** [http://interactjs.io/ InteractJS] (pas testé par l'équipe STIC)
** [https://shopify.github.io/draggable/ DraggableJS] (pas testé par l'équipe STIC)
** Autres...


=== Critères d'évaluation ===
=== Critères d'évaluation ===
Ligne 211 : Ligne 284 :


* Mauvais liens (fichier JavaScript, CSS)
* Mauvais liens (fichier JavaScript, CSS)
* Utilisation de JavaScript dans les attributs HTML
* Agencement des éléments "draggable" et de la zone "droppable" approximatif (e.g. trop distant)
* Agencement des éléments "draggable" et de la zone "droppable" approximatif (e.g. trop distant)
* Action de drag&drop pas signalée, difficile à comprendre
* Action de drag&drop pas signalée, difficile à comprendre
* Zones "droppables" trop petites en fonction de la taille et/ou du nombre des éléments "droppable" à placer


;Bonus :
;Bonus :
* Éléments "draggable" facile à reconnaître et de taille convenable
* Application concrète des critères d'affordance et loi de Fitts
* Zone(s) "draggable" facile à identifier et de taille convenable
** Éléments "draggable" facile à reconnaître et de taille convenable
* Distance entre drag et drop réduite par un bon agencement de la page
** Zone(s) "draggable" facile à identifier et de taille convenable
** Distance entre drag et drop réduite par un bon agencement de la page
* Indications pertinentes sur les modalités d'utilisation (mais pas trop de texte!)
* Indications pertinentes sur les modalités d'utilisation (mais pas trop de texte!)
* Code bien organisé et élégant
* Code bien organisé et élégant
Ligne 236 : Ligne 310 :
=== Contribution Wiki ===
=== Contribution Wiki ===


Contribution libre comme d'habitude :
Contribution pour la période selon les guidelines habituelles :


* [[STIC:Rapport STIC I et II#Contribution_Wiki]]
* [[STIC:Contribution Wiki]]


Quelques suggestions :
Quelques suggestions :
Ligne 250 : Ligne 324 :
=== Délai ===
=== Délai ===


À contrôler : '''Jeudi 1 février à 09:00'''
{{ bloc important | '''Lundi 21 janvier à 21h00''' }}
 
'''Attention''' :
 
* il faut qu'on transmet les notes au secrétariat, donc cette date n'est pas négociable et '''si vous ne rendez pas votre exercice dans le délai, nous allons noter avec un 0'''.
* si vous voulez éviter un 0, vous devez nous communiquer '''avant ce délai''' par email (M. Schneider + Mattia et Stéphane) que vous allez rendre vos exercices pour la session de rattrapage en août/septembre (voir le règlement du cours pour plus d'infos)


== Liens ==
== Liens ==
Ligne 271 : Ligne 340 :
* [http://api.jquery.com/ API jQuery]
* [http://api.jquery.com/ API jQuery]
* [http://api.jqueryui.com/ API jQuery UI]
* [http://api.jqueryui.com/ API jQuery UI]
=== Bibliographie ===
* Norman, D. A. (2013). The Design of Everyday Things. New York, NY: Basic Books.
* Gibson, J. J.  (1979). The Ecological Approach to Visual Perception. Boston, MA: Houghton Mifflin Harcourt


== Aide ==
== Aide ==

Dernière version du 13 novembre 2019 à 12:04

Cette page fait partie des archives des cours Cours STIC (STIC I, STIC II,STIC III,STIC IV)

Introduction

Cet exercice continue la découverte de l'interactivité avec JavaScript avec l'introduction du drag&drop. Pour ce faire, les bibliothèques JQuery et JQuery UI seront abordées.

Connaissances/compétences envisagées

À l'issue de cet exercice vous devez avoir acquis les connaissances/compétences suivantes :

  • Comprendre le fonctionnement de JQuery par rapport au "vanilla" JavaScript
  • Savoir consulter et utiliser une API différente/supplémentaire par rapport au langage de base
  • Comprendre les enjeux techniques (et quelques aspects théoriques) du drag&drop
    • Savoir identifier et rendre un élément "draggable"
    • Savoir identifier et rendre une zone "droppable"
    • Savoir relier le drag&drop à la logique d'une application
  • Réfléchir aux avantages/désavantages en termes pédagogiques d'une interaction drag&drop par rapport à d'autres interactions possibles

Prérequis

Lectures conseillées :

  •  : se familiariser avec la syntaxe de base --> $("..")

Prérequis techniques :

  • Connaissances de base de HTML/CSS/JavaScript
  • Savoir incorporer des fichiers externes JS/CSS en respectant les chemins !

Activité en salle de classe

Programme

  • 14:00 - 14:30 : Introduction au drag&drop
  • 14:30 - 15:30 : drag&drop avec jQuery et jQuery UI
  • 16:00 - 17:00 : debriefing sur le cours STIC I / questions techniques pour le cours BASES

Introduction au drag&drop

  • Évolution Graphical User Interfaces (GUI) dans le temps
    • Logiciels desktop vs. Web
    • Activité drag&drop vraiment intuitive ?
  • La notion de affordance
    • En général
      « The affordances of the environment are what it offers the animal, what it provides or furnishes, either for good or ill. The verb to afford is found in the dictionary, the noun affordance is not. I have made it up. I mean by it something that refers to both the environment and the animal in a way that no existing term does. It implies the complementarity of the animal and the environment » Gibson (1979, p. 127)
    • En UX
      « Relationship between the properties of an object and the capabilities of the agent that determine just how the object could possibly be used » Norman (2013, p. 11)
  • La loi de Fitts
    • Définition : « This scientific law predicts that the time required to rapidly move to a target area is a function of the ratio between the distance to the target and the width of the target. » (Wikipedia)
    • Formule souvent utilisée en UX sous le nom de loi de Shannon
      • ID is the index of difficulty.
      • D is the distance from the starting point to the center of the target.
      • W is the width of the target measured along the axis of motion.
    • Résumé : plus grand est la distance et plus petit le target, plus grande la difficulté
  • Implications visuo-spatiales
    • Nécessite de motricité fine (à ne pas sous-estimer en fonction du public cible)
    • Notion d'approximation (e.g. placer les planètes à la distance correcte depuis le soleil vs. illustrer simplement l'ordre)

JQuery

JQuery UI

Exemples (code + liens)

Le code des exemples est disponibles :

À voir particulièrement :

  • Drag simple (ex04): comment appliquer facilement le comportement draggable à un élément
  • Drag avec options (ex05) : fournir des options au comportement draggable, par exemple pour limite l'axe de mouvement ou modifier le type de curseur pour signaler l'affordance
  • Drop basic (ex06) : comment appliquer le comportement droppable à un élément, et accepter seulement certains élément draggable

Exemples de référence technique

Application sur nations/continents. Voir exemple 07 pour le code :

Il s'agit d'un exemple de référence technique ! D'un point de vue pédagogique, ce type d'application n'exploite pas vraiment le drag&drop
<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8" />
    <title>
      jQuery Ui Exemple : application drag and drop sans code supplémentaire
    </title>
    <!-- Le fichier CSS -->
    <link
      rel="stylesheet"
      href="../assets/vendor/jquery-ui/jquery-ui.min.css"
    />
    <style>
      .item {
        float: left;
        width: 150px;
        border: 1px solid #999;
        background-color: #f9f6d0;
        padding: 10px 15px;
        font-weight: bold;
        font-size: 16px;
        margin-right: 20px;
        margin-bottom: 50px;
      }

      .clear {
        clear: both;
        overflow: hidden;
      }

      .container {
        float: left;
        width: 200px;
        height: 250px;
        border: 1px solid #999;
        background-color: #def8fc;
        padding: 10px 15px;
        margin-right: 20px;
      }
    </style>
  </head>

  <body>
    <h1>jQuery UI - application drag and drop sans code supplémentaire</h1>
    <p>
      Ce petit jeu concernant la géographie est développé exclusivement à l'aide
      des méthodes, options et événements disponibles &quot;out of the box&quot;
      avec jQuery UI, c'est-à-dire qu'il n'a pas fallu écrire du code JavaScript
      spécifique.
    </p>
    <p><strong>Trainer les pays dans le continent correspondant.</strong></p>
    <div class="item amerique">Bolivie</div>
    <div class="item afrique">Côte d'Ivoire</div>
    <div class="item europe">Grèce</div>
    <div class="item asie">Thailande</div>
    <div class="item amerique">Canada</div>
    <div class="item asie">Inde</div>
    <div class="item oceanie">Nouvelle Zelande</div>
    <div class="item afrique">Tanzanie</div>
    <div class="item europe">Moldavie</div>
    <div class="item oceanie">Australie</div>
    <div class="clear"></div>
    <div class="container afrique-container"><h2>Afrique</h2></div>
    <div class="container amerique-container"><h2>Amérique</h2></div>
    <div class="container asie-container"><h2>Asie</h2></div>
    <div class="container europe-container"><h2>Europe</h2></div>
    <div class="container oceanie-container"><h2>Oceanie</h2></div>
    <div class="clear"></div>
    <p>Voici le code pour cet exemple :</p>
    <pre>
&lt;script&gt;
$(&quot;.item&quot;).draggable({
   revert: &quot;invalid&quot;,
   cursor: &quot;move&quot;
});</pre
    >
    <pre>
$(&quot;.afrique-container&quot;).droppable({
   accept: &quot;.afrique&quot;
});
$(&quot;.amerique-container&quot;).droppable({
   accept: &quot;.amerique&quot;
});
$(&quot;.asie-container&quot;).droppable({
   accept: &quot;.asie&quot;
});
$(&quot;.europe-container&quot;).droppable({
   accept: &quot;.europe&quot;
});
$(&quot;.oceanie-container&quot;).droppable({
   accept: &quot;.oceanie&quot;
});
&lt;/script&gt;</pre
    >
    <hr />
    <p><a href="https://tecfa.unige.ch/perso/mafritz/">MAF</a> (29.11.2018)</p>
    <!-- Les fichiers JavaScript dans l'ordre suivant -->
    <script src="../assets/vendor/jquery-ui/external/jquery/jquery.js"></script>
    <script src="../assets/vendor/jquery-ui/jquery-ui.min.js"></script>
    <script>
      $(".item").draggable({
        revert: "invalid",
        cursor: "move"
      });

      $(".afrique-container").droppable({
        accept: ".afrique"
      });
      $(".amerique-container").droppable({
        accept: ".amerique"
      });
      $(".asie-container").droppable({
        accept: ".asie"
      });
      $(".europe-container").droppable({
        accept: ".europe"
      });
      $(".oceanie-container").droppable({
        accept: ".oceanie"
      });
    </script>
  </body>
</html>

Petit exercice

Adaptez l'exemple de référence du point précédent de la manière suivante :

  1. Ajoutez deux nations pour qu'elles puissent être placées dans les conteneurs correspondants (seulement HTML)
  2. Complexifiez l'exercice avec un conteneur supplémentaire :
    1. Insérez deux items draggable avec des noms de villes ou régions ou autre (tout sauf le nom d'un pays)
    2. Insérez un conteneur droppable labellisé "Pas un pays"
    3. Adaptez le code HTML et JavaScript pour ajouter le mécanisme de contrôle comme pour les autres conteneurs/continents

Projet 5 / Tâche

Voici de suite la description détaillée de la tâche et le matériel de support à votre disposition pour compléter l'exercice pendant la période à distance.

Lectures et matériel de support

Ces articles proposent les contenus utiles aux finalités pédagogiques du cours. Pour compléter l'exercice ou atteindre les objectifs spécifiques à votre dispositif (voir plus bas), d'autres ressources peuvent être nécessaires.

  •  : aspects théoriques et pratiques, lecture commune avec exercice 6, niveau des bibliothèques à calibrer en fonction de vos besoins et intérêts
  •  : aspects pratiques, lecture conseillée pour se familiariser avec la syntaxe
  •  : aspects pratiques, niveau des exemples à calibrer en fonction de vos besoins et intérêts

Dispositif

Faites une application JavaScript/JQuery qui implémente une application pédagogique "drag and drop" que vous avez conçue vous-même.

  • Créez une page HTML5/CSS qui contient plusieurs éléments "draggable"
  • Ajoutez à la page une ou plusieurs zones "droppable"
  • L'action du drag&drop doit servir à un objectif déclaré dans votre rapport (pas juste votre objectif d'apprentissage !)

Contraintes

  • Le sujet de l'application doit être en rapport avec une thématique "MALTT"
  • Vous pouvez reprendre le code des exemples proposés dans le matériel pédagogique à condition de le modifier de manière substantielle (e.g. ne pas se limiter à changer les labels des items et des conteneurs)
  • Il faut veiller à bien introduire l'utilisateur à la tâche. Cela peut se faire avec une page d'entrée qui explique le contexte et donne éventuellement une petite aide ou directement sur la page du dispositif lui-même, par exemple à travers une manipulation du DOM qui cache/affiche le texte.
  • Vous pouvez utiliser des éléments graphiques externes (e.g. SVG) et/ou du code JavaScript/JQuery fabriqué par d'autres, mais vous devez citer la source et vérifier les droits.
  • Vous ne pouvez pas combiner sur la même page les exercices 5 et 6
    • Mais vous pouvez utiliser le même sujet (e.g. mini-site avec deux pages)

Conseils

Pour un exercice très bien fait et original vous pouvez considérer les éléments suivants :

  • Vous pouvez rendre presque tout type d'élément "draggable" (e.g. images, audio, vidéos, ...)
    • Attention : très probablement vous ne pouvez pas faire du drag&drop à l'intérieur d'un élément SVG, mais vous pouvez trainer des éléments SVG séparés. Même principe pour un SVG en tant que target "droppable", à la limite vous pouvez construire un "wrapper" HTML autour :
      <div class="draggable-element"><svg ...></div>)
  • Pensez à une scénarisation qui exploite les dimensions visuo-spatiales du drag&drop
  • Pour faciliter l'agencement des items draggable et/ou des zones droppable vous pouvez vous appuyer sur Flexbox

Exercice alternatif

Si vous n'aimez pas la snytaxe jQuery/jQuery UI ou vous voulez essayer quelque chose de différente vous pouvez :

  • Utilisez l'API JavaScript de base pour le Drag&Drop (i.e. pas de bibliothèque externe réquise). Dans ce cas il faudra également documenter l'API et améliorer la page Drag and drop javascript créée par un étudiant l'année passée.
  • Utilisez (et documenter) une autre bibliothèque JavaScript, par exemple :

Critères d'évaluation

Malus
  • Mauvais liens (fichier JavaScript, CSS)
  • Agencement des éléments "draggable" et de la zone "droppable" approximatif (e.g. trop distant)
  • Action de drag&drop pas signalée, difficile à comprendre
  • Zones "droppables" trop petites en fonction de la taille et/ou du nombre des éléments "droppable" à placer
Bonus
  • Application concrète des critères d'affordance et loi de Fitts
    • Éléments "draggable" facile à reconnaître et de taille convenable
    • Zone(s) "draggable" facile à identifier et de taille convenable
    • Distance entre drag et drop réduite par un bon agencement de la page
  • Indications pertinentes sur les modalités d'utilisation (mais pas trop de texte!)
  • Code bien organisé et élégant
  • Design graphique soigné
  • Organisation du contenu

Rapport

Faites un rapport selon les guidelines habituelles :

En particulier pour cet exercice, essayez d'expliquer :

  • En quoi les interactions drag&drop que vous avez créées soutiennent vos objectifs d'apprentissage/d'utilisation

Contribution Wiki

Contribution pour la période selon les guidelines habituelles :

Quelques suggestions :

Délai

Lundi 21 janvier à 21h00

Liens

Théoriques

Techniques

Bibliographie

  • Norman, D. A. (2013). The Design of Everyday Things. New York, NY: Basic Books.
  • Gibson, J. J. (1979). The Ecological Approach to Visual Perception. Boston, MA: Houghton Mifflin Harcourt

Aide

Utilisez la page discussion de cette page pour poser des questions. Pour insérer un nouveau titre, utilisez simplement le "+".

Important: Si vous cliquez sur l'étoile ("Ajouter cette page à votre liste de suivi"), le wiki vous enverra un mail après chaque modification de la page.

Journée de Support Libre

Le jeudi de la semaine après la semaine des cours en présence M1 (i.e. celle où vous avez STIC le vendredi), une Journée de Support Libre et organisée pour vous aider, entre autre, à progresser avec vos exercice STIC. La présence d'au moins un assistant/moniteur spécifiquement pour STIC est garantie de 10h à 12h s'il y a assez d'étudiants qui ont manifesté leur présence.