当前位置:   article > 正文

简单讲述ondragstart、drag、ondragend、ondragenter、ondragover、ondrop、ondragleave七个与拖拽相关的监听事件,并运用实现拖拽过程放置样式变化

简单讲述ondragstart、drag、ondragend、ondragenter、ondragover、ondrop、ondragleave七个与拖拽相关的监听事件,并运用实现拖拽过程放置样式变化

 

事件描述监听对象
ondragstart该事件在用户开始拖动元素时触发被拖拽物体
drag该事件在元素正在拖动时触发被拖拽物体
ondragend该事件在用户完成元素的拖动时触发被拖拽物体
ondragenter该事件在拖动的元素进入放置目标时触发放入的区域
ondragover该事件在拖动元素在放置目标上时触发放入的区域
ondrop该事件在拖动元素放置在目标区域时触发放入的区域
ondragleave该事件在拖动元素离开放置目标时触发放入的区域
  1. <template>
  2. <div :class="$options.name">
  3. <div class="drag" draggable @dragstart="dragstart" @drag="drag" @dragend="dragend" >被拖拽物体</div>
  4. <div class="drop" @dragover="$event.preventDefault()" @dragenter="dragenter" @drop="drop" @dragleave="dragleave" >放入的位置1</div>
  5. <div class="drop" @dragover="$event.preventDefault()" @dragenter="dragenter" @drop="drop" @dragleave="dragleave" >放入的位置2</div>
  6. </div>
  7. </template>
  8. <script>
  9. export default {
  10. name: "testDrag",
  11. methods: {
  12. // 被拖拽物体的监听事件----------------------------------------
  13. dragstart(e) {
  14. let 需要传输的内容 = {
  15. cssText: `background-color: #F56C6C;color: white;font-size: 24px;`,
  16. text: `物体被放进来了`,
  17. };
  18. e.dataTransfer.setData("自定义字段名", JSON.stringify(需要传输的内容));
  19. },
  20. drag(e) {
  21. e.currentTarget.setAttribute("drag", true);
  22. },
  23. dragend(e) {
  24. e.currentTarget.removeAttribute("drag");
  25. },
  26. // 放置区域的监听事件----------------------------------------
  27. dragenter(e) {
  28. e.currentTarget.setAttribute("dragenter", true);
  29. },
  30. drop(e) {
  31. e.currentTarget.removeAttribute("dragenter");
  32. let 需要传输的内容 = JSON.parse(e.dataTransfer.getData("自定义字段名"));
  33. e.currentTarget.style.cssText = 需要传输的内容.cssText;
  34. e.currentTarget.innerHTML = 需要传输的内容.text;
  35. },
  36. dragleave(e) {
  37. e.currentTarget.removeAttribute("dragenter");
  38. },
  39. },
  40. };
  41. </script>
  42. <style lang="scss" scoped>
  43. .testDrag {
  44. .drag {
  45. width: 100px;
  46. height: 100px;
  47. box-sizing: border-box;
  48. border: 1px solid #eee;
  49. display: flex;
  50. justify-content: center;
  51. align-items: center;
  52. position: relative;
  53. &[drag] {
  54. color: #f56c6c;
  55. border-color: #f56c6c;
  56. &::after {
  57. content: "拖拽中";
  58. position: absolute;
  59. right: 0;
  60. top: 0;
  61. background-color: #f56c6c;
  62. color: white;
  63. font-size: 14px;
  64. }
  65. }
  66. }
  67. .drop {
  68. margin-top: 20px;
  69. width: 200px;
  70. height: 200px;
  71. box-sizing: border-box;
  72. border: 1px solid #eee;
  73. display: flex;
  74. justify-content: center;
  75. align-items: center;
  76. flex-direction: column;
  77. position: relative;
  78. &[dragenter] {
  79. color: #f56c6c;
  80. border-color: #f56c6c;
  81. &::after {
  82. content: "物体进入区域";
  83. position: absolute;
  84. right: 0;
  85. top: 0;
  86. background-color: #f56c6c;
  87. color: white;
  88. font-size: 14px;
  89. }
  90. }
  91. }
  92. }
  93. </style>

基于下面的例子一个简单的Vue2例子讲明白拖拽drag、移入dragover、放下drop的触发机制先后顺序-CSDN博客文章浏览阅读81次。【代码】一个简单的Vue2例子讲明白拖拽drag、移入dragover、放下drop的触发机制先后顺序。https://blog.csdn.net/qq_37860634/article/details/136783097

进阶的玩法

用dragstart、drag、dragend、dragover、drop、dragleave实现针对表格列的顺序进行拖拽排序(附带实现选择某几列数据显示或隐藏)-CSDN博客将数组指定索引位置的元素 移动到 目标索引位置,且不改变其他元素原本的顺序,注意这个不是对调元素位置,是移动某一个元素位置不影响其他元素顺(使用场景:拖拽改变数据的顺序,点击上下左右箭头移动元素顺序)-CSDN博客。【代码】将数组指定索引位置的元素 移动到 目标索引位置(使用场景:拖拽改变数据的顺序,点击上下左右箭头移动元素顺序)https://blog.csdn.net/qq_37860634/article/details/136788464

用第三方插件实现表格的行拖拽排序基于sortablejs实现拖拽element-ui el-table表格行进行排序-CSDN博客【代码】基于sortablejs实现拖拽element-ui el-table表格行进行排序。https://blog.csdn.net/qq_37860634/article/details/136791080

本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号