HTML5 --拖放


拖放(Drag 和 drop)是 HTML5 标准的组成部分。

1、拖放

拖放是一种常见的特性,即抓取对象以后拖到另一个位置。

2、浏览器支持

IE9、Firefox、Opera 12、Chrome 以及 Safari 5 支持拖放。

3、可拖放属性draggable

把 draggable 属性设置为 true,就使元素变成了可拖放的。默认情况下,图像、链接、文本是可以拖动的,文本只有在被选中的情况下才能拖动,而图像和链接在任何时候都可以拖动

  <div id="box1" draggable="true"></div>
4、事件对象dataTransfer

dataTransfer对象主要有两个方法:setData() 和 getData(),getData()可以取得由setData()保存的值。
设置文本数据

    div.ondragstart = function(e){
        e.dataTransfer.setData("Text",e.target.id);
    }

接收文本数据

  boxDiv.ondrop = function(e){
      var data = e.dataTransfer.getData('Text');
      e.target.appendChild(document.getElementById(data));
    }
5、拖放事件
  1. 拖动某元素时,将依次触发下列事件:
  • (1)dragstart:按下鼠标并开始移动时,会在被拖放的元素上触发dragstart事件
  • (2)drag:触发dragstart事件后,随即就会触发drag事件,元素被拖动期间会持续触发该事件
  • (3)dragend:当拖动停止时(无论是把该元素放到了有效的放置目标上还是放到了无效的放置目标上),会触发dragend事件
  1. 当某个元素被拖动到一个有效的放置目标上时,下列事件会依次触发:
  • (1)dragenter:只要有拖动元素被拖动到放置目标上,就会触发dragenter事件
  • (2)dragover:在被拖动元素爱放置目标的范围内移动时,就会持续触发改事件
  • (3)dragleave 或drop:当被拖动元素拖出了放置目标,将触发dragleave事件,如果元素被放到了放置目标中,则会触发drop,而不会触发dragleave事件。

默认地,无法将数据/元素放置到其他元素中。如果需要设置允许放置,我们必须阻止对元素的默认处理方式。这要通过调用 ondragover 事件的 event.preventDefault() 方法:

    boxDiv.ondragover = function(e){
      e.preventDefault();
    }

例子:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
  <style>
    body{
      margin: 0;
    }
    .myDiv1{
      float: left;
      width: 100px;
      height: 100px;
      background-color: blue;
      margin: 0;
    }
    .box{
      float: left;
      width: 100px;
      height: 100px;
      border: 1px solid black;
    }
  </style>
</head>
<body>
    <div draggable="true" class="myDiv1" id="myDiv"></div>
    <div class="box"></div>
  <script>
    var div = document.getElementById('myDiv');
    var boxDiv = document.getElementsByClassName('box')[0];
    div.ondragstart = function(e){
      // 设置数据
        e.dataTransfer.setData("Text",e.target.id);
    }
    boxDiv.ondragover = function(e){
      e.preventDefault();
    }
    boxDiv.ondrop = function(e){
      // 获取数据
      var data = e.dataTransfer.getData('Text');
      e.target.appendChild(document.getElementById(data));
    }
  </script>
</body>
</html>

在这里插入图片描述
在这里插入图片描述
也可以定义一个dragDom将被拖放元素保存下来

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
  <style>
    #box1,#box2{
      width: 100px;
      float: left;
      height: 100px;
      border: 1px solid black;
    }
    #box1{
      background-color: aqua;
      margin-right: 10px;
    }
  </style>
</head>
<body>
  <div id="box1" draggable="true"></div>
  <div id="box2"></div>
  <script>
    let box1 = document.getElementById('box1');
    let box2 = document.getElementById('box2');
    let dragDom;
    box1.ondrag = function(e){
      dragDom = e.target;
    }
    box2.ondragover = function(e){
      e.preventDefault();
    }
    box2.ondrop = function(e){
      box2.appendChild(dragDom); 
    }
  </script>
</body>
</html>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值