HTML5, JavaScript: Arrastre y Suelte el archivo desde una ventana externa (Explorador de Windows)


¿Puedo pedir amablemente un buen ejemplo de trabajo de la implementación de Arrastrar y Soltar el archivo HTML5 ? El código fuente debe funcionar si arrastrar y soltar se realiza desde la aplicación externa (Explorador de Windows) a la ventana del navegador. Debería funcionar en tantos navegadores como sea posible.

Me gustaría pedir un código de ejemplo con una buena explicación. No deseo usar bibliotecas de terceros, ya que tendré que modificar el código de acuerdo a mis necesidades. El código debe basarse en HTML5 y JavaScript . No quiero usar JQuery.

Pasé todo el día buscando una buena fuente de material, pero sorprendentemente, no encontré nada bueno. Los ejemplos que encontré funcionaban para Mozilla, pero no funcionaban para Chrome.

Author: Bunkai.Satori, 2012-04-21

3 answers

Aquí hay un ejemplo simple. Muestra un cuadrado rojo. Si arrastra una imagen sobre el cuadrado rojo, la añade al cuerpo. He confirmado que funciona en IE11, Chrome 38, y Firefox 32. Vea el artículo HTML5Rocks para una explicación más detallada.

var dropZone = document.getElementById('dropZone');

// Optional.   Show the copy icon when dragging over.  Seems to only work for chrome.
dropZone.addEventListener('dragover', function(e) {
    e.stopPropagation();
    e.preventDefault();
    e.dataTransfer.dropEffect = 'copy';
});

// Get file data on drop
dropZone.addEventListener('drop', function(e) {
    e.stopPropagation();
    e.preventDefault();
    var files = e.dataTransfer.files; // Array of all files

    for (var i=0, file; file=files[i]; i++) {
        if (file.type.match(/image.*/)) {
            var reader = new FileReader();

            reader.onload = function(e2) {
                // finished reading file data.
                var img = document.createElement('img');
                img.src= e2.target.result;
                document.body.appendChild(img);
            }

            reader.readAsDataURL(file); // start reading the file data.
        }
    }
});
<div id="dropZone" style="width: 100px; height: 100px; background-color: red"></div>
 68
Author: Dwayne,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-01-31 17:14:12

Este enlace explica mi pregunta con bastante detalle:

Http://www.html5rocks.com/en/tutorials/file/dndfiles /

 14
Author: Bunkai.Satori,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-05-04 09:24:56

Busca en el evento ondragover. Simplemente podría tener un interior de un div que se oculta hasta que el evento ondragover dispara una función que mostrará el div con el en él, permitiendo así al usuario arrastrar y soltar el archivo. Tener una declaración onchange en el le permitiría llamar automáticamente a una función (como upload) cuando se agrega un archivo a la entrada. Asegúrese de que la entrada permite varios archivos, ya que no tiene control sobre cuántos van a tratar de arrastrar en el navegador.

 2
Author: Charles John Thompson III,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-04-28 07:27:52