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组成的数组。

相关推荐
键盘鼓手苏苏16 分钟前
Flutter for OpenHarmony:markdown 纯 Dart 解析引擎(将文本转化为结构化 HTML/UI) 深度解析与鸿蒙适配指南
前端·网络·算法·flutter·ui·html·harmonyos
芭拉拉小魔仙6 小时前
企业级Vue项目的状态管理:从原理到实战架构
前端·vue.js·架构
恋猫de小郭6 小时前
丰田正在使用 Flutter 开发游戏引擎 Fluorite
android·前端·flutter
扶苏10027 小时前
Vue 3 响应式原理深度解析
前端·javascript·vue.js
NEXT067 小时前
React 性能优化:图片懒加载
前端·react.js·面试
PineappleCoder7 小时前
别让字体拖了后腿:FOIT/FOUT 深度解析与字体加载优化全攻略
前端·性能优化
NEXT068 小时前
后端跑路了怎么办?前端工程师用 Mock.js 自救实录
前端·后端·程序员
装不满的克莱因瓶9 小时前
Java7新特性:try-with-resources写法
java·前端·javascript·jdk·新特性·jdk7
SailingCoder10 小时前
【 从“打补丁“到“换思路“ 】一次企业级 AI Agent 的架构拐点
大数据·前端·人工智能·面试·架构·agent
~央千澈~10 小时前
抖音弹幕游戏开发之第12集:添加冷却时间机制·优雅草云桧·卓伊凡
java·服务器·前端