"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > Glissez-déposez des images avec aperçu à l'aide de Stimulus Outlets

Glissez-déposez des images avec aperçu à l'aide de Stimulus Outlets

Publié le 2024-11-04
Parcourir:648

Drag & Drop Images with Preview using Stimulus Outlets

Cet article a été initialement publié sur Rails Designer


Dans un article précédent, j'ai exploré un moyen de prévisualiser les images avant de les télécharger avec Stimulus.

Je sais que je souhaite étendre ses fonctionnalités en ajoutant un glisser-déposer. En cours de route, j'utilise également les prises Stimulus pour relier les deux fonctionnalités. Présentation d'une utilisation plus avancée des petits contrôleurs Stimulus.

Je suppose que vous avez suivi toutes les étapes de l'article mentionné précédemment.

Commençons par le HTML. Il utilise l'autre code HTML avec seulement quelques attributs ajoutés.

Créons le dropzone_controller.js.

import { Controller } from "@hotwired/stimulus";

export default class extends Controller {
  static targets = ["input"];

  dragOver(event) {
    event.preventDefault();
  }

  dragLeave(event) {
    event.preventDefault();
  }

  drop(event) {
    event.preventDefault();

    this.#updateInputField(event.dataTransfer.files[0]);
  }
}

Toutes ces méthodes empêchent l'événement par défaut lorsque ces actions sont invoquées. La fonction drop() appelle également la fonction privée this.#updateInputField(). Ajoutons-le.

export default class extends Controller {
  // …

  // private
  #updateInputField(file) {
    const dataTransfer = new DataTransfer();

    dataTransfer.items.add(file);

    this.inputTarget.files = dataTransfer.files;
  }
  // …
}

Cela injectera l'image déposée dans le champ inputTarget. Et juste comme ça, vous pouvez glisser et déposer des images sur l'élément. ?

Aperçu des images avec les points de vente

Il manque cependant une partie importante… l'image n'est pas affichée, ce qui ressemble à un bug. Heureusement avec le image_preview_controller.js déjà fait. Il s'agit d'un exercice simple.

Modifiez d'abord le code HTML en ajoutant les attributs suivants :


Ajouté :

  • data-dropzone-image-preview-outlet="#image-preview";
  • id="image-aperçu".

Maintenant, deux lignes sont nécessaires dans le dropzone_controller.js.

export default class extends Controller {
  static outlets = ["image-preview"];
  // …

  drop(event) {
    // …

    this.imagePreviewOutlet.show();

    // …
  }

  // …
}

Maintenant, lorsque vous déposez une image, la fonction show() est lancée sur image_preview_controller.js. ?

J'aime utiliser de petits contrôleurs Stimulus comme ceux-ci qui fonctionnent très bien ensemble.


Ras Designer propose ce contrôleur Stimulus avec quelques extras ajoutés. Obtenez votre exemplaire aujourd'hui.

Déclaration de sortie Cet article est reproduit sur : https://dev.to/railsdesigner/drag-drop-images-with-preview-using-stimulus-outlets-4k9h?1 En cas d'infraction, veuillez contacter [email protected] pour supprimer il
Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3