DragList.vue 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. <template>
  2. <section class="main">
  3. <div class="crumbs">
  4. <el-breadcrumb separator="/">
  5. <el-breadcrumb-item><i class="el-icon-upload2"></i> 拖拽排序</el-breadcrumb-item>
  6. </el-breadcrumb>
  7. </div>
  8. <div class="drag-box-left">
  9. <div class="drag-title">未完成</div>
  10. <div class="drag-list" draggable="true"
  11. v-for="list in data1"
  12. :data-id="list.id"
  13. @dragstart="dragstartEvent"
  14. @dragend="dragendEvent"
  15. @dragenter="dragenterEvent"
  16. @dragleave="dragleaveEvent"
  17. @dragover="dragoverEvent"
  18. >{{list.title}}</div>
  19. </div>
  20. <div class="drag-box-right">
  21. <div class="drag-title">已完成</div>
  22. <div class="drag-list" draggable="true"
  23. v-for="list in data2"
  24. :data-id="list.id"
  25. @dragstart="dragstartEvent"
  26. @dragend="dragendEvent"
  27. @dragenter="dragenterEvent"
  28. @dragleave="dragleaveEvent"
  29. @dragover="dragoverEvent"
  30. >{{list.title}}</div>
  31. </div>
  32. </section>
  33. </template>
  34. <script>
  35. export default {
  36. data() {
  37. return {
  38. dragElement: null,
  39. lock: true,
  40. data1: [
  41. {id: 1, title: '这里是列表1的标题'},
  42. {id: 2, title: '这里是列表2的标题'},
  43. {id: 3, title: '这里是列表3的标题'},
  44. {id: 4, title: '这里是列表4的标题'},
  45. {id: 5, title: '这里是列表5的标题'},
  46. {id: 6, title: '这里是列表6的标题'},
  47. {id: 7, title: '这里是列表7的标题'}
  48. ],
  49. data2: [
  50. {id: 1, title: '这里是列表11的标题'},
  51. {id: 2, title: '这里是列表12的标题'},
  52. {id: 3, title: '这里是列表13的标题'},
  53. {id: 4, title: '这里是列表14的标题'}
  54. ]
  55. }
  56. },
  57. methods: {
  58. dragstartEvent(ev) {
  59. const self = this;
  60. self.dragElement = ev.target;
  61. ev.target.style.backgroundColor = '#f8f8f8';
  62. },
  63. dragendEvent(ev) {
  64. ev.target.style.backgroundColor = '#fff';
  65. ev.preventDefault();
  66. },
  67. dragenterEvent(ev) {
  68. const self = this;
  69. if(self.dragElement != ev.target){
  70. ev.target.parentNode.insertBefore(self.dragElement, ev.target);
  71. }
  72. },
  73. dragleaveEvent(ev) {
  74. const self = this;
  75. if(self.dragElement != ev.target){
  76. if(self.lock && (ev.target == ev.target.parentNode.lastElementChild || ev.target == ev.target.parentNode.lastChild)){
  77. ev.target.parentNode.appendChild(self.dragElement);
  78. self.lock = false;
  79. }else{
  80. self.lock = true;
  81. }
  82. }
  83. },
  84. dragoverEvent(ev) {
  85. ev.preventDefault();
  86. }
  87. }
  88. }
  89. </script>
  90. <style scoped>
  91. .drag-box-left{
  92. float: left;
  93. width: 45%;
  94. }
  95. .drag-box-right{
  96. float: right;
  97. width: 45%;
  98. }
  99. .drag-list{
  100. border: 1px solid #ddd;
  101. padding:20px;
  102. margin-bottom: 20px;
  103. transition: border .3s;
  104. }
  105. .drag-list:hover{
  106. border: 1px solid #20a0ff;
  107. }
  108. .drag-title{
  109. font-weight: 400;
  110. line-height: 50px;
  111. margin: 10px 0;
  112. font-size: 22px;
  113. color: #1f2f3d;
  114. }
  115. </style>