html5拖拽上手

注意:
Internet Explorer 9、Firefox、Opera 12、Chrome 以及 Safari 5 支持拖放。
注释:在 Safari 5.1.2 中不支持拖放。

设置拖拽元素

draggable属性是用于是否把元素设置为拖拽元素

<p id="one" draggable="true">这是一个可以拖拽的p标签</p>

拖拽事件

  • ondragstart
    • 当鼠标开始拖拽被拖拽元素时触发
  • ondragend
    • 鼠标在拖放被拖拽元素时触发
  • ondrag
    • 当鼠标拖动被拖拽元素时一直触发
  • ondragleave
    • 拖拽时鼠标移出目标元素时在目标元素上触发
  • ondragover
    • 拖拽被拖拽元素时鼠标在目标元素上移动时触发.监听器通过阻止浏览器默认行为设置元素为可拖放元素
  • ondragenter
    • 当拖拽被拖拽元素时鼠标进入目标元素上时触发
  • ondrop
    • 在目标元素释放被拖拽元素时触发

函数event对象属性

  • ev.target
    • 取的时被拖拽元素的DOM对象
  • ev.dataTransfer
    • 可以用来保存被拖动的数据
    • 注意:在ondrop可以获取数据,但在其它的事件(如ondragover、ondragleave等),是无法获取dataTransfer里面的值了。这是由于W3C要求对dataTransfer里的值进行保护。

案例(此处没有封装,所有很多冗余代码):

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        #main {
            width: 300px;
            height: 200px;
            border: 1px solid #000000;
        }

        #targetDiv {
            width: 300px;
            height: 200px;
            border: 1px solid #000;
            margin-top: 30px;
        }
    </style>
</head>
<body>
<div id="main">
    <p id="one" draggable="true">这是一个可以拖拽的p标签</p>
    <p id="two" draggable="true">这也是一个可以拖拽的p标签</p>
</div>
<div id="targetDiv">

</div>

<script>
    // 当鼠标开始拖拽被拖拽元素时触发
    document.getElementById("main").ondragstart = function (ev) {
        // ev.target 获取的时被拖拽元素的DOM对象
        ev.target.style.opacity = '0';
        // dataTransfer对象可以用来保存被拖动的数据,保存方式为键值对
        ev.dataTransfer.setData('domID', ev.target.id);
    }

    document.getElementById('main').ondragend = function (ev) {
        // 鼠标在拖放被拖拽元素时触发
        ev.target.style.opacity = '1';

    }

    // 当鼠标拖动被拖拽元素时一直触发
    document.getElementById('main').ondrag = function (ev) {

    }

    // 拖拽时鼠标移出目标元素时在目标元素上触发
    document.getElementById('main').ondragleave = function (ev) {

    }

    // 拖拽时鼠标移出目标元素时在目标元素上触发
    document.getElementById('main').ondragover = function (ev) {
        ev.preventDefault();
    }


    document.getElementById('main').ondrop = function (ev) {
        let domID = ev.dataTransfer.getData('domID');
        this.appendChild(document.getElementById(domID));
    }

    // 当鼠标开始拖拽被拖拽元素时触发
    document.getElementById("targetDiv").ondragstart = function (ev) {
        // ev.target 获取的时被拖拽元素的DOM对象
        ev.target.style.opacity = '0';
        // dataTransfer对象可以用来保存被拖动的数据
        ev.dataTransfer.setData('domID', ev.target.id);
    }

    // 拖拽被拖拽元素时鼠标在目标元素上移动时触发.监听器通过阻止浏览器默认行为设置元素为可拖放元素.
    document.getElementById('targetDiv').ondragover = function (ev) {
        ev.preventDefault();
    }

    // 当拖拽被拖拽元素时鼠标进入目标元素上时触发
    document.getElementById('targetDiv').ondragenter = function (ev) {

    }

    // 在目标元素释放被拖拽元素时触发
    document.getElementById('targetDiv').ondrop = function (ev) {
    	// 从ev.dataTransfer中获取数据
        let domID = ev.dataTransfer.getData('domID');
        this.appendChild(document.getElementById(domID));
    }

    // 在目标元素释放被拖拽元素时触发
    document.getElementById('targetDiv').ondragleave = function (ev) {

    }

    document.getElementById('targetDiv').ondragend = function (ev) {
        ev.target.style.opacity = '1';
    }
</script>
</body>
</html>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值