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

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

效果图

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

.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,很少看博客,对你有帮助别忘记点赞收藏。

相关文章:

  • 机器人进阶---视觉算法(六)傅里叶变换在图像处理中怎么用
  • 【Pytorch 中的扩散模型】去噪扩散概率模型(DDPM)的实现
  • Facebook商城开通全攻略:如何解决所在地区不可使用问题?
  • IPoIB驱动接收路径深度解析:从数据包到协议栈
  • 在Pytorch中使用Tensorboard可视化训练过程
  • 晨控CK-FR12与欧姆龙NX系列PLC配置EtherNet/IP通讯连接操作手册
  • Spring Boot多环境配置详解
  • GTS-400 系列运动控制器板(七)----修改限位开关触发电平
  • Cline Roo Code
  • 野外价值观:在真实世界的语言模型互动中发现并分析价值观
  • 【AI微信小程序开发】大转盘小程序项目代码:自设转盘选项和概率(含完整前端+后端代码)
  • docker 常见命令
  • Docker 数据卷
  • 基于 Vue 的Tiptap 富文本编辑器使用指南
  • vivado XMP使用
  • linux复习
  • 从M个元素中查找最小的N个元素时,使用大顶堆的效率比使用小顶堆更高,为什么?
  • 川翔云电脑32G大显存集群机器上线!
  • Linux内核之文件驱动随笔
  • Windows远程注入的一些问题
  • 李公明|“小时光”与大时代中的地铁阅读者
  • 降低血压可减少痴呆症发生风险
  • 上海一小学百名学生齐聚图书馆:纸质书的浪漫AI无法取代
  • 上海消保委调查二次元消费:手办与卡牌受欢迎,悦己和社交是动力
  • 王毅同印尼外长苏吉约诺会谈
  • 俄“联盟MS-26”载人飞船安全返回地球