Faites glisser et déposez avec plusieurs éléments
Cet article montre l'amélioration des fonctionnalités de glisser-déposer HTML5 pour la manipulation de plusieurs éléments et l'accessibilité du clavier, bénéficiant aux utilisateurs de lecteurs aperçus et d'écran. En supposant une familiarité fondamentale avec l'API de glisser-déposer (reportez-vous aux articles d'introduction pour les débutants), nous nous concentrerons sur l'extension de ses capacités.
Bien que la manipulation des données de base pour plusieurs éléments soit simple (en utilisant un tableau séparé au lieu de dataTransfer
), la complexité de l'interface utilisateur augmente considérablement. Nous aborderons les mécanismes de présélection et la prise en charge du clavier, car le glisser-déposer natif n'a pas ce dernier. Remarque: les événements tactiles et les polyfills de navigateur sont en dehors de la portée de cet article. La solution présentée fonctionne dans une seule page, pas à travers les fenêtres.
Améliorations de clés:
- Amélioration du glisser-déposer HTML5 pour la sélection de plusieurs éléments et la navigation par clavier, améliorant l'accessibilité.
- Un tableau suit plusieurs éléments pendant les traînées, simplifiant l'intégration dans des environnements dynamiques (comme les systèmes CMS) où les ID ne sont pas statiques.
- L'accessibilité au clavier est implémentée à l'aide d'attributs ARIA (
aria-grabbed
,aria-dropeffect
) et de touches standard (espace pour la sélection, contrôle m / commande m pour Drop). - L'interface simplifiée évite la sélection contiguë, traitant toutes les touches de modificateur également pour la sélection non contigu.
- Les mises à jour dynamiques de l'attribut ARIA assurent l'interaction entre modale transversale (souris / clavier).
- La compatibilité croisée robuste de la compatibilité aborde les problèmes comme les événements de dépôt qui ne tirent pas sur Mac / WebKit avec la touche de commande appuyée (en utilisant
dragend
pour la finalisation de Drop).
glisser-déposer de base (exemple simplifié):
Un exemple fonctionnel démontre le glisser-déposer de base pour un seul élément en utilisant l'interaction de la souris. Le code maintient une référence d'élément au lieu de compter sur dataTransfer
pour les ID d'élément, la simplification du processus et l'amélioration de l'adaptabilité aux applications côté serveur. effectAllowed
et dropEffect
sont omis en raison d'un support de navigateur incohérent. Les attributs draggables sont appliqués dynamiquement via JavaScript, séparant les préoccupations et permettant l'exclusion des implémentations brisées (comme les anciennes versions d'opéra). Le HTML utilise data-draggable
Attributs pour l'identification.
Implémentation de glisser-déposer accessible:
L'accessibilité est primordiale. Nous adhérerons aux lignes directrices sur les pratiques de création d'Aria pour le glisser-déposer:
- Les éléments dragables utilisent
aria-grabbed="false"
et sont navigables par clavier. - La barre d'espace sélectionne les éléments;
aria-grabbed
devient "vrai" lors de la sélection. - Control M / Command M finalise les sélections (raccourci vers la première cible de dépôt).
- Les éléments cibles utilisent
aria-dropeffect
pour indiquer les actions autorisées. - Control M / Commande m ou Entrée Effectue l'action de dépôt sur un élément cible.
- Escape annule l'opération.
- Le nettoyage post-action réinitialise
aria-dropeffect
etaria-grabbed
.
Nous améliorerons ces recommandations: la touche de fin de sélection est facultative, et le contrôle m / commande m est complété par ENTER pour abandonner. Pour plus de simplicité, toutes les touches de modificateur (Shift, Control, Command) permettent une sélection non contigu.
Sélection multiple (souris et clavier):
Le code ajoute des attributs aria-grabbed
et tabindex
aux éléments draggables. La sélection de la souris utilise mousedown
(unique / réinitialisation) et mouseup
(désélection / multiple). La sélection du clavier utilise keydown
avec une barre d'espace pour la sélection, gérer les modificateurs pour plusieurs sélections. Une propriété selections.owner
garantit que les sélections sont confinées à un seul conteneur. Les fonctions addSelection
, removeSelection
et clearSelections
gèrent l'état de sélection.
faire glisser la sélection (souris et clavier):
aria-dropeffect
est utilisé pour indiquer des cibles de chute valides. L'interaction du clavier ajoute aria-dropeffect="move"
lors de la sélection. Pour l'interaction de la souris, les événements dragenter
et dragleave
gèrent un état de survol, en utilisant une variable related
et la fonction getContainer
pour gérer la bulle des événements. tabindex
est supprimé des éléments dans les conteneurs cibles pour améliorer la navigation par clavier.
Dépose de la sélection (souris et clavier):
L'événement dragend
gère la chute et la réinitialisation de l'événement. Un événement drop
est omis en raison des incohérences du navigateur. L'interaction du clavier utilise un événement keydown
sur les conteneurs cibles pour gérer les gouttes, gérant l'attention pour éviter les problèmes de réinitialisation.
Améliorations supplémentaires:
Les améliorations futures pourraient inclure la prise en charge des événements Touch / Pointer, les polyfills de navigateur, le tri de sélection, les actions de copie / mouvement personnalisables, la sélection contiguë, les fantômes de drag personnalisés et les indices visuels pendant les traînées. Le code est disponible sur github (lien fourni dans le texte d'origine).
FAQS:
La section FAQ fournit des réponses claires et concises aux questions courantes sur la mise en œuvre accessible de glisser-déposer, couvrant plusieurs éléments, des zones droppables, le contrôle des commandes, la gestion des erreurs et les tests.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

Video Face Swap
Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds











Différents moteurs JavaScript ont des effets différents lors de l'analyse et de l'exécution du code JavaScript, car les principes d'implémentation et les stratégies d'optimisation de chaque moteur diffèrent. 1. Analyse lexicale: convertir le code source en unité lexicale. 2. Analyse de la grammaire: générer un arbre de syntaxe abstrait. 3. Optimisation et compilation: générer du code machine via le compilateur JIT. 4. Exécuter: Exécutez le code machine. Le moteur V8 optimise grâce à une compilation instantanée et à une classe cachée, SpiderMonkey utilise un système d'inférence de type, résultant en différentes performances de performances sur le même code.

Python convient plus aux débutants, avec une courbe d'apprentissage en douceur et une syntaxe concise; JavaScript convient au développement frontal, avec une courbe d'apprentissage abrupte et une syntaxe flexible. 1. La syntaxe Python est intuitive et adaptée à la science des données et au développement back-end. 2. JavaScript est flexible et largement utilisé dans la programmation frontale et côté serveur.

Le passage de C / C à JavaScript nécessite de s'adapter à la frappe dynamique, à la collecte des ordures et à la programmation asynchrone. 1) C / C est un langage dactylographié statiquement qui nécessite une gestion manuelle de la mémoire, tandis que JavaScript est dynamiquement typé et que la collecte des déchets est automatiquement traitée. 2) C / C doit être compilé en code machine, tandis que JavaScript est une langue interprétée. 3) JavaScript introduit des concepts tels que les fermetures, les chaînes de prototypes et la promesse, ce qui améliore la flexibilité et les capacités de programmation asynchrones.

Les principales utilisations de JavaScript dans le développement Web incluent l'interaction client, la vérification du formulaire et la communication asynchrone. 1) Mise à jour du contenu dynamique et interaction utilisateur via les opérations DOM; 2) La vérification du client est effectuée avant que l'utilisateur ne soumette les données pour améliorer l'expérience utilisateur; 3) La communication de rafraîchissement avec le serveur est réalisée via la technologie AJAX.

L'application de JavaScript dans le monde réel comprend un développement frontal et back-end. 1) Afficher les applications frontales en créant une application de liste TODO, impliquant les opérations DOM et le traitement des événements. 2) Construisez RestulAPI via Node.js et Express pour démontrer les applications back-end.

Comprendre le fonctionnement du moteur JavaScript en interne est important pour les développeurs car il aide à écrire du code plus efficace et à comprendre les goulots d'étranglement des performances et les stratégies d'optimisation. 1) Le flux de travail du moteur comprend trois étapes: analyse, compilation et exécution; 2) Pendant le processus d'exécution, le moteur effectuera une optimisation dynamique, comme le cache en ligne et les classes cachées; 3) Les meilleures pratiques comprennent l'évitement des variables globales, l'optimisation des boucles, l'utilisation de const et de locations et d'éviter une utilisation excessive des fermetures.

Python et JavaScript ont leurs propres avantages et inconvénients en termes de communauté, de bibliothèques et de ressources. 1) La communauté Python est amicale et adaptée aux débutants, mais les ressources de développement frontal ne sont pas aussi riches que JavaScript. 2) Python est puissant dans les bibliothèques de science des données et d'apprentissage automatique, tandis que JavaScript est meilleur dans les bibliothèques et les cadres de développement frontaux. 3) Les deux ont des ressources d'apprentissage riches, mais Python convient pour commencer par des documents officiels, tandis que JavaScript est meilleur avec MDNWEBDOCS. Le choix doit être basé sur les besoins du projet et les intérêts personnels.

Les choix de Python et JavaScript dans les environnements de développement sont importants. 1) L'environnement de développement de Python comprend Pycharm, Jupyternotebook et Anaconda, qui conviennent à la science des données et au prototypage rapide. 2) L'environnement de développement de JavaScript comprend Node.js, VScode et WebPack, qui conviennent au développement frontal et back-end. Le choix des bons outils en fonction des besoins du projet peut améliorer l'efficacité du développement et le taux de réussite du projet.
