zoukankan      html  css  js  c++  java
  • html5如何实现元素拖放

    html5如何实现元素拖放

    一、总结

    一句话总结:参考文档里面有各种想象不到的好东西。一边允许拖放,一边接收拖放,一边传递数据,一边接收数据。拖放过程还要防止拖放以默认方式(链接)打开。

    1、html5如何实现元素拖放?

    一边允许拖放,一边接收拖放,一边传递数据,一边接收数据。拖放过程还要防止拖放以默认方式(链接)打开。

    2、html5中拖放中如何实现允许拖放?

    draggable="true"
    32 <img id="drag1" src="/i/eg_dragdrop_w3school.gif" draggable="true" ondragstart="drag(event)" />

    3、html5中拖放中如何实现接收拖放?

    ondragover="allowDrop(event)"
    30 <div id="div1" ondrop="drop(event)" ondragover="allowDrop(event)"></div>
     8 function allowDrop(ev)
     9 {
    10 ev.preventDefault();
    11 }

    4、html5中拖放中如何实现传递数据?

    ondragstart="drag(event)"
    32 <img id="drag1" src="/i/eg_dragdrop_w3school.gif" draggable="true" ondragstart="drag(event)" />
    13 function drag(ev)
    14 {
    15 ev.dataTransfer.setData("Text",ev.target.id);
    16 }

    5、html5中拖放中如何实现接收数据?

    ondrop="drop(event)"
    30 <div id="div1" ondrop="drop(event)" ondragover="allowDrop(event)"></div>
    18 function drop(ev)
    19 {
    20 ev.preventDefault();
    21 var data=ev.dataTransfer.getData("Text");
    22 ev.target.appendChild(document.getElementById(data));
    23 }

    6、html5中拖放中如何实现拖放过程防止拖放以默认方式(链接)打开?

    ev.preventDefault();
     8 function allowDrop(ev)
     9 {
    10 ev.preventDefault();
    11 }
    18 function drop(ev)
    19 {
    20 ev.preventDefault();
    21 var data=ev.dataTransfer.getData("Text");
    22 ev.target.appendChild(document.getElementById(data));
    23 }

    二、html5如何实现元素拖放

    1、示例代码

     1 <!DOCTYPE HTML>
     2 <html>
     3 <head>
     4 <style type="text/css">
     5 #div1 {width:198px; height:66px;padding:10px;border:1px solid #aaaaaa;}
     6 </style>
     7 <script type="text/javascript">
     8 function allowDrop(ev)
     9 {
    10 ev.preventDefault();
    11 }
    12 
    13 function drag(ev)
    14 {
    15 ev.dataTransfer.setData("Text",ev.target.id);
    16 }
    17 
    18 function drop(ev)
    19 {
    20 ev.preventDefault();
    21 var data=ev.dataTransfer.getData("Text");
    22 ev.target.appendChild(document.getElementById(data));
    23 }
    24 </script>
    25 </head>
    26 <body>
    27 
    28 <p>请把 W3School 的图片拖放到矩形中:</p>
    29 
    30 <div id="div1" ondrop="drop(event)" ondragover="allowDrop(event)"></div>
    31 <br />
    32 <img id="drag1" src="/i/eg_dragdrop_w3school.gif" draggable="true" ondragstart="drag(event)" />
    33 
    34 </body>
    35 </html>

    截图:

    2、HTML 5 拖放

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

    拖放

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

    在 HTML5 中,拖放是标准的一部分,任何元素都能够拖放。

    浏览器支持

    Internet Explorer 9、Firefox、Opera 12、Chrome 以及 Safari 5 支持拖放。

    注释:在 Safari 5.1.2 中不支持拖放。

    HTML5 拖放实例

    下面的例子是一个简单的拖放实例:

    实例

    <!DOCTYPE HTML>
    <html>
    <head>
    <script type="text/javascript">
    function allowDrop(ev)
    {
    ev.preventDefault();
    }
    
    function drag(ev)
    {
    ev.dataTransfer.setData("Text",ev.target.id);
    }
    
    function drop(ev)
    {
    ev.preventDefault();
    var data=ev.dataTransfer.getData("Text");
    ev.target.appendChild(document.getElementById(data));
    }
    </script>
    </head>
    <body>
    
    <div id="div1" ondrop="drop(event)"
    ondragover="allowDrop(event)"></div>
    <img id="drag1" src="img_logo.gif" draggable="true"
    ondragstart="drag(event)" width="336" height="69" />
    
    </body>
    </html>
    

    亲自试一试

    它看上去也许有些复杂,不过我们可以分别研究拖放事件的不同部分。

    设置元素为可拖放

    首先,为了使元素可拖动,把 draggable 属性设置为 true :

    <img draggable="true" />

    拖动什么 - ondragstart 和 setData()

    然后,规定当元素被拖动时,会发生什么。

    在上面的例子中,ondragstart 属性调用了一个函数,drag(event),它规定了被拖动的数据。

    dataTransfer.setData() 方法设置被拖数据的数据类型和值:

    function drag(ev)
    {
    ev.dataTransfer.setData("Text",ev.target.id);
    }
    

    在这个例子中,数据类型是 "Text",值是可拖动元素的 id ("drag1")。

    放到何处 - ondragover

    ondragover 事件规定在何处放置被拖动的数据。

    默认地,无法将数据/元素放置到其他元素中。如果需要设置允许放置,我们必须阻止对元素的默认处理方式。

    这要通过调用 ondragover 事件的 event.preventDefault() 方法:

    event.preventDefault()

    进行放置 - ondrop

    当放置被拖数据时,会发生 drop 事件。

    在上面的例子中,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 ("drag1")
    • 把被拖元素追加到放置元素(目标元素)中

    更多实例

    来回拖放图片
    如何在两个 <div> 元素之间拖放图像。
     
  • 相关阅读:
    linux 短信收发
    sama5d3 环境检测 adc测试
    【Codeforces 723C】Polycarp at the Radio 贪心
    【Codeforces 723B】Text Document Analysis 模拟
    【USACO 2.2】Preface Numbering (找规律)
    【Codeforces 722C】Destroying Array (数据结构、set)
    【USACO 2.1】Hamming Codes
    【USACO 2.1】Healthy Holsteins
    【USACO 2.1】Sorting A Three-Valued Sequence
    【USACO 2.1】Ordered Fractions
  • 原文地址:https://www.cnblogs.com/Renyi-Fan/p/9222994.html
Copyright © 2011-2022 走看看