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

相关推荐
golitter.2 分钟前
Ajax和axios简单用法
前端·ajax·okhttp
雷特IT22 分钟前
Uncaught TypeError: 0 is not a function的解决方法
前端·javascript
localbob39 分钟前
uniapp超全user-agent判断 包括微信开发工具 hbuilder mac windows 安卓ios端及本地识别
windows·macos·uni-app·user-agent
长路 ㅤ   44 分钟前
vite学习教程02、vite+vue2配置环境变量
前端·vite·环境变量·跨环境配置
亚里士多没有德7751 小时前
强制删除了windows自带的edge浏览器,重装不了怎么办【已解决】
前端·edge
micro2010141 小时前
Microsoft Edge 离线安装包制作或获取方法和下载地址分享
前端·edge
.生产的驴1 小时前
Electron Vue框架环境搭建 Vue3环境搭建
java·前端·vue.js·spring boot·后端·electron·ecmascript
awonw1 小时前
[前端][easyui]easyui select 默认值
前端·javascript·easyui
老齐谈电商1 小时前
Electron桌面应用打包现有的vue项目
javascript·vue.js·electron
小雨cc5566ru1 小时前
uniapp+Android智慧居家养老服务平台 0fjae微信小程序
android·微信小程序·uni-app