当前位置: 首页 > web >正文

微信小程序拖拽排序有效果图

效果图

请添加图片描述
请添加图片描述

.wxml

<view class="container" style="--w:{{w}}px;" wx:if="{{location.length}}"><view class="container-item" wx:for="{{list}}" wx:key="index" data-index="{{index}}"style="--c:{{item.color}};transform:translate3d({{location[item.i].x}}px, {{location[item.i].y}}px, 0);{{select === index?'z-index:1;left:'+moveX+'px;top:'+moveY+'px;':animation?'transition: transform 0.3s;':''}}" bind:touchstart="touchS" bind:touchmove="touchM" bind:touchend="touchE">{{item.num}}</view>
</view>

.wxss

.container{position: relative;width: 100%;
}
.container-item{width: var(--w);height: var(--w);background: var(--c);position: absolute;left: 0;top: 0;display: flex;align-items: center;justify-content: center;font-size: 48rpx;color: #fff;
}

.js

Page({data: {list:[{color:'#000',num:1},{color:'#f37b1d',num:2},{color:'#39b54a',num:3},{color:'#0081ff',num:4},{color:'#e54d42',num:5},{color:'#e03997',num:6},{color:'#FF66CC',num:7},{color:'#003399',num:8},{color:'#99FFFF',num:9},],/** 拖拽列表宽度 */width:wx.getWindowInfo().windowWidth,/** 每行显示个数 */columns:4,/** 选中元素 */select:-1,/** 位置 */location:[],/** 动画 */animation:true,},onLoad(){let w = this.data.w,list = this.data.list,location = [],columns = this.data.columns,numY,numX;w = this.data.width / columnsfor(let i = 0;i < list.length;i++){numY = i / columns | 0numX = i - numY * columnslist[i].row = numXlist[i].i = ilocation.push({x:numX * w,y:numY * w })}this.setData({w,list,location,})},/** 选中 */touchS(e){this.data.startX = e.touches[0].clientXthis.data.startY = e.touches[0].clientYconst index = e.currentTarget.dataset.indexthis.setData({select:index,})this.data.list[index].n = index},/** 拖动 */touchM(e){let list = this.data.list,select = this.data.select,startX = this.data.startX,startY = this.data.startY;const dragX = e.touches[0].clientX,dragY = e.touches[0].clientY;const x = dragX - startX,y = dragY - startY,columns = this.data.columns,w = this.data.w,f = w / 2;this.setData({moveX:x,moveY:y,})const o = list[select]const selectX = ((x > 0 ? x + f : x - f) / w | 0) + o.rowif(selectX >= columns || selectX < 0){return}const stx = (select / columns | 0) * columnsconst lon = selectX + stx const site = ((y > 0 ? y + f : y - f) / w | 0) * columns + lonif(!list[site] || o.n === site){return}let numif(site !== select || list[o.n].i !== select){for(let i = 0;i < list.length;i++){if(i !== select && list[i].i === site){num = ibreak;}}}else{num = o.n}list[num].i = o.nlist[select].n = sitethis.setData({list,})},/** 结束 */touchE(){var that = thisconst list = that.data.list,select = that.data.select,columns = this.data.columnslet numY,numX;list[select].i = list[select].nlist.sort((a,b) => a.i - b.i)for(let i = 0;i < list.length;i++){numY = i / columns | 0numX = i - numY * columnslist[i].row = numX}that.setData({animation:false},() => {that.setData({select:-1,moveX:0,moveY:0,list,},() => {setTimeout(() => {that.setData({animation:true})},300)})})},
})

遇到问题可以看我主页加我Q,很少看博客,对你有帮助别忘记点赞收藏。

http://www.xdnf.cn/news/1030.html

相关文章:

  • C++学习之类与对象
  • Redis的数据持久化是怎么做的?
  • 【无人机】问题分析。查看电机转速时,四个电机转速不一致,QGC中检测到电机转速不均衡
  • webpack详细打包配置,包含性能优化、资源处理...
  • 简述大疆无人机对接
  • Python爬虫从入门到实战详细版教程
  • 【AI提示词】投资策略专家
  • 蓝耘平台介绍:算力赋能AI创新的智算云平台
  • Android RecyclerView 多布局场景下的设计思考:SRP 与 OCP 的权衡与优化
  • 服务网格在DevOps中的落地:如何让微服务更智能、更稳定?
  • 597页PPT丨流程合集:流程梳理方法、流程现状分析,流程管理规范及应用,流程绩效的管理,流程实施与优化,流程责任人的角色认知等
  • Python+区块链:如何打造智能化资产管理系统?
  • [预备知识]3. 自动求导机制
  • 探秘 SenseGlove Nova 2力反馈手套,解锁 VR 键盘交互新方式
  • WebGis与WebGL是什么,两者之间的关系?
  • DeepSeek系列(5):助力数据分析
  • ClickHouse 设计与细节
  • linux sysfs使用cat无显示的原因:返回值未赋值
  • 一图掌握 C++ 核心要点
  • android Stagefright框架
  • 模数转换【1】AD7699
  • 【C++篇】string类的终章:深浅拷贝 + 模拟实现string类的深度解析(附源码)
  • 使用tabs组件搭建UI框架
  • SPI通信
  • 7. 深入Spring AI:刨析 Advisors 机制
  • 4月21日日记
  • vue2解析html中的公式,使用vue-katex
  • 科学养生指南:解锁健康生活新方式
  • 强化学习框架verl源码学习-快速上手之如何跑通PPO算法
  • 【C++11】线程库、锁、条件变量、原子操作