HTML5: arrastrar y soltar

prefacio

Arrastrar y soltar es una función común en la que se toma un objeto y luego se arrastra a otra ubicación. En H5, cualquier elemento admite arrastrar y soltar, pero debe tenerse en cuenta que algunos elementos tienen un comportamiento predeterminado (como un elemento) y el comportamiento predeterminado de este elemento debe cancelarse.

Use preventDefault() para cancelar la acción predeterminada del evento

evento de arrastrar y soltar

Elemento de arrastre - evento:

evento describir
comienzo del contrato Se activa cuando el elemento comienza a arrastrarse: comience a arrastrar
inaguantable Activado por fuente de arrastre - arrastrando
indiferente La fuente de arrastre obtendrá el objeto dragend (ya sea exitoso o no) al final de la operación de arrastre - fin de arrastre

Nota: el evento ondrag siempre se activa mientras se arrastra el elemento, como verá en los siguientes ejemplos.

Soltar elemento - evento:

evento describir
portador Se activa cuando el mouse ingresa a un elemento por primera vez durante un arrastre
ondragover Se activa cuando el mouse que arrastra se mueve sobre un elemento
ondragleave Se activa cuando el ratón que arrastra deja el elemento
ondrop Se activa cuando finaliza la operación de arrastre y se libera en el elemento soltado

Nota: Solo los eventos relacionados se activan al arrastrar y los eventos del mouse no se activarán.

objeto de transferencia de datos

propiedades/métodos describir
archivos Su propiedad devuelve todos los archivos relacionados con el put
tipos La propiedad devuelve los formatos registrados actualmente como una matriz
efectoPermitido Este atributo informa al navegador de las acciones actualmente disponibles para el usuario
dropEffect El tipo de operación de arrastrar y soltar determina cómo el navegador muestra la forma del mouse
elementos La propiedad devuelve todos los elementos con todos los archivos del formato asociado
setData(formato,datos) Llame a esta función en el evento dragstart para almacenar datos en el objeto dataTransfer
obtener datos (formato) Obtener datos del objeto dataTransfer
setArrastrarImagen(elemento,x,y) Usar un elemento de imagen existente como imagen de arrastre
añadirElemento(elemento) Proporcione un elemento de página como referencia mientras usa este parámetro como una imagen de comentarios de arrastrar y soltar
borrar datos() Indica borrar todos los datos registrados y borra los datos registrados especificados con parámetros (este método no necesita pasar el parámetro 99)
Para una API específica, consulte: https://developer.mozilla.org/zh-CN/docs/Web/API/DataTransfer

Veamos primero un pequeño ejemplo.

Cabe señalar que si desea que un elemento se pueda arrastrar, debe establecer el atributo arrastrable del elemento en "verdadero" para permitir el arrastre.

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>拖放API</title>
<style>
section{
      
      
    background:red;
    border-radius:50%;
    width:100px;
    height:100px
}
</style>
</head>
<body>
<section draggable="true" id="demo"></section>
<script>
// 获取元素DOM
var demo = document.querySelector('#demo')
// 开始拖动
demo.ondragstart = function (){
      
      
    console.log('开始拖动')
}
// 正在拖动
demo.ondrag = function (){
      
      
    console.log('正在拖动(此事件一直触发,除非结束)')
}
// 结束拖动
demo.ondragend = function (){
      
      
    console.log('结束拖动')
}
</script>
</body>
</html>

Comience a arrastrar, arrastrar y soltar
inserte la descripción de la imagen aquí
En este punto, la consola imprime los resultados de la siguiente manera:
inserte la descripción de la imagen aquí

manifestación

Al realizar una operación de arrastrar y soltar, el objeto dataTransfer se puede usar para guardar los datos que se están arrastrando. Puede contener uno o más datos, uno o más tipos de datos. En términos simples, los datos arrastrados se pueden transmitir a través de él, de modo que se pueden realizar otras operaciones en los datos cuando finaliza el arrastre.

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>拖放API</title>
<style>
    .element{
      
      
        width:50px;
        height:50px;
        background:red;
        border-radius:50%;
    }
    section{
      
      
        width:150px;
        height:150px;
        background:black;
    }
</style>
</head>
<body>
    <p>请把小球元素拖到这里:</p>
    <section id="container"></section>
    <hr>
    <div id="e1" class="element" draggable="true">1号</div>
    <div id="e2" class="element" draggable="true">2号</div>
    <div id="e3" class="element" draggable="true">3号</div>
<script>
// 获取所有 .element DOM节点
var elements = document.querySelectorAll('.element')

// 获取 #container DOM节点
var container = document.getElementById('container')

// 遍历(拖动动作)
for(var i = 0, len = elements.length; i < len; i++){
      
      
    elements[i].ondragstart = function (e){
      
      
        // dataTransfer对象中存储数据
        e.dataTransfer.setData('id',this.id)
    }
}

// 取消默认事件(否则无法放置)
// 其他方法:container.ondragover = function (even){
      
      
//     even.preventDefault()
// }
container.ondragover = () => {
      
      return false}

// 放置 .element DOM节点(放下)
container.ondrop = function (e){
      
          
    // 获取 dataTransfer对象数据
    var id = e.dataTransfer.getData('id')
    // 根据 id 添加到容器
    let Flag = document.getElementById(id)
    this.appendChild(Flag)
    // 控制台查看小球id
    console.log(`您当前放置的小球是:【${ 
        id}`)
}

</script>
  </body>
</html>

No arrastrado:
inserte la descripción de la imagen aquí
Arrastrado:
inserte la descripción de la imagen aquí
Nota: En otros eventos (como ondragover, ondragleave, etc.), es imposible obtener el valor en dataTransfer. Esto se debe al requisito de W3C para proteger los valores en transferencia de datos. Por lo tanto, si necesita obtener datos en estos eventos, solo puede lograrlo a través de una variable global u otros métodos.

Supongo que te gusta

Origin blog.csdn.net/m0_68669764/article/details/128370570
Recomendado
Clasificación