前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >微信小程序 -- 基于 movable-view 实现拖拽排序

微信小程序 -- 基于 movable-view 实现拖拽排序

作者头像
Kindear
发布2021-06-21 18:22:12
2.4K0
发布2021-06-21 18:22:12
举报
微信小程序 -- 基于 movable-view 实现拖拽排序

项目基于colorui样式组件 ColorUI组件库 (color-ui.com)

1.实现效果
2. 设计思路
  1. movable-view 绑定块移动事件的 块ID ,块移动的坐标
  2. 移动结束后触发moveEnd事件,根据Y坐标对对象数组进行排序
  3. 根据排序结果重置块位置
3.实现代码

代码已经进行了最简化处理

图中效果实现需引入coloruimain.wxss样式部分。

wxml

代码语言:javascript
复制
<movable-area class="padding text-center bg-grey" style="width:100%;height:500px;" >
  <movable-view class="radius shadow bg-white" style="width:80%;height:80px;z-index:{{index==moveId?2:1}}" wx:for="{{tabList}}" wx:key="index" x="{{item.x}}" y="{{item.y}}" direction="all"
    bindchange="moveStatus" bindtouchend='moveEnd' data-moveid="{{index}}">
    {{item.name}}</movable-view>
</movable-area>

js

代码语言:javascript
复制
var compare = function (obj1, obj2) {
  var val1 = obj1.y;
  var val2 = obj2.y;
  if (val1 < val2) {
      return -1;
  } else if (val1 >= val2) {
      return 1;
  } else {
      return 0;
  }            
}
Page({

  /**
   * 页面的初始数据
   */
  data: {
    branchid:'',
    appdocid:'',
    tabList:[
      {
        name:'十步杀一人'
      },
      {
        name:'千里不留行'
      },
      {
        name:'事了拂衣去'
      },
      {
        name:'深藏身与名'
      }
    ],
    //移动的是哪个元素块
    moveId:null,
    //最终停止的位置
    endX:0,
    endY:0
  },
  initMove(){
    let tabList = this.data.tabList;
    var tarr = []
    tabList.forEach(function(ele,index){
      let obj = ele
      obj.id = index
      obj.x = 30
      obj.y = 100*index +20
      tarr.push(obj)
    })
    console.log(tarr)
    this.setData({
      tabList:tarr
    })
  },
  moveEnd(e){
    console.log(e)
    var that = this;
    that.setData({
      ["tabList["+that.data.moveId+"].x"]:that.data.endX,
      ["tabList["+that.data.moveId+"].y"]:that.data.endY
    },()=>{
      let tabList = this.data.tabList;
      tabList = tabList.sort(compare);
      that.setData({
        tabList
      },()=>{
        setTimeout(function(){
          that.initMove();
        },500)
        
      })
    })
   
    
    //计算位置
  },
  moveStatus(e){
    // console.log(e)
    //移动的块ID
    var moveid = e.currentTarget.dataset.moveid;
    //最终坐标
    let x = e.detail.x 
    let y = e.detail.y 
    this.setData({
      moveId:moveid,
      endX:x,
      endY:y
    })
  },
  /**
   * 生命周期函数--监听页面加载
   */
  onLoad: function (options) {
  
  },
  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady: function () {
    this.initMove();
  }
})
4.参考文档

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-06-16 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 微信小程序 -- 基于 movable-view 实现拖拽排序
  • 1.实现效果
  • 2. 设计思路
  • 3.实现代码
  • 4.参考文档
相关产品与服务
云开发 CloudBase
云开发(Tencent CloudBase,TCB)是腾讯云提供的云原生一体化开发环境和工具平台,为200万+企业和开发者提供高可用、自动弹性扩缩的后端云服务,可用于云端一体化开发多种端应用(小程序、公众号、Web 应用等),避免了应用开发过程中繁琐的服务器搭建及运维,开发者可以专注于业务逻辑的实现,开发门槛更低,效率更高。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档