前言

拖放(drap && drop)在我们平时的工作中,经常遇到。它表示:抓取对象以后拖放到另一个位置。目前,它是HTML5标准的一部分。我从几个方面学习并实践这个功能。

拖放的流程对应的事件

我们先看下拖放的流程:

  1. 选中 ---> 拖动 ---> 释放

然后,我们一步步看下这个过程中,会发生的事情。

选中

在HTML5标准中,为了使元素可拖动,把draggable属性设置为true。

文本、图片和链接是默认可以拖放的,它们的draggable属性自动被设置成了true。

图片和链接按住鼠标左键选中,就可以拖放。

文本只有在被选中的情况下才能拖放。如果显示设置文本的draggable属性为true,按住鼠标左键也可以直接拖放。

draggable属性:设置元素是否可拖动。

语法:<element draggable="true | false | auto" >

  • true: 可以拖动
  • false: 禁止拖动
  • auto: 跟随浏览器定义是否可以拖动

拖动

每一个可拖动的元素,在拖动过程中,都会经历三个过程,拖动开始-->拖动过程中--> 拖动结束

针对对象 事件名称 说明
被拖动的元素 dragstart 在元素开始被拖动时候触发
drag 在元素被拖动时反复触发
dragend 在拖动操作完成时触发
目的地对象 dragenter 当被拖动元素进入目的地元素所占据的屏幕空间时触发
dragover 当被拖动元素在目的地元素内时触发
dragleave 当被拖动元素没有放下就离开目的地元素时触发

dragenter和dragover事件的默认行为是拒绝接受任何被拖放的元素。因此,我们必须阻止浏览器这种默认行为。e.preventDefault();

释放

到达目的地之后,释放元素事件

针对对象 事件名称 说明
目的地对象 drop 当被拖动元素在目的地元素里放下时触发,一般需要取消浏览器的默认行为。

选中拖动释放例子

  1. <!DOCTYPE HTML>
  2. <html>
  3. <head>
  4. <title>拖放示例-文本</title>
  5. </head>
  6. <style>
  7. .src {
  8. display: flex;
  9. }
  10. .dropabled {
  11. flex: 1;
  12. }
  13. .txt {
  14. color: green;
  15. }
  16. .img {
  17. width: 100px;
  18. height: 100px;
  19. border: 1px solid gray;
  20. }
  21. .target {
  22. width: 200px;
  23. height: 200px;
  24. line-height: 200px;
  25. text-align: center;
  26. border: 1px solid gray;
  27. color: red;
  28. }
  29. </style>
  30. <body>
  31. <div class="src">
  32. <div class="dragabled">
  33. <div class="txt" id="txt">
  34. 所有的文字都可拖拽。
  35. <p draggable="true">此段文字设置了属性draggable="true"</p>
  36. </div>
  37. <div class="url" id="url">
  38. <a href="http://weiqinl.com" target="_blank">我是url:http://weiqinl.com</a>
  39. </div>
  40. <img class="img" id="tupian1" src="img1.png" alt="图片1" />
  41. <img class="img" id="tupian2" src="img2.png" alt="图片2" />
  42. </div>
  43. <div id='target' class="dropabled target">Drop Here</div>
  44. </div>
  45. <script>
  46. var dragSrc = document.getElementById('txt')
  47. var target = document.getElementById('target')
  48. dragSrc.ondragstart = handle_start
  49. dragSrc.ondrag = handle_drag
  50. dragSrc.ondragend = handle_end
  51. function handle_start(e) {
  52. console.log('dragstart-在元素开始被拖动时候触发')
  53. }
  54. function handle_drag() {
  55. console.log('drag-在元素被拖动时候反复触发')
  56. }
  57. function handle_end() {
  58. console.log('dragend-在拖动操作完成时触发')
  59. }
  60. target.ondragenter = handle_enter
  61. target.ondragover = handle_over
  62. target.ondragleave = handle_leave
  63. target.ondrop = handle_drop
  64. function handle_enter(e) {
  65. console.log('handle_enter-当元素进入目的地时触发')
  66. // 阻止浏览器默认行为
  67. e.preventDefault()
  68. }
  69. function handle_over(e) {
  70. console.log('handle_over-当元素在目的地时触发')
  71. // 阻止浏览器默认行为
  72. e.preventDefault()
  73. }
  74. function handle_leave(e) {
  75. console.log('handle_leave-当元素离开目的地时触发')
  76. // 阻止浏览器默认行为
  77. // e.preventDefault()
  78. }
  79. function handle_drop(e) {
  80. console.log('handle_drop-当元素在目的地放下时触发')
  81. var t = Date.now()
  82. target.innerHTML = ''
  83. target.append(t + '-拖放触发的事件。')
  84. e.preventDefault()
  85. }
  86. </script>
  87. </body>
  88. </html>

drag-drop事件触发

在整个拖放过程中,我们以上说的是表面现象,事件过程内部还会发生什么事情呢?请看下面

HTML5原生拖拽/拖放⎡Drag & Drop⎦详解的更多相关文章

  1. HTML5原生拖拽/拖放(drag & drop)详解

    前言 拖放(drap && drop)在我们平时的工作中,经常遇到.它表示:抓取对象以后拖放到另一个位置.目前,它是HTML5标准的一部分.我从几个方面学习并实践这个功能. 拖放的流程 ...

  2. HTML5拖拽/拖放(drag & drop)详解

    H5中拖拽属性: draggable: auto | true | false   拖动事件:   - dragstart 在元素开始被拖动时触发 - dragend 在拖动操作完成时触发 - dra ...

  3. (原创)[C#] 一步一步自定义拖拽(Drag&Drop)时的鼠标效果:(一)基本原理及基本实现

    一.前言 拖拽(Drag&Drop),属于是极其常用的基础功能. 无论是在系统上.应用上.还是在网页上,拖拽随处可见.同时拖拽时的鼠标效果也很漂亮,像这样: 这样: 还有这样: 等等等等. 这 ...

  4. 原生拖拽,拖放事件(drag and drop)

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  5. HTML5原生拖拽事件的值传递(三dataTransfer对象)

    引用一篇博客,讲解的比较详细:http://www.tuicool.com/articles/j6Zbam

  6. HTML5实战与剖析之原生拖拽(四可拖动dragable属性和其他成员)

    可拖动dragable属性 之前我们已经为大家介绍过几篇有关HTML5中原生拖拽的相关知识了.今天为大家介绍HTML5拖拽中的其他一些小东东,闲话不多说赶快一起看看吧. 在默认情况下,链接.文本和图像 ...

  7. HTML5实战与剖析之原生拖拽(一拖拽历史概述)

    提起拖拽,我就想起了在JavaScript培训的时候一个非常好玩的效果,那就是拖拽了.可以用鼠标任意拖拽着一个物体到任何你想去的地方. 最早拥有JavaScript拖拽功能的是IE4浏览器.当时,网页 ...

  8. html5的拖拽dragAPI(如果看了API不懂,看看那三个案例就会恍然大悟)

    1.拖拽和释放定义: 拖拽:Drag; 释放:Drop; 2.源对象和目标对象: 3.相关API: ondragstart:源对象开始被拖动 ondrag:源对象被拖动的过程中 ondragend:源 ...

  9. 关于HTML5的拖拽

    不介绍具体情况,先看API,注意看后面括号的说明 dragstart:拖拽开始(应用于被拖拽对象) drag:拖拽中(应用于被拖拽对象) dragenter:拖拽到指定位置(应用于拖拽目标) drag ...

随机推荐

  1. 使用Canvas制作时钟动画

    复习Javascript到Canvas的知识点,看到一个使用Canvas绘制的静态时钟例子,便想将其变成动态显示系统时间的时钟动画.另外再配上数字显示的时钟,一个小的时钟模块的诞生了!目前的界面还比较 ...

  2. Echarts数据可视化series-effectscatter特效散点图,开发全解+完美注释

    全栈工程师开发手册 (作者:栾鹏) Echarts数据可视化开发代码注释全解 Echarts数据可视化开发参数配置全解 6大公共组件详解(点击进入): title详解. tooltip详解.toolb ...

  3. SQLyog快捷键汇总

    Ctrl+M   创建一个新的连接Ctrl+N   使用当前设置新建连接Ctrl+F4   断开当前连接 对象浏览器 F5   刷新对象浏览器(默认)Ctrl+B   设置焦点于对象浏览器 SQL 窗 ...

  4. sa账户和密码丢失如何找回

    来自:http://www.cnblogs.com/xred/archive/2012/03/09/2386185.html 在网上看了很多如何修改SQLServer2005的密码的方法.大多数都是转 ...

  5. 迭代法与开根号求值(letcode 69)

    p { margin-bottom: 0.25cm; line-height: 120% } 一.理论证明 p { margin-bottom: 0.25cm; line-height: 120% } ...

  6. 新型勒索软件Magniber正瞄准韩国、亚太地区开展攻击

    近期,有国外研究人员发现了一种新型的勒索软件,并将其命名为Magniber,值得注意的是,这款勒索软只针对韩国及亚太地区的用户开展攻击.该勒索软件是基于Magnitude exploit kit(简称 ...

  7. 关于keyTyped

    蠢了,重写keyTyped方法时候拿keyCode去做比较....记一下....VK_UNDEFiEND.......

  8. 【ASP.NET MVC 学习笔记】- 11 Controller和Action(2)

    本文参考:http://www.cnblogs.com/willick/p/3331513.html 1.MVC一个请求的发出至action返回结果的流程图如下: 重点是Controller Fact ...

  9. Mybatis基本用法--中

    Mybatis基本用法--中 第四部分 动态 SQL 动态 SQL 元素和使用 JSTL 或其他类似基于 XML 的文本处理器相似.MyBatis 采用功能强大的基于 OGNL 的表达式来消除其他元素 ...

  10. LeetCode 110. Balanced Binary Tree (平衡二叉树)

    Given a binary tree, determine if it is height-balanced. For this problem, a height-balanced binary ...