JavaScript

Input File con vista previa de la imagen

Personalizar el botón de carga con vista previa de la imagen

Input File con vista previa de la imagen. En desarrollos de sistemas en algún modulo se requiere la carga de imágenes y mejor aun con una vista previa de la imagen.

Reemplazaremos la carga por defecto de HTML por otro mas elegante y usando vista previa de carga de imagen.

Input File con vista previa de la imagen

Como se muestra en la imagen, primero se muestra el botón Agregar. Luego, una vez que se selecciona una imagen, se muestra una vista previa.

Este es el código que se utilizo:

Cargar multiples imagenes con vista previas
Cargar multiples imagenes con vista previas

HTML

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="imagePreview" src="http://via.placeholder.com/350x150" alt="placeholder image goes here"></div>
<input id="uploadFile" type="file" name="image" class="img" />

CSS

#imagePreview {
width: 180px;
height: 180px;
background-position: center center;
background-size: cover;
-webkit-box-shadow: 0 0 1px 1px rgba(0, 0, 0, .3);
display: inline-block;
background-image: url('http://via.placeholder.com/350x150');
}

#uploadFile{
display: none
}

jQuery

$(function() {
$("#uploadFile").on("change", function()
{
var files = !!this.files ? this.files : [];
if (!files.length || !window.FileReader) return; // no file selected, or no FileReader support

if (/^image/.test( files[0].type)){ // only image file
var reader = new FileReader(); // instance of the FileReader
reader.readAsDataURL(files[0]); // read the local file

reader.onloadend = function(){ // set image data as background of div
$("#imagePreview").css("background-image", "url("+this.result+")");
}
}
});
});

$('#imagePreview').click(function(){
$('#uploadFile').click();
});

Detalles del script anterior.- Lo que haremos es cumplir estos 3 puntos claves para lograr nuestro objetivo

  • Ocultar input file por defecto
  • Adjuntar la funcion .onclick() al marcador de posición de la imagen
  • Activar el clic de entrada manualmente

Segundo método: Previsualización carga de imagen

Vamos a utilizar la etiqueta <label> para representar y decorar nuestro input file tradicional.

A continuación, se muestra una demostración sencilla:

$('#file1').on('change', function() {
var files = !!this.files ? this.files : [];
if (!files.length || !window.FileReader) return; // no file selected, or no FileReader support

if (/^image/.test(files[0].type)) { // only image file
var reader = new FileReader(); // instance of the FileReader
reader.readAsDataURL(files[0]); // read the local file

reader.onloadend = function() { // set image data as background of div
$('img').attr('src', reader.result).removeClass('default')
}
}
})

CSS

#file1 {
display: none;
}

img {
cursor: pointer;
width: 200px;
height: 200px;
}

img.default {
border: 2px gray dashed;
padding: 50px;
height: 150px;
width: 150px;
}

HTML

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="file" id="file1">
<label for="file1">
<img src="https://cdn3.iconfinder.com/data/icons/iconic-1/32/plus_alt-256.png" class="default" alt="">
</label>

Para resumir, podemos dinamizar la funcion de jQuery usando ciclos for o foreach y de ese modo generar múltiples campos para cargar imágenes con vista previas.

Cargar imagen con vista previa
Cargar imagen con vista previa

Nestor Tapia

Bloggero, amante de la programación PHP, innovador y me fascina compartir información. Desde que conocí el entorno informatico y el internet me llamó la atención la programación, Por tal motivo he creado mi blog BAULPHP.COM para compartir mis experiencias con todos ustedes. ¡Gracias por leerme!.
Botón volver arriba
Esta web utiliza cookies propias para su correcto funcionamiento. Contiene enlaces a sitios web de terceros con políticas de privacidad ajenas que podrás aceptar o no cuando accedas a ellos. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Más información
Privacidad