即使在智能手机上也可以边拖动边移动项目
move items while dragging even on smartphones
大家好,我也在尝试在智能手机上拖动的同时移动项目
我的HTML代码:
<input class="inputText mb-2 border border-primary rounded" v-model="newTodo"
@keypress.13='addTodo' placeholder="Scrivi qualcosa">
<button class="btn btn-info" @click="addTodo">
<i class="far fa-paper-plane"></i>
</button>
<ul class="col-12">
<div v-for="(todo, n) in todos" draggable="true" @dragstart="dragStart(n, $event)"
@dragover.prevent @dragend="dragEnd" @drop="dragFinish(n, $event)">
<li class="mt-2 todo">
anvedi come balla nando {{ todo.name }}
</li>
</div>
</ul>
我的JS代码:
const app = new Vue({
el: '#app',
data: {
todos: [{}],
dragging: -1,
},
mounted() {
if (localStorage.getItem('todos') && localStorage.getItem('list')) {
try {
this.todos = JSON.parse(localStorage.getItem('todos'));
this.list = JSON.parse(localStorage.getItem('list'));
} catch (e) {
localStorage.removeItem('todos');
localStorage.removeItem('list');
}
}
},
methods: {
addTodo() {
if (!this.newTodo) {
return;
}
this.todos.push({
name: this.newTodo,
isHidden: true,
isActive: false,
});
this.list.push(this.newTodo + '\n');
this.newTodo = '';
this.saveTodos();
},
dragStart(which, ev) {
ev.dataTransfer.setData('Text', this.id);
ev.dataTransfer.dropEffect = 'move';
this.dragging = which;
},
dragEnd(ev) {
this.dragging = -1;
},
dragFinish(to, ev) {
this.moveItem(this.dragging, to);
ev.target.style.marginTop = '2px';
ev.target.style.marginBottom = '2px';
},
moveItem(from, to) {
if (to === -1) {
this.removeItemAt(from);
} else {
this.todos.splice(to, 0, this.todos.splice(from, 1)[0]);
}
},
},
computed: {
isDragging() {
return this.dragging > -1;
},
},
});
在电脑上可以完美运行,但在智能手机上试一下就不行了.....
我想比那个更详细我做不到,但是stack逼着我写更多的字,因为我写的代码太多,文字太少了,但我觉得没有太多可说的了,问题简单明了,代码也是!
我在工作中遇到了同样的问题。我没有设法仅使用 VueJs 解决它,但我使用 vue2-touch-event package, as well as the interact.js 库来更精确地控制某些 DOM 元素。如果您不想过多修改代码,我建议您使用 vue2-touch-event。
大家好,我也在尝试在智能手机上拖动的同时移动项目
我的HTML代码:
<input class="inputText mb-2 border border-primary rounded" v-model="newTodo"
@keypress.13='addTodo' placeholder="Scrivi qualcosa">
<button class="btn btn-info" @click="addTodo">
<i class="far fa-paper-plane"></i>
</button>
<ul class="col-12">
<div v-for="(todo, n) in todos" draggable="true" @dragstart="dragStart(n, $event)"
@dragover.prevent @dragend="dragEnd" @drop="dragFinish(n, $event)">
<li class="mt-2 todo">
anvedi come balla nando {{ todo.name }}
</li>
</div>
</ul>
我的JS代码:
const app = new Vue({
el: '#app',
data: {
todos: [{}],
dragging: -1,
},
mounted() {
if (localStorage.getItem('todos') && localStorage.getItem('list')) {
try {
this.todos = JSON.parse(localStorage.getItem('todos'));
this.list = JSON.parse(localStorage.getItem('list'));
} catch (e) {
localStorage.removeItem('todos');
localStorage.removeItem('list');
}
}
},
methods: {
addTodo() {
if (!this.newTodo) {
return;
}
this.todos.push({
name: this.newTodo,
isHidden: true,
isActive: false,
});
this.list.push(this.newTodo + '\n');
this.newTodo = '';
this.saveTodos();
},
dragStart(which, ev) {
ev.dataTransfer.setData('Text', this.id);
ev.dataTransfer.dropEffect = 'move';
this.dragging = which;
},
dragEnd(ev) {
this.dragging = -1;
},
dragFinish(to, ev) {
this.moveItem(this.dragging, to);
ev.target.style.marginTop = '2px';
ev.target.style.marginBottom = '2px';
},
moveItem(from, to) {
if (to === -1) {
this.removeItemAt(from);
} else {
this.todos.splice(to, 0, this.todos.splice(from, 1)[0]);
}
},
},
computed: {
isDragging() {
return this.dragging > -1;
},
},
});
在电脑上可以完美运行,但在智能手机上试一下就不行了.....
我想比那个更详细我做不到,但是stack逼着我写更多的字,因为我写的代码太多,文字太少了,但我觉得没有太多可说的了,问题简单明了,代码也是!
我在工作中遇到了同样的问题。我没有设法仅使用 VueJs 解决它,但我使用 vue2-touch-event package, as well as the interact.js 库来更精确地控制某些 DOM 元素。如果您不想过多修改代码,我建议您使用 vue2-touch-event。