Movatterモバイル変換


[0]ホーム

URL:


MDN Web Docs

Esta página ha sido traducida del inglés por la comunidad. Aprende más y únete a la comunidad de MDN Web Docs.

Drag & Drop archivo

Las interfaces Drag-and-Drop posibilitan arrastrar y soltar archivos en una página web. En este documento se describe cómo una aplicación puede aceptar uno, o más, archivos que son arrastrados desde elexplorador de archivos de la plataforma y soltados en una página web.

Los pasos principales para configurar Drag-and-drop son: 1) definir una "zona drop (drop zone), es decir, definir un elemento donde se podrá soltar el archivo; y 2) definir funciones para la gestión de los eventosdrop ydragover. Estos pasos se describen a continuación, tambien se incluyen ejemplos snippets de código. El código fuente completo está disponible en elrepositorio drag-and-drop de MDN (cualquier sugerencia o tema que revisar es bienvenido).

Nota:HTML drag and drop define 2 diferentes APIs para soportar drag and drop de archivos. Una API es la interfazDataTransfer y la segunda API son las interfacesDataTransferItem yDataTransferItemList. Este ejemplo ilustra el uso de ambas APIs (y no usa ninguna interfaz específica de Gecko).

Define la zona "drop" [drop zone]

Es necesario configurar un eventodrop en el objeto sobre el cual se soltará el objeto arrastrado. Este evento llamará una función globalondrop que recibe los datos del objeto arrastrado. El siguiente código muestra cómo se hace con un elemento<div>:

html
<div ondrop="dropHandler(event);">  <p>Arrastra y suelta uno o más archivos a esta zona ...</p></div>

Normalmente, una aplicación incluirá una función de gestión de eventosdragover en el elemento objetivo del arrastre y esa función desactivará el comportamiento de arrastre por defecto del browser. Para añadir esta función necesita incluir una función globalondragover:

html
<div   ondrop="dropHandler(event);"  ondragover="dragOverHandler(event);">  <p>Arrastra y suelta uno o más archivos a esta zona ...</p></div>

Por último, puede que una aplicación quiera personalizar el estilo del elemento objetivo del arrastre para indicar visualmente que es una zona drag and drop. En este ejemplo, el elemento objetivo usa el siguiente estilo:

css
#drop_zone {  border: 5px solid blue;  width: 200px;  height: 100px;}

Nota:Fíjese que los eventosdragstart ydragend no son activados cuando se arrastra un archivo al browser desde el SO.

Procesar la acción de soltar [drop]

El eventodrop se ejecuta cuando el usuario suelta el o los archivos. En el siguiente manejador, si el navegador sorporta la interfazDataTransferItemList , el métodogetAsFile() se utiliza para acceder cada fichero; de lo contrario la propiedadDataTransfer de la interfazfiles es usada para acceder cada archivo.

El ejemplo siguiente muestra como escribir el nombre de cada fichero arrastrado en la consola. En una aplicaciónreal, se querrá procesar un archivo usandoFile API.

Nótese que en este ejemplo, cualquier item arrastrado que no sea un archivo es ignorado.

js
function dropHandler(ev) {  console.log("Fichero(s) arrastrados");  // Evitar el comportamiendo por defecto (Evitar que el fichero se abra/ejecute)  ev.preventDefault();  if (ev.dataTransfer.items) {    // Usar la interfaz DataTransferItemList para acceder a el/los archivos)    for (var i = 0; i < ev.dataTransfer.items.length; i++) {      // Si los elementos arrastrados no son ficheros, rechazarlos      if (ev.dataTransfer.items[i].kind === "file") {        var file = ev.dataTransfer.items[i].getAsFile();        console.log("... file[" + i + "].name = " + file.name);      }    }  } else {    // Usar la interfaz DataTransfer para acceder a el/los archivos    for (var i = 0; i < ev.dataTransfer.files.length; i++) {      console.log(        "... file[" + i + "].name = " + ev.dataTransfer.files[i].name,      );    }  }  // Pasar el evento a removeDragData para limpiar  removeDragData(ev);}

Prevenir el comportamiento default de arrastrado en el browser

El siguiente eventodragover llama apreventDefault() para deshabilitar (turn off) la respuesta estandar drag-and-drop del browser.

js
function dragOverHandler(ev) {  console.log("File(s) in drop zone");  // Prevent default behavior (Prevent file from being opened)  ev.preventDefault();}

Limpieza (Cleanup)

Typically, an application may want to perform some cleanup by deleting the file drag data. In this example, the drop event is passed along from drop handler to a custom function called removeDragData. If the browser supports theDataTransferItemList interface, the list'sclear() method is used to delete the file drag data; otherwise theDataTransfer object'sclearData() method is used to delete the data.

js
function removeDragData(ev) {  console.log("Removing drag data");  if (ev.dataTransfer.items) {    // Use DataTransferItemList interface to remove the drag data    ev.dataTransfer.items.clear();  } else {    // Use DataTransfer interface to remove the drag data    ev.dataTransfer.clearData();  }}

See also

Help improve MDN

Learn how to contribute.

This page was last modified on byMDN contributors.


[8]ページ先頭

©2009-2025 Movatter.jp