uniapp 拖拽排序

1.拖拽排序 使用 sortablejs库

复制代码
npm install sortablejs --save-dev

<template>
	<view id="list">
		<view v-for="(item, index) in list" :key="item.id" class="item">
			{{ item.name }}
		</view>
	</view>
</template>

<script>
	import Sortable from "sortablejs";

	export default {
		data() {
			return {
				list: [{
						id: 1,
						name: "列表项1"
					},
					{
						id: 2,
						name: "列表项2"
					},
					{
						id: 3,
						name: "列表项3"
					},
					{
						id: 5,
						name: "列表项5"
					},{
						id: 6,
						name: "列表项6"
					},{
						id: 7,
						name: "列表项7"
					},{
						id: 8,
						name: "列表项8"
					},{
						id: 9,
						name: "列表项9"
					},{
						id: 10,
						name: "列表项10"
					},{
						id: 11,
						name: "列表项11"
					},{
						id: 12,
						name: "列表项12"
					},{
						id: 13,
						name: "列表项13"
					},{
						id: 14,
						name: "列表项14"
					}
				]
			};
		},
		mounted() {
			this.initSortable();
		},
		methods: {
			initSortable() {
				const list = document.getElementById("list");
				new Sortable(list, {
					animation: 150,
					onUpdate: this.handleUpdate
				});
			},
			handleUpdate(event) {
				const {
					oldIndex,
					newIndex
				} = event;
				const item = this.list.splice(oldIndex, 1)[0];
				this.list.splice(newIndex, 0, item);
			}
		}
	};
</script>

<style scoped>
	.container {
		display: flex;
		flex-direction: column;
	}

	.item {
		padding: 10px;
		margin: 5px 0;
		background-color: #f0f0f0;
		border: 1px solid #ccc;
		cursor: pointer;
	}
</style>

2.拖拽到指定位置并停留

复制代码
<template>
  <view class="container">
    <movable-area class="area">
      <movable-view
        v-for="(item, index) in list"
        :key="item.id"
        :x="0"
        :y="item.y"
        direction="vertical"
        @change="handleMove(index, $event)"
        class="item"
      >
        {{ item.name }}
      </movable-view>
    </movable-area>
  </view>
</template>

<script>
export default {
  data() {
    return {
      list: [
        { id: 1, name: "列表项1", y: 0 },
        { id: 2, name: "列表项2", y: 50 },
        { id: 3, name: "列表项3", y: 100 },
        { id: 4, name: "列表项4", y: 150 }
      ]
    };
  },
  methods: {
    handleMove(index, event) {
      const { y } = event.detail;
      this.list[index].y = y;
      this.sortList();
    },
    sortList() {
      this.list.sort((a, b) => a.y - b.y);
    }
  }
};
</script>

<style scoped>
.container {
  height: 300px;
}
.area {
  width: 100%;
  height: 100%;
}
.item {
  width: 100%;
  height: 50px;
  background-color: #f0f0f0;
  border: 1px solid #ccc;
  text-align: center;
  line-height: 50px;
}
</style>
相关推荐
咸虾米_1 小时前
开发uniapp前端通用价格组件提交到DCloud插件市场
uni-app·商城·开发插件·dcloud插件市场·扩展组件
郑州光合科技余经理1 小时前
实战分享:如何构建东南亚高并发跑腿配送系统
java·开发语言·javascript·spring cloud·uni-app·c#·php
2501_916007472 小时前
iOS与Android符号还原服务统一重构实践总结
android·ios·小程序·重构·uni-app·iphone·webview
嘿siri3 小时前
uniapp enter回车键不触发消息发送,已解决
前端·前端框架·uni-app·vue
00后程序员张4 小时前
fastlane 结合 appuploader 命令行实现跨平台上传发布 iOS App
android·ios·小程序·https·uni-app·iphone·webview
2501_915106324 小时前
iOS 性能优化这件事,结合多工具分析运行期性能问题
android·ios·性能优化·小程序·uni-app·cocoa·iphone
嘿siri4 小时前
自定义app端、小程序端和H5等多端自定义键盘输入框,跟随系统键盘弹出和隐藏
javascript·小程序·uni-app·uniapp
游戏开发爱好者84 小时前
App Store 上架流程,结合多工具协作
android·ios·小程序·https·uni-app·iphone·webview
cesske4 小时前
如何在yii2的uniapp项目中处理提交重复问题?
uni-app·状态模式
茶憶6 小时前
UniApp 安卓端实现文件的生成,写入,获取文件大小以及压缩功能
android·javascript·vue.js·uni-app