[JAVA] Implémentation de la fonction de prévisualisation d'image

introduction

Je crée une application originale avec Rails. Nous avons implémenté une fonction de publication d'images dans cette application. Puisque l'aperçu était affiché après le téléchargement de l'image (avant de l'enregistrer dans la base de données), notez-le.

table des matières

  1. Préparation
  2. Mise en œuvre de la fonction de prévisualisation

1. Préparation

Puisque JavaScript est utilisé, préparez un fichier js. Définit pour fonctionner lorsque la page se charge.

app/javascript/packs/preview.js


document.addEventListener('DOMContentLoaded', function(){
  const ImageList = document.getElementById('image-list');
});

La liste d'images obtenue par getElementById est le nom d'id de la balise div sur html. Afficher un aperçu de cette balise div. Par conséquent, je vais l'ajouter au html (cette fois, je l'ai placé sous le bouton d'envoi).

Ruby:○○.html.erb


<%= f.file_field :image %>
<%= f.submit 'Envoyer' %>
<div id="image-list"></div>

Modifiez également application.js afin que le fichier js créé soit chargé. Les turbolinks commentés sont des joyaux qui accélèrent les transitions d'écran. Il semble qu'il ne lit pas toutes les informations de la page, mais uniquement le HTML. Par conséquent, l'événement défini dans JavaScript peut ne pas se déclencher.

app/javascript/packs/application.js


// require("turbolinks").start()  //Commenter
require("@rails/activestorage").start()
require("channels")
require('./preview')  //Ajouter

2. Mise en œuvre de la fonction de prévisualisation

3 étapes au total. ** 2-1. Acquisition d'informations sur l'image Tout d'abord, obtenez les informations sur l'image et générez l'URL. Les informations d'image sont acquises lorsque la valeur de l'élément d'entrée change.

app/javascript/packs/preview.js


document.addEventListener('DOMContentLoaded', function(){
  const ImageList = document.getElementById('image-list');
 
  document.getElementById('desk_image').addEventListener('change', function(e){
  //↑desk_image est l'identifiant du bouton de sélection d'image//
    const file = e.target.files[0];
    const blob = window.URL.createObjectURL(file);
  });
});

L'image sélectionnée est stockée dans un tableau appelé fichiers dans l'événement déclenché e, cible. Définissez-le dans la variable de fichier et générez l'URL avec window.URL.createObjectURL.

** 2-2. Affichage de l'image acquise ** Créez un élément div et un élément img pour insérer l'image acquise avec createElement. Affichez ensuite l'élément généré dans le navigateur.

app/javascript/packs/preview.js


document.addEventListener('DOMContentLoaded', function(){
  const ImageList = document.getElementById('image-list');
 
  document.getElementById('desk_image').addEventListener('change', function(e){
    const file = e.target.files[0];
    const blob = window.URL.createObjectURL(file);

  //Générer un élément div pour afficher une image
    const imageElement = document.createElement('div');

  //Générer des éléments d'image pour afficher et insérer des images
    const blobImage = document.createElement('img');
    blobImage.setAttribute('src', blob);

  //Afficher l'élément HTML généré sur le navigateur
    imageElement.appendChild(blobImage);
    ImageList.appendChild(imageElement);
  });
});

Ajoute un élément à l'intérieur de l'élément parent spécifié par appendChild (Utilisation: élément parent.appendChild (élément enfant)).

** 2-3. Prévention des erreurs et possibilité de modification ** L'image sera affichée par 2-2. Cependant, une erreur s'affiche sur la console autre que la page de publication d'image. Pour éviter cela, ajoutez une condition. Décrivez pour postuler lorsqu'il y en a de nouveaux et éditez dans l'URL (lors de la publication d'une nouvelle image ou de l'édition)

app/javascript/packs/preview.js


if (document.URL.match( /new/ ) || document.URL.match( /edit/ )) {
  document.addEventListener('DOMContentLoaded', function(){
    const ImageList = document.getElementById('image-list');
 
---------------- Omis ----------------------
    //Afficher l'élément HTML généré sur le navigateur
      imageElement.appendChild(blobImage);
      ImageList.appendChild(imageElement);
    });
  });
}

Lors de la modification d'une image, supprimez l'aperçu existant, puis affichez le nouvel aperçu de l'image.

app/javascript/packs/preview.js


if (document.URL.match( /new/ ) || document.URL.match( /edit/ )) {
  document.addEventListener('DOMContentLoaded', function(){
    const ImageList = document.getElementById('image-list');

    document.getElementById('message_image').addEventListener('change', function(e){
      //Supprimer une image existante uniquement si l'image est affichée
      const imageContent = document.querySelector('img');
      if (imageContent){
        imageContent.remove();
      }
      const file = e.target.files[0];
      const blob = window.URL.createObjectURL(file);
      const imageElement = document.createElement('div');
      const blobImage = document.createElement('img');
      blobImage.setAttribute('src', blob);
      imageElement.appendChild(blobImage);
      ImageList.appendChild(imageElement);
    });
  });
}

c'est tout

Recommended Posts

Implémentation de la fonction de prévisualisation d'image
Implémentation de la fonction de prévisualisation d'image
[Rails] Implémentation de la fonction de prévisualisation d'image
[Rails] Implémentation de la fonction d'agrandissement d'image à l'aide de lightbox2
Suivez l'implémentation de la fonction (Ajax)
Implémentation de la fonction de recherche
Mise en œuvre de la fonction de pagénation
Fonction de recherche [implémentation copier-coller]
[Procédure de mise en œuvre] Implémentez la fonction de téléchargement d'images avec Active Storage
[Ruby on Rails] Fonction de prévisualisation de l'image dans le fichier
Implémentation de la fonction de recherche floue Rails
[Rails] Implémentation de la fonction de catégorie
Mise en œuvre de la fonction déroulante de catégorie
[Rails] Implémentation de la fonction tutoriel
[Rails] Implémenter la fonction de publication d'images
[Rails] Implémentation d'une fonction similaire
[Rails] Implémentation de la fonction d'importation CSV
[Rails] Implémentation asynchrone de la fonction similaire
[Rails] À propos de la mise en œuvre de la fonction similaire
[Rails] Implémentation de la fonction de retrait utilisateur
[Rails] Implémentation de la fonction d'exportation CSV
J'ai essayé d'implémenter la fonction de prévisualisation d'image avec Rails / jQuery
[Rails] Implémentation de la fonction de catégorie d'ascendance gemme
[Ruby on Rails] Implémentation de la fonction de commentaire
Oui, prévisualisons l'image. ~ part5 ~
Afficher l'aperçu lors de la modification de l'image de l'utilisateur
[Rails] Commentaire mémo de procédure d'implémentation
Erreur rencontrée lors de l'implémentation de la fonction de balisage
Implémentation d'une fonction similaire en Java
Implémentation de la fonction d'authentification des utilisateurs à l'aide de devise (2)
[Ruby on Rails] Suivez l'implémentation de la fonction: bidirectionnelle
Implémentation de la fonction d'authentification des utilisateurs à l'aide de devise (1)
Rails [Pour les débutants] Implémentation de la fonction de commentaire
Où la fonction de suivi est implémentée
Échafaudage de procédure d'implémentation de fonction CRUD de base
Implémentation de la fonction d'authentification des utilisateurs à l'aide de devise (3)
[Ruby on rails] Implémentation d'une fonction similaire
Implémentation de la fonction de connexion par Spring Security (securityConfig)