Los nuevos eventos JavaScript y atributos de HTML 5 nos permiten la interacción con nuestro documento / aplicación utilizando la técnica de arrastrar y desplazar. La interfazDataTransfer nos permite transferir archivos utilizando las capacidades de arrastrar y soltar.
Tabla de contenido
- · Los eventos de arrastrar y soltar
- · Definiendo que y donde arrastrar
- · Personalizando el comportamiento de arrastrar soltar
- · Accediendo al contenido arrastrado
- · Arrastrando archivos del navegador al ordenador
- · Arrastrando archivos del ordenador al navegador
Los eventos de arrastrar y soltar
Existen los siguientes eventos para controlar la interacción del usuario usando arrastrar y soltar.drag - El cursor ha arrastrado el elemento.
dragenter - El cursor ha arrastrado algo dentro el elemento.
dragleave - El cursor ha quitado algo que esta arrastrando de sobre el elemento.
dragover - El cursor ha arrastrado algo por encima del elemento. El evento por defecto bloquea la posibilidad de soltar en cada elemento, podemos permitir soltar en un elemento haciendo que devuelva false.
dragstart - Empezamos a arrastrar un elemento.
drop - Se ha soltado algo dentro de el elemento.
dragend - Se ha terminado de arrastrar un elemento.
Definiendo que y donde arrastrar
Con el atributo draggable indicamos al navegador que un elemento dado se puede arrastrar000 |
|
Y haciendo devolver false al evento dragover hacemos que se pueda arrastrar sobre un elemento:
000 |
|
Personalizando el comportamiento de arrastrar soltar
Podemos cambiar la forma en que se comporta el soltar sobre un elemento con el atributo dropEfect de dataTransfer en el evento ondragover, de esta forma podemos escojer entre none, copy, link y move:000 |
|
Según en que div situemos el elemento arrastrado el icono del navegador será diferente.
En el evento dragstart podemos personalizar el elemento arrastrado, el atributoeffectAllowed del dataTransfer del evento indica que métodos de arrastrado permite un elemento, sus valores pueden ser none, copy, copyLink, copyMove, link, linkMove, moveo all.
En el ejemplo vemos cómo segun el effectAllowed podemos arrastrar o no a diferentesdiv con dropEffect distinto:
000 |
|
Y por otro lado, con el método setDragImage marcamos el elemento que ve el usuario al arrastrar, la distancia X del cursor y Y.
En el ejemplo, hay 3 div arrastrables y 3 div que se ven al lado del cursor según que div arrastramos:
000 |
|
Accediendo al contenido arrastrado
Para acceder al contenido arrastrado primero debemos indicar el contenido condataTransfer.setData, una vez indicado podemos acceder a éste condataTransfer.getData. Ambos métodos necesitan el primer parámetro indicando el tipo de contenido ( Text o DownloadURL ) y setData un segundo parámetro con el valor000 |
|
Si se arrastra un fragmento de texto ( de una web, o desde el ordenador ) no hace falta elsetData.
Arrastrando archivos del navegador al ordenador
Para arrastrar archivos del navegador al ordenador del usuario, definiremos el valor del dato arrastrado de tipo DownloadURL con dataTransfer.setData igual que en el punto anterior hicimos con un tipo text. Este valor será:TIPO MIME:NOMBRE ARCHIVO:RUTA
El siguiente ejemplo descarga un archivo de nombre logo.gif, tipo mime image/gif y con url http://www.programacionweb.net/logo_pweb.gif, el valor tipo DownloadURL esimage/gif:logo.gif:http://www.programacionweb.net/logo_pweb.gif
000 |
|
Arrastrando archivos del ordenador al navegador
El vector files accede a los archivos arrastrados desde el navegador, se pueden arrastrar múltiples archivos que se accederán desde files[0] , files[1], ... , files[n]. Cada file tendrá los siguientes atributos:fileName - Nombre de archivoEn este ejemplo, podemos soltar archivos desde el ordenador a "Arrastrar archivos aqui", un alert nos mostrará el nombre del archivo:
fileSize - Tamaño del archivo
000 |
|
Una vez obtenido el archivo podemos subirlo al servidor por ajax:
000 |
|
Comentarios
Publicar un comentario