美文网首页
2019-07-06

2019-07-06

作者: 豆豆_06fa | 来源:发表于2019-07-06 22:12 被阅读0次

    拖放(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>

    相关文章

      网友评论

          本文标题:2019-07-06

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