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

De EduTech Wiki
Aller à la navigation Aller à la recherche
 
(20 versions intermédiaires par 2 utilisateurs non affichées)
Ligne 1 : Ligne 1 :
{{En construction}}
{{stic12}}
{{stic12}}
<categorytree mode="pages" depth="1" style="float:right; clear:right; margin-left:3px; border:1px solid gray; padding:0.7ex; background-color:#f9f9f9;">STIC</categorytree>
<categorytree mode="pages" depth="1" style="float:right; clear:right; margin-left:3px; border:1px solid gray; padding:0.7ex; background-color:#f9f9f9;">STIC</categorytree>
Ligne 19 : Ligne 17 :
** Savoir relier le drag&drop à la logique d'une application
** 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
* 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 :
* {{ goblock | [[JQuery]] }} : 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 ==
== Activité en salle de classe ==
===Programme===
* 14:00 - 14:30 : Présentation drag&drop
* 14:30 - 15:30 : drag&drop avec [[jQuery]] et [[jQuery UI]]
* 15:30 - 16:00 : debriefing sur le cours STIC I


=== Introduction au drag&drop ===
=== Introduction au drag&drop ===
Ligne 43 : Ligne 24 :
==== Présentation ====
==== Présentation ====


Présentation générale sur la technique du glisser-déposer :
{{ Goblock | [https://mafritz.ch/slides/fr/glisser-deposer/#/ Slides interactives sur le glisser-déposer] }}


Présentation de l'application [https://tecfa.unige.ch/perso/mafritz/teaching/stic-1/apps/number-sorting-game/ ''Number Sorting Games''] avec 3 modalités interactives différentes :
Présentation de l'application [https://tecfa.unige.ch/perso/mafritz/teaching/stic-1/apps/number-sorting-game/ ''Number Sorting Games''] avec 3 modalités interactives différentes :
Ligne 56 : Ligne 34 :


* Évolution Graphical User Interfaces (GUI) dans le temps
* Évolution Graphical User Interfaces (GUI) dans le temps
** Logiciels desktop vs. Web : les interfaces graphiques des logiciels ont évolué à partir des années 1960 environ et elles ont fait rapidement des progrès sur le plan des actions (plus lent au niveau ''esthétique''). En revanche, les pages web qui sont apparues au début des années 1990 n'avaient que du texte et des liens hypertextuels. Au niveau de l'interface graphique il y a donc eu un ''retour en arrière''. Avec les années et surtout l'idée du web 2.0 dans les années 2000, les pages web aussi ont commencé à avoir des interfaces graphiques complexes, au point qu'il n'y a pratiquement plus de différence entre interfaces graphiques logiciels et pages/applications web.
** Logiciels desktop vs. Web : les interfaces graphiques des logiciels ont évolué à partir des années 1960 environ et elles ont fait rapidement des progrès sur le plan des actions (plus lent au niveau ''esthétique''). En revanche, les pages web qui sont apparues au début des années 1990 n'avaient que du texte et des liens hypertextuels, car le web était à ses débuts avant tout un moyen de naviguer dans du contenu distribué. Avec les années et surtout l'idée du web 2.0 dans les années 2000, les pages web aussi ont commencé à avoir des interfaces graphiques complexes, au point qu'il n'y a pratiquement plus de différence entre interfaces graphiques logiciels et pages/applications web.
** Activité drag&drop vraiment intuitive ? En dépit du fait que la glisser-déposer soit très répandu dans plusieurs types de logiciels ou applications web, son utilisabilité a fait l'objet de nombreuses recherches. En effet, l'action en elle-même n'est parfois pas très évidente ou coéhrente. Par exemple, dans un gestionnaire de fichier, le fait de glisser-déposer un fichier depuis un dossier à un autre peut entraîner l'action de '''bouger''' le fichier ou de le '''copier''' selon certains conditions du dossier de départ ou de destination. L'action en elle-même ne permet pas de distinguer donc si on copie ou on bouge le fichier. Autre exemple : pendant un certain temps, quand on utilisait encore souvent des CD/DVD, sur les dispositifs Apple on pouvait glisser-déposer le CD sur la corbeille pour l’éjecter, mais pour certains utilisateurs cette action était en peu effrayante car ils pensaient détruire les fichiers du support !
** Activité drag&drop vraiment intuitive ? En dépit du fait que la glisser-déposer soit très répandu dans plusieurs types de logiciels ou applications web, son utilisabilité a fait l'objet de nombreuses recherches. En effet, l'action en elle-même n'est parfois pas très évidente ou cohérente. Par exemple, dans un gestionnaire de fichier, le fait de glisser-déposer un fichier depuis un dossier à un autre peut entraîner l'action de '''bouger''' le fichier ou de le '''copier''' selon certains conditions du dossier de départ ou de destination. L'action en elle-même ne permet pas de distinguer donc si on copie ou on bouge le fichier. Autre exemple : pendant un certain temps, quand on utilisait encore souvent des CD/DVD, sur les dispositifs Apple on pouvait glisser-déposer le CD sur la corbeille pour l’éjecter, mais pour certains utilisateurs cette action était en peu effrayante car ils pensaient détruire les fichiers du support !
* La notion de [https://www.interaction-design.org/literature/book/the-encyclopedia-of-human-computer-interaction-2nd-ed/affordances '''affordance''']
 
** En général
 
**: {{ citation | 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)
* Recommandations ergonomiques
** En UX
** Bien signaler la possibilité du glisser-déposer (concept d'affordance)
**: {{ citation | 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)
** Indiquer clairement le résultat attendu ou des éventuelles erreurs (ne pas laisser un élément à la mauvaise place sans rien indiquer en retour)
* La [https://www.interaction-design.org/literature/book/the-glossary-of-human-computer-interaction/fitts-s-law '''loi de Fitts''']
** Nécessite de la motricité fine (à ne pas sous-estimer en fonction du public cible)
** Définition : {{ citation | 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)
** Bien penser le sens associé au glisser-déposer (ce n'est pas toujours intuitif)
** Formule souvent utilisée en UX sous le nom de loi de Shannon
 
**: <math>\text{ID} = \log_2 \Bigg(\frac{D}{W}+1\Bigg)</math>
**:* 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 grande est la distance et plus petite la cible, plus grande la difficulté'''
* Implications ergonomiques et visuo-spatiales
** Bien signaler la possibilité du glisser-déposer et indiquer clairement le résultat attendu ou des éventuelles erreurs. Voir par exemple :[https://nypost.com/2022/08/04/chicago-weatherman-loses-it-when-he-discovers-touch-screen/ cette vidéo].
** Nécessite de motricité fine (à ne pas sous-estimer en fonction du public cible)
* Trois applications pédagogiques possibles (non mutuellement exclusives) :
* Trois applications pédagogiques possibles (non mutuellement exclusives) :
*# Relation item-conteneur (e.g. classer les éléments par catégorie)
*# Relation item-conteneur (e.g. classer les éléments par catégorie)
*# Degré d'approximation spatiale (e.g. placer un élément ''le plus proche possible'' à sa position ''correcte'')
*# Degré d'approximation spatiale (e.g. placer un élément ''le plus proche possible'' à sa position ''correcte'')
*# Correspondance visuo-spatiale relative et/ou absolue (e.g. placer des éléments sur une carte géographique)
*# Correspondance visuo-spatiale (e.g. placer des éléments sur une carte géographique)


=== Catégorisation multiple ===
=== Exemples ===


Dans le cadre d'une relation item-group/catégorie, il est intéressant d'exploiter le drag&drop dans ce qu'on appelle la catégorisation multiple, qui est une facette de la flexibilité cognitive (Deák & Wiseheart, 2015; Scheibling-Sève, 2021). Voici des exemples tirés du projet pilote d'introduction du numérique au primaire. Les applications sont censées être utilisées sur tablette et en salle de classe, avec les instructions fournies par l'enseignant-e :
Dans le cadre d'une relation item-groupe/catégorie, il est intéressant d'exploiter le drag&drop dans ce qu'on appelle la catégorisation multiple, qui est une facette de la flexibilité cognitive (Deák & Wiseheart, 2015; Scheibling-Sève, 2021). Voici des exemples tirés du projet pilote d'introduction du numérique au primaire. Les applications sont censées être utilisées sur tablette et en salle de classe, avec les instructions fournies par l'enseignant-e :


* {{ Goblock | [https://tecfa.unige.ch/proj/ednum/categorisation-multiple/ Catégorisation multiple d'objets] }} (voir le code on [https://github.com/mafritz/categorisation-multiple GitHub])
* {{ Goblock | [https://tecfa.unige.ch/proj/ednum/categorisation-multiple/ Catégorisation multiple d'objets] }} (voir le code on [https://github.com/mafritz/categorisation-multiple GitHub])
Ligne 88 : Ligne 58 :
=== JQuery ===
=== JQuery ===


* Utilisation de base, voir [[jQuery]] ou [[Questionnaire avec jQuery]]
{{ Goblock | [https://tecfaetu.unige.ch/etu-maltt/zelda/aminian6/jQuery/jquery.html  Présentation JQuery & jQueryUI] }}
 
* Page de référence {{ Goblock | [[JQuery]] }}
* Petits exemples:
* Petits exemples:
** [http://codepen.io/mafritz/pen/YpaGQr Compteur] --> voir la différence avec exemple en [http://codepen.io/mafritz/pen/NNmgqG "vanilla JavaScript"]
** [http://codepen.io/mafritz/pen/YpaGQr Compteur] --> voir la différence avec exemple en [http://codepen.io/mafritz/pen/NNmgqG "vanilla JavaScript"]
Ligne 257 : Ligne 229 :
## Adaptez le code HTML et JavaScript pour ajouter le mécanisme de contrôle comme pour les autres conteneurs/continents
## Adaptez le code HTML et JavaScript pour ajouter le mécanisme de contrôle comme pour les autres conteneurs/continents


{{ bloc important | '''Faites attention à modifier le code dans le script, pas le code affiché à l'intérieur de la balise <nowiki><pre>...</pre></nowiki> que vous pouvez d'ailleurs effacer si cela vous gêne.''' }}
{{ bloc important | '''Faites attention à modifier le code dans le script, pas le texte affiché à l'intérieur de la balise <nowiki><pre>...</pre></nowiki> que vous pouvez d'ailleurs effacer si cela vous gêne.''' }}


== Projet 5 / Tâche ==
== 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 ===
=== 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.  
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, d'autres ressources peuvent être nécessaires.  


* {{ Goblock | [[Bibliothèques JavaScript]] }} : aspects théoriques et pratiques, lecture commune avec exercice 6, niveau des bibliothèques à calibrer en fonction de vos besoins et intérêts
* {{ Goblock | [[Bibliothèques JavaScript]] }} : aspects théoriques et pratiques, lecture commune avec exercice 6, niveau des bibliothèques à calibrer en fonction de vos besoins et intérêts
Ligne 286 : Ligne 256 :
* Créez une page HTML5/CSS qui contient plusieurs éléments "draggable"
* Créez une page HTML5/CSS qui contient plusieurs éléments "draggable"
* Ajoutez à la page une ou plusieurs zones "droppable"
* 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 !)
* L'action du drag&drop doit servir à un objectif d'apprentissage déclaré dans votre rapport, pour les utilisateur-ices du dispostif.


==== Contraintes ====
==== 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). En particulier :
* 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). En particulier :
** Vous devez déclencher '''au moins une fonction''' depuis votre configuration de la méthode .draggable() ou .droppable(), par exemple :
** Vous devez déclencher '''au moins une fonction''' depuis votre configuration de la méthode .draggable() ou .droppable(), par exemple :
Ligne 308 : Ligne 277 :
})
})
</syntaxhighlight>
</syntaxhighlight>
* 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.
* Il faut veiller à bien introduire la tâche à l'utilisateur. 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 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
* Vous ne pouvez pas combiner '''sur la même page''' les exercices 5 et 6
Ligne 315 : Ligne 284 :
==== Conseils ====
==== Conseils ====


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


* Évitez un système de catégorisation simple item/groupe. Si vous restez dans le contexte de la catégorisation, pensez plutôt à une catégorisation fluide (un élément peut aller à la fois dans plusieurs catégories). Voir par exemple :
** Deák, G. O., & Wiseheart, M. (2015). Cognitive flexibility in young children : General or task-specific capacity? Journal of Experimental Child Psychology, 138, 31‑5 https://doi.org/10.1016/j.jecp.2015.04.003
** Scheibling-Sève, C., Pasquinelli, E., & Sander, E. (2021). Critical Thinking and Flexibility. In E. Clément (Ed.), Cognitive Flexibility. ISTE Ltd, London, and Wiley, New York.
* Vous pouvez rendre presque tout type d'élément "draggable" (e.g. images, audio, vidéos, ...)
* 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 :
** 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 :
Ligne 329 : Ligne 295 :
=== Exercice alternatif ===
=== Exercice alternatif ===


Si vous n'aimez pas la syntaxe jQuery/jQuery UI ou vous voulez essayer quelque chose de différente vous pouvez :
Si vous n'aimez pas la syntaxe jQuery/jQuery UI ou vous voulez essayer quelque chose de différent, 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 des volées précédentes
* Utiliser 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 des volées précédentes
* Utilisez (et documenter) une autre bibliothèque JavaScript, par exemple :
* Utilisez (et documenter) une autre bibliothèque JavaScript, par exemple :
** [http://interactjs.io/ InteractJS] (pas testé par l'équipe STIC)
** [http://interactjs.io/ InteractJS] (pas testé par l'équipe STIC)
Ligne 348 : Ligne 314 :


;Bonus :
;Bonus :
* Application concrète des critères d'affordance et loi de Fitts
* Éléments "draggable" facile à reconnaître et de taille convenable
** Éléments "draggable" facile à reconnaître et de taille convenable
* Zone(s) "draggable" facile à identifier 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
** 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 359 : Ligne 324 :
=== Rapport ===
=== Rapport ===


Faites un rapport selon les guidelines habituelles :
Faites un rapport selon les consignes habituelles :


* voir [[STIC:Rapport STIC I et II]]
* voir [[STIC:Rapport STIC I et II]]


En particulier pour cet exercice, essayez d'expliquer :
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.'''
 
* En quoi les interactions drag&drop que vous avez créées soutiennent vos objectifs d'apprentissage/d'utilisation


=== Contribution Wiki ===
=== Contribution Wiki ===
Ligne 383 : Ligne 346 :
=== Délai ===
=== Délai ===


{{ bloc important | '''Mercredi 17 janvier à 21h00''' }}
{{ bloc important | '''Lundi 13 janvier 2025 à 12h00''' }}


== Liens ==
== Liens ==

Dernière version du 13 décembre 2024 à 12:13

Cette page fait partie des cours STIC I et STIC II


Introduction

Cet exercice continue la découverte de l'interactivité avec JavaScript avec l'introduction du glisser-déposer (drag&drop en anglais). 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

Activité en salle de classe

Introduction au drag&drop

Présentation

Présentation de l'application Number Sorting Games avec 3 modalités interactives différentes :

Synthèse des points principaux

  • Évolution Graphical User Interfaces (GUI) dans le temps
    • Logiciels desktop vs. Web : les interfaces graphiques des logiciels ont évolué à partir des années 1960 environ et elles ont fait rapidement des progrès sur le plan des actions (plus lent au niveau esthétique). En revanche, les pages web qui sont apparues au début des années 1990 n'avaient que du texte et des liens hypertextuels, car le web était à ses débuts avant tout un moyen de naviguer dans du contenu distribué. Avec les années et surtout l'idée du web 2.0 dans les années 2000, les pages web aussi ont commencé à avoir des interfaces graphiques complexes, au point qu'il n'y a pratiquement plus de différence entre interfaces graphiques logiciels et pages/applications web.
    • Activité drag&drop vraiment intuitive ? En dépit du fait que la glisser-déposer soit très répandu dans plusieurs types de logiciels ou applications web, son utilisabilité a fait l'objet de nombreuses recherches. En effet, l'action en elle-même n'est parfois pas très évidente ou cohérente. Par exemple, dans un gestionnaire de fichier, le fait de glisser-déposer un fichier depuis un dossier à un autre peut entraîner l'action de bouger le fichier ou de le copier selon certains conditions du dossier de départ ou de destination. L'action en elle-même ne permet pas de distinguer donc si on copie ou on bouge le fichier. Autre exemple : pendant un certain temps, quand on utilisait encore souvent des CD/DVD, sur les dispositifs Apple on pouvait glisser-déposer le CD sur la corbeille pour l’éjecter, mais pour certains utilisateurs cette action était en peu effrayante car ils pensaient détruire les fichiers du support !


  • Recommandations ergonomiques
    • Bien signaler la possibilité du glisser-déposer (concept d'affordance)
    • Indiquer clairement le résultat attendu ou des éventuelles erreurs (ne pas laisser un élément à la mauvaise place sans rien indiquer en retour)
    • Nécessite de la motricité fine (à ne pas sous-estimer en fonction du public cible)
    • Bien penser le sens associé au glisser-déposer (ce n'est pas toujours intuitif)
  • Trois applications pédagogiques possibles (non mutuellement exclusives) :
    1. Relation item-conteneur (e.g. classer les éléments par catégorie)
    2. Degré d'approximation spatiale (e.g. placer un élément le plus proche possible à sa position correcte)
    3. Correspondance visuo-spatiale (e.g. placer des éléments sur une carte géographique)

Exemples

Dans le cadre d'une relation item-groupe/catégorie, il est intéressant d'exploiter le drag&drop dans ce qu'on appelle la catégorisation multiple, qui est une facette de la flexibilité cognitive (Deák & Wiseheart, 2015; Scheibling-Sève, 2021). Voici des exemples tirés du projet pilote d'introduction du numérique au primaire. Les applications sont censées être utilisées sur tablette et en salle de classe, avec les instructions fournies par l'enseignant-e :

JQuery

JQuery UI

Exemples (code + liens)

Le code des exemples est disponibles :

À voir particulièrement :

  • Drag simple (ex03): comment appliquer facilement le comportement draggable à un élément
  • Drag avec options (ex04) : 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 (ex05) : 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 06 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 et même la catégorisation pourrait être plus intéressante (e.g. fluide, multiple, etc.)
<!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
Faites attention à modifier le code dans le script, pas le texte affiché à l'intérieur de la balise <pre>...</pre> que vous pouvez d'ailleurs effacer si cela vous gêne.

Projet 5 / Tâche

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, 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

Tutoriel vidéo d'accompagnement à cet exercice (accès UNIGE nécessaire) :

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'apprentissage déclaré dans votre rapport, pour les utilisateur-ices du dispostif.

Contraintes

  • 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). En particulier :
    • Vous devez déclencher au moins une fonction depuis votre configuration de la méthode .draggable() ou .droppable(), par exemple :
    • $(".vos-elements-glissables").draggable({
        ...,
        drag: function(event, ui) {
          // Faire quelque chose d'utile au niveau pédagogique ou ergonomique
        }
      })
      
      $(".votre-target").droppable({
        ...,
        drop: function (event, ui) {
          // Faire quelque chose d'utile au niveau pédagogique ou ergonomique
        }
      })
      
  • Il faut veiller à bien introduire la tâche à l'utilisateur. 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 ou Grid
    • Voir également la page Flexbox sur ce Wiki (à améliorer)

Exercice alternatif

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

  • Utiliser 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 des volées précédentes
  • 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
  • É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 consignes 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 13 janvier 2025 à 12h00

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
  • Deák, G. O., & Wiseheart, M. (2015). Cognitive flexibility in young children : General or task-specific capacity? Journal of Experimental Child Psychology, 138, 31‑53. https://doi.org/10.1016/j.jecp.2015.04.003
  • MacKenzie, I. S. (2018). Fitts’ law. Handbook of human-computer interaction, 1, 349-370. Disponible depuis le site de l'auteur : https://www.yorku.ca/mack/hhci2018.pdf
  • Scheibling-Sève, C., Pasquinelli, E., & Sander, E. (2021). Critical Thinking and Flexibility. In E. Clément (Ed.), Cognitive Flexibility. ISTE Ltd, London, and Wiley, New York.

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.