|
9 | 9 | <div class="drag-box">
|
10 | 10 | <div class="drag-box-item">
|
11 | 11 | <div class="item-title">todo</div>
|
12 |
| - <ul id="todo" class="item-ul"> |
13 |
| - <li v-for="(item, index) in todo" :key="index" class="drag-list" :data-index="index"> |
14 |
| - {{ item.content }} |
15 |
| - </li> |
16 |
| - </ul> |
| 12 | + <draggable v-model="todo" @remove="removeHandle" :options="dragOptions"> |
| 13 | + <transition-group tag="div" id="todo" class="item-ul"> |
| 14 | + <div v-for="(item,index) in todo" class="drag-list" :key="index"> |
| 15 | + {{item.content}} |
| 16 | + </div> |
| 17 | + </transition-group> |
| 18 | + </draggable> |
17 | 19 | </div>
|
18 | 20 | <div class="drag-box-item">
|
19 | 21 | <div class="item-title">doing</div>
|
20 |
| - <ul id="doing" class="item-ul"> |
21 |
| - <li v-for="(item, index) in doing" :key="index" class="drag-list" :data-index="index"> |
22 |
| - {{ item.content }} |
23 |
| - </li> |
24 |
| - </ul> |
| 22 | + <draggable v-model="doing" @remove="removeHandle" :options="dragOptions"> |
| 23 | + <transition-group tag="div" id="doing" class="item-ul"> |
| 24 | + <div v-for="(item,index) in doing" class="drag-list" :key="index"> |
| 25 | + {{item.content}} |
| 26 | + </div> |
| 27 | + </transition-group> |
| 28 | + </draggable> |
25 | 29 | </div>
|
26 | 30 | <div class="drag-box-item">
|
27 | 31 | <div class="item-title">done</div>
|
28 |
| - <ul id="done" class="item-ul"> |
29 |
| - <li v-for="(item, index) in done" :key="index" class="drag-list" :data-index="index"> |
30 |
| - {{ item.content }} |
31 |
| - </li> |
32 |
| - </ul> |
| 32 | + <draggable v-model="done" @remove="removeHandle" :options="dragOptions"> |
| 33 | + <transition-group tag="div" id="done" class="item-ul"> |
| 34 | + <div v-for="(item,index) in done" class="drag-list" :key="index"> |
| 35 | + {{item.content}} |
| 36 | + </div> |
| 37 | + </transition-group> |
| 38 | + </draggable> |
33 | 39 | </div>
|
34 | 40 | </div>
|
35 | 41 | </div>
|
36 | 42 | </section>
|
37 | 43 | </template>
|
38 | 44 |
|
39 | 45 | <script>
|
40 |
| - import Sortable from 'sortablejs'; |
| 46 | + import draggable from 'vuedraggable' |
41 | 47 | export default {
|
42 | 48 | data() {
|
43 | 49 | return {
|
| 50 | + dragOptions:{ |
| 51 | + animation: 120, |
| 52 | + group: 'sortlist', |
| 53 | + ghostClass: 'ghost-style' |
| 54 | + }, |
44 | 55 | todo: [
|
45 | 56 | {
|
46 | 57 | content: '开发图表组件'
|
|
73 | 84 | {
|
74 | 85 | content: '开发项目整体框架'
|
75 | 86 | }
|
76 |
| - ], |
77 |
| - dragElement: null, |
78 |
| - lock: true, |
79 |
| -
|
| 87 | + ] |
80 | 88 | }
|
81 | 89 | },
|
| 90 | + components:{ |
| 91 | + draggable |
| 92 | + }, |
82 | 93 | methods: {
|
83 |
| - initSortable(id, vm){ |
84 |
| - let list = document.getElementById(id); |
85 |
| - Sortable.create(list, { |
86 |
| - group: { |
87 |
| - name: 'list', |
88 |
| - pull: true |
89 |
| - }, |
90 |
| - ghostClass: 'placeholder-style', |
91 |
| - animation: 120, |
92 |
| - scroll: true, |
93 |
| - onRemove(event) { |
94 |
| - let content; |
95 |
| - const idx = event.item.getAttribute('data-index'); |
96 |
| - if(event.from.id === 'todo'){ |
97 |
| - content = vm.todo[idx]; |
98 |
| - }else if(event.from.id === 'doing'){ |
99 |
| - content = vm.doing[idx]; |
100 |
| - }else if(event.from.id === 'done'){ |
101 |
| - content = vm.done[idx]; |
102 |
| - } |
103 |
| - if(event.to.id === 'todo'){ |
104 |
| - vm.todo.splice(event.newIndex, 0, content); |
105 |
| - }else if(event.to.id === 'doing'){ |
106 |
| - vm.doing.splice(event.newIndex, 0, content); |
107 |
| - }else if(event.to.id === 'done'){ |
108 |
| - vm.done.splice(event.newIndex, 0, content); |
109 |
| - } |
110 |
| - }, |
111 |
| - onEnd(event){ |
112 |
| - if(event.to.id === event.from.id){ |
113 |
| - event.item.removeAttribute('draggable'); |
114 |
| - } |
115 |
| - } |
116 |
| - }); |
| 94 | + removeHandle(event){ |
| 95 | + console.log(event); |
| 96 | + this.$message.success(`从 ${event.from.id} 移动到 ${event.to.id} `); |
117 | 97 | }
|
118 |
| - }, |
119 |
| - mounted() { |
120 |
| - document.body.ondrop = function (event) { |
121 |
| - event.preventDefault(); |
122 |
| - event.stopPropagation(); |
123 |
| - }; |
124 |
| - let vm = this; |
125 |
| - this.initSortable('todo', this); |
126 |
| - this.initSortable('doing', this); |
127 |
| - this.initSortable('done', this); |
128 | 98 | }
|
129 | 99 | }
|
130 | 100 |
|
|
170 | 140 | -webkit-transition: border .3s ease-in;
|
171 | 141 | transition: border .3s ease-in;
|
172 | 142 | }
|
173 |
| - .drag-list[draggable="false"]{ |
174 |
| - display: none; |
175 |
| - } |
176 | 143 | .drag-list:hover {
|
177 | 144 | border: 1px solid #20a0ff;
|
178 | 145 | }
|
|
183 | 150 | font-size: 22px;
|
184 | 151 | color: #1f2f3d;
|
185 | 152 | }
|
| 153 | + .ghost-style{ |
| 154 | + display: block; |
| 155 | + color: transparent; |
| 156 | + border-style: dashed |
| 157 | + } |
186 | 158 | </style>
|
0 commit comments