小程序实现区域数据滑动

小程序代码:

/*
moreX X轴移动距离
moreY Y轴移动的距离
*/
   <movable-area style="height: auto; width: 100%">
              <movable-view
              :x="moreX"
              :y="moreY"
              direction="all"
              :damping="5000"
              :friction="1"
            >
              <view class="item_move" hidden="true"></view>
            </movable-view>
   </movable-area>

业务逻辑代码

点击的初始位置代码如下:

/*
pointsArr  定义空数组
touchstarts  是Vue中的touchstart事件
*/
    touchstarts (event, index) {
      /*
      event.currentTarget 获取元素本身 
      event.currentTarget.dataset.index 如果event存在 event.currentTarget.dataset.index可以从中获取是数组的下标,否则不存在,可以自己传一个下个过来,判断是点击了那一项index
      */
      this.initialIndex= index
      // 距离左边的距离
      this.moreX = event.currentTarget.offsetLeft
      // 距离顶部的距离
      this.moreY = event.currentTarget.offsetTop
      let that = this;
      // 获取.item节点所有数据列表
      const query = wx.createSelectorQuery();
      const nodesRef = query.selectAll(".item");
      nodesRef.fields({
        dataset: true,
        rect: true
      }, (result) => {
        that.pointsList = result
      }).exec()
    },

fields 使用方法参考网址

移动的事件代码如下:

    touchm (evevt) {
      // 移动距离X轴的位置变化
      let x = evevt.touches[0].pageX
      // 移动距离Y轴的位置变化
      let y = evevt.touches[0].pageY
      let that = this;
      wx.createSelectorQuery().selectAll('.list').boundingClientRect(function (rect) {
        let top = rect[0].top;
        y = y - top;
        that.moreX = x
        that.moreY = y
      }).exec()
    },

boundingClientRect 使用方法参考网址

结束事件的代码如下:

    handleTouchEnd (evevt) {
    // changedTouches: 涉及当前(引发)事件的触摸点的列表
      let x = evevt.changedTouches[0].pageX;
      let y = evevt.changedTouches[0].pageY;
      const pointsList = this.pointsList
      // data是获取页面初始化显示的数据,或者请求接口返回来数组的数据
      let data = [...this.ManageGridList];
      pointsList.map((item,index)=>{
         if (x > item.left && x < item.right && y > item.top && y < item.bottom) {
          //临时保存移动的目标数据
          let temp = data[this.initialIndex];
          if (data[index] !== undefined) {
            //将移动目标的下标值替换为被移动目标的下标值
            data[beginIndex] = data[index];
            //将被移动目标的下标值替换为beginIndex
            data[index] = temp;
          }
        }
      })  
       console.log(data);
      }

效果图:

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

浏览效果可以搜索小程序:酷健身后台

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

kjs_pass

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值