uni-app引入sortable列表拖拽,兼容App和H5,拖拽排序。

效果:

拖拽排序

背景:

作为一名前端开发人员,在工作中难免会遇到拖拽功能,分享一个github上一个不错的拖拽js库,能满足我们在项目开发中的需要,下面是我在uniapp中使用SortableJS的使用详细流程;

vue开发的web项目可以参考我的另一篇文章

Vue中拖动排序功能,引入SortableJs,前端拖动排序。https://blog.csdn.net/weixin_64530670/article/details/132328122?spm=1001.2014.3001.5501

开始前先下载好Sortable至项目中,可直接下载min包,官方文档:
SortableJs中文文档http://www.sortablejs.com

  1. sortable下载到本地 renderjs只支持H5和App-vue,不支持小程序和App-nvue开发

  2. 下载好后,在html代码处,找到你要拖拽排序的元素的父元素,给它设置一个id,我这边设置的就是'sort' ,然后 给要拖拽的元素设置:data-id 它的作用是,决定了拖拽结束后返回给你一个怎样的数组,传item.id,它就会自动在拖拽结束后返回给你一个后排序好的id数组. 然后我们就可以拿去处理数据,发请求保存顺序啦!

    html 复制代码
    <view class="appList" id="sort">
    		<view class="appItem" v-for="(item,index) in usualist" :key='item.appId' :data-id="item.appId">
    			<view class="remove" @tap="remove(item)">
    				<u-icon name="minus-circle-fill"></u-icon>
    			</view>
    			<image class="img" :src='getimgUrl(item.overImgUrl)' v-if="Boolean(item.overImgUrl)"></image>
    			<view class="first" v-else>
    				{{getfirst(item.name)}}
    			</view>
    			<view class="appIntroduction">
    				<text>{{item.name}}</text>
    			</view>
    			<view class="totop">
    				<u-icon name="list"></u-icon>
    			</view>
    		</view>
    	</view>
  3. css:

    css 复制代码
    	.sort {
    		display: flex;
    		align-items: center;
    		flex-wrap: wrap;
    
    		&-item {
    			width: 200rpx;
    			height: 100rpx;
    			display: flex;
    			align-items: center;
    			justify-content: center;
    			border-radius: 15rpx;
    			background: #f5f5f5;
    			margin: 5rpx;
    		}
    	}
  4. js代码 再写一个script标签:

    javascript 复制代码
    <script module='sortable' lang="renderjs">
    import Sortable from 'static/Sortable.min.js'
    export default {
    	mounted() {
    		this.initSortable()
    	},
    	methods: {
    		initSortable() {
    			if (typeof window.Sortable === 'function') {
    				this.setSortable()
    			} else {
    				const script = document.createElement('script')
    				script.src = '/static/Sortable.min.js'
    				script.onload = this.setSortable.bind(this)
    				document.head.appendChild(script)
    				}
    			},
    		setSortable() {
    			let option = {
    				animation: 150,
    				delay:300,
    				onEnd: (e) => {
    					// 拖拽完成后回调
    					this.$ownerInstance.callMethod('changeSort', sortable.toArray());
    				}
    			}
    			let sortable = Sortable.create(document.getElementById('sort'), option);
    		},
    	}
    }
    </script>

    以上代码中,在执行完拖拽后会执行changeSort方法,这个方法需要写到原本的那个script中:

    javascript 复制代码
    changeSort(e) {
    		console.log(e)
    		this.flag = true
    		this.updatelist = e.join(',')
    	},

    拖拽后打印出来的e就是有已经排序好的每一项的id组成的数组。

相关推荐
雪芽蓝域zzs几秒前
第三十二节:部门组织管理(el‑tree 组织树
前端·javascript·vue.js
leoZ2318 分钟前
第 7 篇:进阶——校验、联动、列表页
开发语言·前端·javascript·vue.js·人工智能·目标检测·ecmascript
VeryCool10 分钟前
别吹了,依赖图像识别的GPT‑6 Astra永远快不起来
前端·javascript·aigc
hunterandroid20 分钟前
Android 测试全景:从单元测试到 UI 自动化的完整实践
android·前端
leoZ23124 分钟前
第 8 篇:与 AI 协作的工作流 + 完整案例
前端·人工智能·神经网络·自然语言处理·性能优化·c#·php
背对疾风25 分钟前
提前还贷,缩短年限和降低月供其实是一样的
前端
2501_9289962235 分钟前
Agent 开发 API 选型:硅碳相变下 Function Calling 兼容性与多模型路由拆解
前端
invicinble37 分钟前
做数字产品的核心内容--数据的设计与展示
大数据·前端
LabVIEW开发37 分钟前
LabVIEW运行时动态修改控件标题
前端·labview·labview知识·labview功能·labview程序
晴天161 小时前
ES6+ 核心语法
前端·es6·状态模式