Con questo piccolo post voglio lasciarvi un semplice esempio di script per trascinare e caricare un’immagine dentro un form html dove con l’aiuto di JavaScript riusciremo ad avere un metodo semplice e molto d’effetto per le nostre pagine web.
Prima di tutto andiamo a creare una pagina html vuota. E’ sempre comodo partire da una struttura base di html che ci permetta di iniziare a inserire i blocchi di codice per fare i test e poi utilizzarli nei nostri script. La pagina index.html:
<!DOCTYPE html>
<html lang="it">
<head>
<title>Simple upload image</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<!-- Inserisco il foglio di stile -->
<link href="style.css" rel="stylesheet">
</head>
<body>
<form name="simpleUpload">
<!-- i campi per poter caricare il file -->
<div id="dropArea" class="drop-area">
<p>Trascina qui la tua immagine o <span class="browse">clicca per caricare</span></p>
<input type="file" class="form-control file-input" id="imageInput1" name="imageInput1" accept="image/jpeg">
</div>
<br>
<!-- inseriesco il valore base64 dell'immagine caricata-->
<input type="hidden" id="imageBase64_1" name="frontedocumento" value="">
<!-- visualizzo l'anteprima dell'immagine caricata-->
<div id="previewContainer" class="preview"></div>
</form>
<!-- inserisco lo script -->
<script src="script.js"></script>
</body>
</html>
Come si vede ho creato tre file in totale, uno è la index.html qui sopra, poi un file css e uno js. Il foglio di stile è molto semplice:
.drop-area {
border: 2px dashed #007bff;
padding: 20px;
text-align: center;
cursor: pointer;
background-color: #f8f9fa;
border-radius: 5px;
}
.drop-area p {
margin: 0;
font-size: 16px;
color: #007bff;
}
.drop-area .browse {
font-weight: bold;
text-decoration: underline;
}
.file-input {
display: none; /* Nasconde il normale input file */
}
.preview img {
max-width: 100%;
height: auto;
margin-top: 10px;
}
Ci sono le due drop area dove andiamo a trascinare l’immagine e il div dell’enteprima.
Il JS è più complesso perché oltre a creare l’anteprima genera il base64 dell’immagine così quando andiamo a salvare il modulo basta creare l’immagine dal base64, se si salva sul file system, altrimenti possiamo salvare il base64 direttamente sul database. Come ho già detto questo è un semplice esempio di script per trascinare e caricare un’immagine non c’è nulla di complicato o che non avete mai visto.
document.addEventListener('DOMContentLoaded', function() {
const dropArea = document.getElementById('dropArea');
const fileInput = document.getElementById('imageInput1');
const imageBase64_1 = document.getElementById('imageBase64_1');
const previewContainer = document.getElementById('previewContainer');
// Evento per il click che apre il file input
dropArea.addEventListener('click', () => fileInput.click());
// Evento per il caricamento del file
fileInput.addEventListener('change', (event) => {
handleImageUpload(event.target.files[0]);
});
// Eventi Drag & Drop
dropArea.addEventListener('dragover', (event) => {
event.preventDefault();
dropArea.classList.add('dragover');
});
dropArea.addEventListener('dragleave', () => {
dropArea.classList.remove('dragover');
});
dropArea.addEventListener('drop', (event) => {
event.preventDefault();
dropArea.classList.remove('dragover');
if (event.dataTransfer.files.length > 0) {
handleImageUpload(event.dataTransfer.files[0]);
}
});
function handleImageUpload(file) {
if (file && file.type.startsWith('image/')) {
const reader = new FileReader();
reader.onload = function(event) {
const dataUrl = event.target.result;
imageBase64_1.value = dataUrl;
displayPreview(dataUrl);
};
reader.readAsDataURL(file);
} else {
alert("Seleziona un file immagine valido!");
}
}
function displayPreview(dataUrl) {
previewContainer.innerHTML = ''; // Pulisce il contenuto precedente
const img = document.createElement('img');
img.src = dataUrl;
previewContainer.appendChild(img);
}
});
Questo codice JavaScript come potete vedere vi permette di gestire il caricamento di immagini tramite un’area interattiva che supporta sia il click che il drag & drop.
Funzioni principali:
– Apre il selettore di file quando si clicca sull’area dropArea.
– Carica un’immagine quando l’utente seleziona un file o lo trascina nell’area.
– Converte l’immagine in Base64 con FileReader e la inserisce in un campo nascosto (imageBase64_1).
– Mostra l’anteprima dell’immagine nel previewContainer.
– Gestisce il drag & drop per migliorare l’esperienza utente.
– Se il file non è un’immagine, viene mostrato un messaggio di errore.
Puoi scaricare l’esempio completo qui: https://github.com/oldpan73/uploadimage
Può interessarti anche: https://www.salisnet.eu/2020/01/creare-una-ricerca-con-auto-completamento-del-testo/