简单自学web前端——H5 拖放

H5新特性——拖放

  拖放(Drag和drop)是 HTML5 标准的组成部分,拖放是一种常见的特性,即抓取对象以后拖到另一个位置。在 HTML5 中,拖放是标准的一部分,任何元素都能够拖放,非常的好用和重要的,接下来我就简单介绍一下。

拖放的过程:
    拖动开始——>拖动过程——>拖动结束
拖放用到的相关函数:
    被拖放的元素:
        (1)ondragstart:源对象开始被拖动
        (2)ondrag:源对象被拖动过程中(鼠标可能在移动也可能未移动)
        (3)ondragend:源对象被拖动结束 
    目的对象:
        (1)ondragenter:目标对象被源对象拖动着进入
        (2)ondragover:目标对象被源对象拖动着悬停在上方
        (3)ondragleave:源对象拖动着离开了目标对象
        (4)ondrop:源对象拖动着在目标对象上方释放/松手

拖放的简单步骤
1、设置元素为可拖放
    首先,为了使元素可拖动,把draggable属性设置为true。
2、设置被拖动的函数
    添加ondragstart事件,这个属性会调用了一个函数,drag(event),它规定了被拖动的数据。
    函数中的dataTransfer.setData()方法设置被拖数据的数据类型和值。
    例子:
    function drag(ev)
    { 
        ev.dataTransfer.setData("Text",ev.target.id);
    }
    传送数据的数据类型是 "Text",值是被拖动元素的id。
3、设置目的对象的函数
    (1)放到何处
        添加ondragover事件,这个属性规定在何处放置被拖动的数据。
        默认地,无法将数据/元素放置到其他元素中。
        这要通过调用ondragover事件的 event.preventDefault()方法: 
        function allowDrop(ev)
        {
            ev.preventDefault();
        }
    (2)进行放置
        添加ondrop事件,当放置被拖数据时,会发生ondrop事件。
        ondrop 属性调用了一个函数,drop(event):
        function drop(ev)
        {
            ev.preventDefault();
            var data=ev.dataTransfer.getData("Text");
            ev.target.appendChild(document.getElementById(data));
        }
        重点:
        调用preventDefault()来避免浏览器对数据的默认处理(drop事件的默认行为是以链接形式打开)。
        通过 dataTransfer.getData("Text") 方法获得被拖的数据。该方法将返回在 setData() 方法中设置为相同类型的任何数据。被拖数据是被拖元素的id。
        最后一行代码是把被拖元素追加到放置元素(目标元素)中。

自己写的一个菜谱菜单的简单的小例子,与大家分享下:

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>拖拽</title>
    <script type="text/javascript">
        function drag(ev)
        {
            ev.dataTransfer.setData("Text",ev.target.id);
        }
        function allowDrop(ev)
        {
            ev.preventDefault();
        }
        function drop(ev)
        {
            ev.preventDefault();
            var data=ev.dataTransfer.getData("Text");
            ev.target.appendChild(document.getElementById(data));
        }
    </script>
    <style type="text/css">
        body p{
            margin: 0px;
            padding: 0px;
            border:0px;
        }
        .caipu{
            width: 1000px;
            height: 500px;
            border: solid 1px blue;
            overflow:auto;
        }
        td{
            padding: 10px;
        }
        .caidan{
            width: 200px;
            height: 500px;
            border: solid 1px blue;
            margin-left: 50px;
            overflow:auto;
        }
        .caipu, .caidan{
            display: inline-block;
        }
    </style>
</head>
<body>
    <div class="div1"> 
        <h1>菜谱</h1>
        <div class="caipu">
            <table>
                <tr>
                    <td>
                        <div draggable="true" ondragstart="drag(event)" id="drag1" style="background-image: url(./img/food1.jpg); background-size: 150px 150px;background-repeat: no-repeat; width: 150px; height: 170px;">
                            <p style="padding-top: 150px;">炒土豆————10元</p>
                        </div>
                    </td>
                    <td>
                        <div draggable="true" ondragstart="drag(event)" id="drag2" style="background-image: url(./img/food2.jpg); background-size: 150px 150px;background-repeat: no-repeat; width: 150px; height: 170px;">
                            <p style="padding-top: 150px;">炒土豆————10元</p>
                        </div>
                    </td>
                    <td>
                        <div draggable="true" ondragstart="drag(event)" id="drag3" style="background-image: url(./img/food2.jpg); background-size: 150px 150px;background-repeat: no-repeat; width: 150px; height: 170px;">
                            <p style="padding-top: 150px;">炒土豆————10元</p>
                        </div>
                    </td>
                    <td>
                        <div draggable="true" ondragstart="drag(event)" id="drag4" style="background-image: url(./img/food3.jpg); background-size: 150px 150px;background-repeat: no-repeat; width: 150px; height: 170px;">
                            <p style="padding-top: 150px;">炒土豆————10元</p>
                        </div>
                    </td>
                    <td>
                        <div draggable="true" ondragstart="drag(event)" id="drag5" style="background-image: url(./img/food4.jpg); background-size: 150px 150px;background-repeat: no-repeat; width: 150px; height: 170px;">
                            <p style="padding-top: 150px;">炒土豆————10元</p>
                        </div>
                    </td>
                </tr>
            </table>
        </div>
    </div>
    <div class="div2">
        <h1>菜单</h1>
        <div class="caidan" ondrop="drop(event)" ondragover="allowDrop(event)">

        </div>
    </div>
</body>
</html>

结果截图:
可以将左边菜谱中的div 拖放到右边的菜单的div中。
这里写图片描述

希望对大家有用,如果有错误可以指出来,大家互相学习!

发布了8 篇原创文章 · 获赞 21 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/as740669149/article/details/81589521