美文网首页
drag事件

drag事件

作者: Christoles | 来源:发表于2019-03-12 13:37 被阅读0次

1. 原理

  • draggable : html元素属性,设置为true,表示该元素可以进行拖动。

  • 拖动事件:

  1. dragstart: 当元素开始拖动的时候触发;
  2. dragover: 当元素拖动到目标容器的时候触发;
  3. drop: 当元素拖动到目标容器松开鼠标的时候触发;
  4. dataTransfer.setData("StringName",event.target.id):通过setData的方法向DataTransfer对象添加一个属性,属性名为字符串,值为拖动元素的id
  • 完成拖动事件的过程:
  1. 设置 [拖动元素] 为可拖动状态(也就是设置元素的draggable的属性为true);
  2. 给 [拖动元素] 添加dragstart事件,并通过事件对象的dataTransfer对象的setData方法设置一个属性。
  3. 给 [目标容器] 添加drop事件,再通过事件对象的dataTransfer对象的getDate方法来获取上一步设置的属性,从而获取到拖动元素,然后再通过appendChild方法将拖动元素添加到目标容器。
  4. 给 [目标容器] 添加dragover事件,来阻止默认的拖动事件。

2.代码

html

<div class="test">
<!--第一步-->
    <p id="testP" draggable="true">拖动我!</p>
</div>
<div class="test"></div>

css

.test{
    width:100px;
    height:100px;
    border:1px solid black;
}

js

var testP = document.querySelector("#testP");
var test = document.querySelectorAll(".test");

//获取被拖动对象的数据
testP.addEventListener("dragstart",(e)=>{
    e.dataTransfer.setData("DragDate",e.target.id);//dataTransfer.setData
    //第一个参数是属性名,第二个参数是属性值
    //即是通过setData的方法向DataTransfer对象添加一个属性,属性名为字符串,值为拖动元素的id***
})
//第二步           
  //可拖到第二个框
  //禁用默认设置
test[1].addEventListener("dragover",(e)=>{
    e.preventDefault();//阻止e弹回
})
//第三步
  //设置获得的数据再添加到目标容器
test[1].addEventListener("drop",(e)=>{
//获取到拖动元素的id
var data = e.dataTransfer.getData("DragDate");//dataTransfer.getData
//console.log(data);//testP
//通过id获取到拖动元素
let item = document.querySelector("#"+data);
    //将拖动元素放到目标元素中
    test[1].appendChild(item);//**
})
            
            
//可拖回到第一个框
test[0].addEventListener("dragover",(e)=>{
    e.preventDefault();
})
test[0].addEventListener("drop",(e)=>{
    var data = e.dataTransfer.getData("DragDate");
    test[0].appendChild(document.querySelector("#"+data))
})

3.效果

image.png image.png image.png

相关文章

  • hmtl5 拖放研究

    参考文章:HTML Drag and Drop API 拖放事件 拖放事件有 dragstart, drag, d...

  • drag事件

    1. 原理 draggable : html元素属性,设置为true,表示该元素可以进行拖动。 拖动事件: dra...

  • js高级程序设计-事件和异常处理

    1.拖动元素的事件过程 拖动事件大致可以分为7个事件:dragstart、drag、dragend、dragent...

  • 『与善仁』Appium基础 — 32.滑动方法(二)

    (3)drag拖拽事件 从⼀个元素滑动到另⼀个元素,第⼆个元素替代第⼀个元素原本屏幕上的位置。 drag_and_...

  • 第八章 d3拖拽和事件及缩放

    简单的拖拽举例 drag.container(svg) //设置拖拽事件的相对父元素 事件 缩放d3.zoom()...

  • 触屏事件

    touch 以及 基于touch 的各种事件,drag(拖拽)、hold(长按)、pinch(捏)、rotate(...

  • js的拖动相关

    拖动相关的事件 dragstart: 被拖动元素 开始拖动 时触发的事件。 drag: 被拖动元素 拖动过程 触发...

  • js原生拖拽的2种实现

    (1)实现在规定区域内跟随鼠标移动(鼠标事件实现) (2)拖放效果(drag事件实现) dragenter和dra...

  • Drag Drop API 拖拽事件

    1.处理步骤 a.定义可拖动目标 b.定义被拖动的数据,可能为多种不同的格式 c.允许设置拖拽效果 d.定义放置区...

  • EventTrigger事件

    一、UI中的点击,拖拉,移入,移出事件。 二、Drag,Drope 拖拽类 IBeginDragHandler,I...

网友评论

      本文标题:drag事件

      本文链接:https://www.haomeiwen.com/subject/akygpqtx.html