Reporte Drag and Drop
Reporte Drag and Drop
Reporte Drag and Drop
Ola k ase
Objetivos:
Boom Nena
API Drag and Drop
Drag and Drop, abreviado como DnD o tambin conocido en espaol como Arrastrar y Soltar. Es un
evento de soporte nativo en la mayora de los navegadores, la cual se ejecuta a travz de JavaScript.
Este evento se puede activar con el cursor de nuestro ordenador, siempre y cuando hayamos creado
elementos que se puedan arrastrar en nuestra pgina web.
Este tipo de accin es conocida a nivel de programacin como Evento, ya que las acciones se
realizaran mientras que el usuario haga clic sobre el objeto y lo arrastrarlo a su antojo.
Al ser una propiedad nativa de los navegadores, esto permite crear una pgina web ms interactiva.
Para crear aplicar estas propiedades de arrastre, primero es necesario conocer los eventos que se
pueden dar en DnD.
- ondrag: est activo en cada movimiento del mouse cuando se arrastra un elemento.
- ondragover: Tiene lugar con cada movimiento del mouse cuando se arrastra un elemento dentro
del rea de un receptor de soltado.
- ondrop: se produce cuando el elemento arrastrado es soltado dentro del rea de un receptor de
soltado.
- setData: su uso se basa en declarar los datos que sern enviados y su tipo. Adems, tambin
recibe datos especiales como url y text y datos regulares como text/html y text/plain. Cualquier otro
tipo de dato se puede especificar en caso de que sea necesario.
- getData: es necesario para la extraccin de los datos de arrastre por tipo MIME.
- setDragImage: personaliza la imagen que aparece al lado del puntero cuando el elemento est
siendo arrastrado. Utiliza el tamao X,Y de la imagen
- Type: permite obtener un arreglo con todos los tipos de elementos utilizados en el evento
dragstart
-files: retorna una lista de los archivos que estn siendo arrastrados
-dropEffect: retorna el tipo de operacin solicitada para el elemento arrastrado. Los valores
posibles son: copy, move, link y none.
-effectAllowed: retorna el tipo de operacin que se ha permitido. Los valores posibles son: copy,
move, link, copyLink, copyMove, linkMove, all, none y uninitialized.
- Un Receptor de Soltado, Es el que recibir el objeto que se arrastra, al momento de soltarlo. Para
indicar el receptor de soltado, al elemento o elementos que utilicemos para este fin debemos poner
los eventos ondragover y ondrop.
<div id="soltado" ondragover="evdragover(event)" ondrop="evdrop(event)"></div>
- Crear los mtodos y las nuevas propiedades para los objetos de arrastre y receptores,
Los mtodos se crean en JavaScript y utilizamos las funciones que nos regresaran los
valores que necesitamos para operar con los objetos. A travs de todas funciones
anteriormente mencionadas.
Tambin podemos usar esta api para arrastrar no solamente objetos dentro de la pgina web,
tambin podemos arrastrar los archivos desde nuestro ordenador para incluirlos donde sean
necesarios, por ejemplo para subir un archivo, una imagen se puede hacer arrastrando directamente
el archivo hacia el objeto receptor, y obtendr la ruta del archivo por medio de la funcin
dataTransfer.files la cual devuelve una lista con los archivos que se estn arrastrando hacia adentro
del navegador.
Ejemplo: API Drag o drop.
Ejemplo1
Arrastrando elementos hacia otro elemento
Archivo index.html.
--html
<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="utf-8"/>
<meta name="description" content="Ejemplo de HTML5">
<meta name="keywords" content="HTML5, CSS3, JavaScript">
<title>Este texto es el ttulo del documento</title>
<link rel="stylesheet" href="dragdrop.css">
<script src="dragdrop.js"></script>
</head>
<body>
<div id="agrupar">
<header id="cabecera">
<h1>Ejemplo drag and drop</h1>
</header>
<section id="seccion">
<article>
<header>
<h1>Arrastre los numeros pares hacia esta
caja</h1>
</header>
<div id="cajasoltar">
Arrastre y suelte las imgenes aqu
</div>
</article>
</section>
<aside id="columna">
<div id="cajaimagenes">
<img id="imagen1" src="8.jpg">
<img id="imagen2" src="20.jpg">
<img id="imagen3" src="2.jpg">
<img id="imagen4" src="1.jpg">
</div>
</aside>
<footer id="pie">
Derechos Reservados ©
</footer>
</div>
</body>
</html>
Archivo dragdrop.css
--CSS--
body{
text-align: center;
}
article{
background: #006699;
border: 1px solid #000;
margin-bottom: 15px;
padding: 20px;
text-align: center;
}
article footer{
text-align: right;
}
h1{
font: bold 20px Verdana,sans-serif;
}
h2{
background: #ccc;
color: #FF0000;
border: 3px solid #000;
font: bold 20px Verdana,sans-serif;
margin: 10px 20px;
padding: 20px;
text-align: center;
}
Archivo dragdrop.js
--JS
function iniciar(){
var imagenes=document.querySelectorAll('#cajaimagenes > img');
for(var i=0; i<imagenes.length; i++){
//declara el escuchador de
//cada imagen
imagenes[i].addEventListener('dragstart', arrastrado, false);
imagenes[i].addEventListener('dragend', finalizado, false);
imagenes[i].addEventListener('mousemove', mouseentrando, false);
imagenes[i].addEventListener('mouseleave', mousesaliendo, false);
}
//se relaciona con el elemento cajasoltar
//en el el codigo html
soltar=document.getElementById('cajasoltar');
//se define los escuchadores de los eventos para este elemento
soltar.addEventListener('dragenter', entrando, false);
soltar.addEventListener('dragleave', saliendo, false);
soltar.addEventListener('dragover', function(e){
e.preventDefault(); }, false);
soltar.addEventListener('drop', soltado, false);
}
function arrastrado(e){
elemento=e.target;
soltar.style.border='4px solid rgb(237,28,36)';
e.dataTransfer.setData('Text', elemento.getAttribute('id'));
}
function entrando(e){
e.preventDefault();
soltar.style.background='rgba(0,150,0,0.5)';
}
function finalizado(e){
elemento=e.target;
e.preventDefault();
soltar.style.background='#FFF';
soltar.style.border='2px solid #000';
}
function saliendo(e){
e.preventDefault();
soltar.style.background='#FFF';
}
function soltado(e){
e.preventDefault();
elemento=e.target;
var id=e.dataTransfer.getData('Text');
if(id!="imagen4"){
document.getElementById(id).style.visibility='hidden';
var src=document.getElementById(id).src;
soltar.innerHTML='<img src="'+src+'">';
}else{
soltar.innerHTML='<h2>Este es un numero impar</h2>';
elemento.style.visibility='visible';
}
}
function mouseentrando(e){
elemento=e.target;
elemento.style.border='5px solid #000';
}
function mousesaliendo(e){
elemento=e.target;
elemento.style.border='2px solid #fff';
}
//Esto ejecuta el metodo iniciar()
//cuando la pagina es cargada en el navegador
window.addEventListener('load', iniciar, false);
Resultado:
Ejemplo2:
Arrastrando archivos desde aplicacin externa a la pgina.
Archivo index.html.
<!DOCTYPE html>
<html lang="es">
<head>
<title>Drag and Drop</title>
<link rel="stylesheet" href="dragdrop.css">
<script src="dragdrop.js"></script>
</head>
<body>
<section id="cajasoltar">
Arrastre y suelte archivos en este espacio
</section>
</body>
</html>
Archivo dragdrop.css
#cajasoltar{
float: left;
width: 500px;
height: 300px;
margin: 10px;
border: 1px solid #999;
}
Archivo dragdrop.js
function iniciar(){
soltar=document.getElementById('cajasoltar');
soltar.addEventListener('dragenter', function(e){
e.preventDefault(); }, false);
soltar.addEventListener('dragover', function(e){
e.preventDefault(); }, false);
soltar.addEventListener('drop', soltado, false);
}
function soltado(e){
e.preventDefault();
var archivos=e.dataTransfer.files;
var lista='';
for(var f=0;f<archivos.length;f++){
lista+='Archivo: '+archivos[f].name+'
'+archivos[f].size+'<br>';
}
soltar.innerHTML=lista;
}
window.addEventListener('load', iniciar, false);
Resultado: