DragList.vue 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  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. </section>
  21. </template>
  22. <script>
  23. export default {
  24. data() {
  25. return {
  26. dragElement: null,
  27. lock: true,
  28. data1: [
  29. {id: 1, title: '这里是列表1的标题'},
  30. {id: 2, title: '这里是列表2的标题'},
  31. {id: 3, title: '这里是列表3的标题'},
  32. {id: 4, title: '这里是列表4的标题'},
  33. {id: 5, title: '这里是列表5的标题'},
  34. {id: 6, title: '这里是列表6的标题'},
  35. {id: 7, title: '这里是列表7的标题'}
  36. ],
  37. data2: [
  38. {id: 1, title: '这里是列表11的标题'},
  39. {id: 2, title: '这里是列表12的标题'},
  40. {id: 3, title: '这里是列表13的标题'},
  41. {id: 4, title: '这里是列表14的标题'}
  42. ]
  43. }
  44. },
  45. methods: {
  46. dragstartEvent(ev) {
  47. const self = this;
  48. self.dragElement = ev.target;
  49. ev.target.style.backgroundColor = '#f8f8f8';
  50. },
  51. dragendEvent(ev) {
  52. ev.target.style.backgroundColor = '#fff';
  53. ev.preventDefault();
  54. },
  55. dragenterEvent(ev) {
  56. const self = this;
  57. if(self.dragElement != ev.target){
  58. ev.target.parentNode.insertBefore(self.dragElement, ev.target);
  59. }
  60. },
  61. dragleaveEvent(ev) {
  62. const self = this;
  63. if(self.dragElement != ev.target){
  64. if(self.lock && (ev.target == ev.target.parentNode.lastElementChild || ev.target == ev.target.parentNode.lastChild)){
  65. ev.target.parentNode.appendChild(self.dragElement);
  66. self.lock = false;
  67. }else{
  68. self.lock = true;
  69. }
  70. }
  71. },
  72. dragoverEvent(ev) {
  73. ev.preventDefault();
  74. }
  75. }
  76. }
  77. </script>
  78. <style scoped>
  79. .drag-box-left{
  80. float: left;
  81. width: 45%;
  82. }
  83. .drag-box-right{
  84. float: right;
  85. width: 45%;
  86. }
  87. .drag-list{
  88. border: 1px solid #ddd;
  89. padding:10px;
  90. margin-bottom: 20px;
  91. transition: border .3s;
  92. }
  93. .drag-list:hover{
  94. border: 1px solid #20a0ff;
  95. }
  96. .drag-title{
  97. font-weight: 400;
  98. line-height: 25px;
  99. margin: 10px 0;
  100. font-size: 22px;
  101. color: #1f2f3d;
  102. }
  103. </style>