zoukankan      html  css  js  c++  java
  • HTML5拖放

      拖放(drag和drop)是html5标准组成,下面我们从五个方面对其进行叙述,分别是如何成为拖动物体,如何成为拖动目标,拖动物体上拥有的事件,拖动目标上拥有的事件以及拖放物体间如何传递信息。

    拖动物体上拥有的事件

    1. dragstart (在物体刚被拖动时触发)
    2. drag (在dragstart事件触发之后就被触发)
    3. dragend (拖动事件结束时触发)

    拖动目标上拥有的事件

    1. dragenter (当拖拽元素进入放置目标时触发)
    2. dragover (当拖拽元素在放置目标中移动时触发,类似于mouseover)
    3. drop (当拖拽元素放置在放置目标中时触发)

    如何成为拖动物体

    在html中img元素默认可以进行拖拽,其它元素需要设置draggable=true,即可对其进行拖拽。

     1 <div draggable="true"></div>

    如何成为拖动目标

    html中,元素默认不能成为放置目标,只有我们禁止了drapenter和drapover事件的默认行为时,可以称为拖放目标。

    1 droptarget.addEventListener('dragenter', function(event) {
    2     event.preventDefault();
    3 });
    4 droptarget.addEventListener('dragover', function(event) {
    5     event.preventDefault();
    6 });

    拖放物体间如何传递信息

    事件中具有一个dataTransfer对象,它拥有的两个常用方法setData()和getData(),分别用于在存放拖拽信息以及获取拖拽信息。其中,setData()只能在拖拽事件刚开始时设置,即dragstart事件时设置,getData()则一般在放置获取,即drop事件触发时获取。

     1 // drapobj 拖拽元素
     2 // droptarget 放置目标
     3 dragobj.addEventListener('dragstart', function(event) {
     4     event.dataTransfer.setData('id', dragobj.id);
     5 });
     6 droptarget.addEventListener('drop', function(event) {
     7     var id = event.dataTransfer.getData('id');
     8     var obj = document.getElementById(id);
     9     event.preventDefault();
    10     this.appendChild(obj);
    11 });

     完整代码

     1 <!DOCTYPE html>
     2 <html lang="en">
     3 
     4 <head>
     5     <meta charset="UTF-8">
     6     <title>HTML5 拖拽</title>
     7 </head>
     8 
     9 <body>
    10     <div draggable="true"></div>
    11     <div style="height: 150px" id="dragobj" draggable="true">
    12         <img src="c_06.jpg" alt="">
    13     </div>
    14     <div id="droptarget" style=" 150px; height: 150px;background-color: #eee;"></div>
    15 </body>
    16 <script>
    17 var droptarget = document.getElementById('droptarget');
    18 var dragobj = document.getElementById('dragobj');
    19 
    20 // drapobj 拖拽元素
    21 // droptarget 放置目标
    22 dragobj.addEventListener('dragstart', function(event) {
    23     event.dataTransfer.setData('id', dragobj.id);
    24 });
    25 droptarget.addEventListener('dragenter', function(event) {
    26     event.preventDefault();
    27 });
    28 droptarget.addEventListener('dragover', function(event) {
    29     event.preventDefault();
    30 });
    31 droptarget.addEventListener('drop', function(event) {
    32     var id = event.dataTransfer.getData('id');
    33     var obj = document.getElementById(id);
    34     event.preventDefault();
    35     this.appendChild(obj);
    36 });
    37 </script>
    38 
    39 </html>
    View Code

    存在问题

    火狐浏览器中拖拽图片默认打开新窗口,根据javascript高级程序设计中在drop事件中禁止默认事件,未解决问题。

    解决方法:将图片作为div的背景图片,将div作为拖拽物体,则不存在此问题。

    最终代码

     1 <!DOCTYPE html>
     2 <html lang="en">
     3 
     4 <head>
     5     <meta charset="UTF-8">
     6     <title>HTML5 拖拽</title>
     7     <style>
     8     div {
     9         width: 120px;
    10         height: 136px;
    11     }
    12     
    13     #dragobj {
    14         background: url('c_06.jpg') no-repeat;
    15     }
    16     
    17     #droptarget {
    18         background-color: #eee;
    19     }
    20     </style>
    21 </head>
    22 
    23 <body>
    24     <div id="dragobj" draggable="true">
    25     </div>
    26     <div id="droptarget"></div>
    27 </body>
    28 <script>
    29 var droptarget = document.getElementById('droptarget');
    30 var dragobj = document.getElementById('dragobj');
    31 
    32 // drapobj 拖拽元素
    33 // droptarget 放置目标
    34 dragobj.addEventListener('dragstart', function(event) {
    35     event.dataTransfer.setData('id', dragobj.id);
    36 });
    37 droptarget.addEventListener('dragenter', function(event) {
    38     event.preventDefault();
    39 });
    40 droptarget.addEventListener('dragover', function(event) {
    41     event.preventDefault();
    42 });
    43 droptarget.addEventListener('drop', function(event) {
    44     var id = event.dataTransfer.getData('id');
    45     var obj = document.getElementById(id);
    46     event.preventDefault();
    47     this.appendChild(obj);
    48 });
    49 </script>
    50 
    51 </html>
    View Code
  • 相关阅读:
    VB6:从Comctl.dll中加载TREEVIEW并美化OCX版本(修正)
    一个围猫的小游戏
    从RES文件中直接加载JPG的函数
    Vistaform Control v1.40正式发布(下载)
    比CopyMemory还要快的函数SuperCopyMemory
    VB开发日志:做按钮时顺便做的颜色调整工具
    魔兽按键精灵 V2.0(修正1)
    魔兽按键精灵准备开发3.0版本
    VB高级编程之:完全子类化模仿OFFICE2007按钮
    VB:我的进度条Diy
  • 原文地址:https://www.cnblogs.com/diligentYe/p/6399589.html
Copyright © 2011-2022 走看看