uni-app 有没有vue拖拽排序的组件类似于import draggable from 'vuedraggable'或者sortable.js
uni-app 有没有vue拖拽排序的组件类似于import draggable from 'vuedraggable’或者sortable.js
4 回复
uniapp真机上直接用vuedraggable会报错原因不支持window和document
插件市场搜 drag,很多
如何左右拖动,你这个列表只能上下拖动
在uni-app中,虽然没有直接等效于vuedraggable
或sortable.js
的官方组件,但你可以通过集成sortable.js
来实现拖拽排序功能。以下是一个简单的集成示例,展示了如何在uni-app中使用sortable.js
来实现拖拽排序。
首先,确保你的项目中已经安装了sortable.js
。你可以通过npm或yarn来安装它,但由于uni-app的特殊环境,你可能需要在HBuilderX中手动将sortable.js
文件添加到你的项目中,或者使用条件编译来处理不同平台的依赖。
假设你已经将sortable.js
添加到了项目中,接下来是在uni-app中使用它的示例代码:
- 在页面中引入sortable.js
<template>
<view class="container">
<view class="item" v-for="(item, index) in items" :key="item.id" :data-id="item.id">
{{ item.name }}
</view>
</view>
</template>
<script>
import Sortable from '@/path/to/sortable.min.js'; // 根据你的项目结构调整路径
export default {
data() {
return {
items: [
{ id: 1, name: 'Item 1' },
{ id: 2, name: 'Item 2' },
{ id: 3, name: 'Item 3' },
],
sortable: null,
};
},
mounted() {
this.sortable = new Sortable(this.$el.querySelector('.container'), {
onEnd: (evt) => {
const movedItem = this.items.splice(evt.oldIndex, 1)[0];
this.items.splice(evt.newIndex, 0, movedItem);
},
dataIdAttr: 'data-id',
});
},
beforeDestroy() {
if (this.sortable) {
this.sortable.destroy();
}
},
};
</script>
<style>
.container {
display: flex;
flex-direction: column;
}
.item {
padding: 10px;
margin: 5px 0;
background-color: #f0f0f0;
border: 1px solid #ccc;
}
</style>
- 注意事项
- 在
mounted
生命周期钩子中初始化Sortable
实例,并绑定到页面的容器元素上。 - 使用
dataIdAttr
选项来指定用于排序的元素ID属性,这里我们使用了data-id
。 - 在
beforeDestroy
生命周期钩子中销毁Sortable
实例,以避免内存泄漏。
这个示例展示了如何在uni-app中使用sortable.js
来实现基本的拖拽排序功能。根据你的具体需求,你可能需要调整样式或添加更多的功能,比如拖拽手柄、拖拽限制等。