ウィジェットドラッグソート


小さなプログラムを作ったmovable-areaコンポーネントのドラッグ機能は、私が愚かかもしれませんが、論理は1週間考えてから少し色づいて、やっとできました.
くだらないことは言わないで、コードをつけてください.

  
  
    
    {{item.id}}
  

  
.section{
  width: 100%;
  height: 100vh;
}
.area{
height: 100vh;
width: 100%;
background-color: white;
}
.cent{
  color: white;
  display: flex;
  align-items: center;
  justify-content: center;
  background-color: #ccc;
  border: solid 1rpx #7c7c7c;
  height: 100rpx;
  width: 99.5%;
}

 
// pages/test/test2.js
Page({

  /**
   *        
   */
  data: {
    x: 0,
    y1: 0,
    y2: 0,
    yb: 0,
    list: [{
        id: 1,
        x: 0,
        y: 0,
      },
      {
        id: 2,
        x: 0,
        y: 60,
      },
      {
        id: 3,
        x: 0,
        y: 120,
      },
      {
        id: 4,
        x: 0,
        y: 180,
      },
    ]
  },

  start: function(e) {
    console.log("  ", e)
    let that = this,
      list = that.data.list,
      index = e.currentTarget.dataset.index,
      y2 = e.changedTouches[0].pageY - list[index].y;
    console.log(index);
    that.setData({
      yb: index,
      y1: e.changedTouches[0].pageY,
      y2: y2
    })
  },
  move: function(e) {
    let that = this,
      py = e.changedTouches[0].pageY,
      index = e.currentTarget.dataset.index,
      list = that.data.list,
      y1 = that.data.y1,
      y2 = that.data.y2,
      y4 = parseInt(py / 60),
      yb = that.data.yb;
    list[index].y = py - y2;
    if (y4 > list.length - 1) {
      y4 = list.length - 1;
    }
    if (y4 < index || yb < index) {
      // console.log("  ");
      if (yb > y4) list[y4].y = (y4 + 1) * 60;
      if (yb < y4) list[yb].y = (y4 - 1) * 60;
    }

    if (y4 > index || yb > index) {
      //console.log("  ");
      if (yb > y4) list[yb].y = yb * 60;
      if (yb < y4) list[y4].y = (y4 - 1) * 60;
    }

    that.setData({
      yb: y4,
      list: list
    })


  },
  end: function(e) {

    let that = this,
      index = e.currentTarget.dataset.index,
      py = e.changedTouches[0].pageY,
      y1 = that.data.y1,
      y2 = that.data.y2,
      list = that.data.list,
      y4 = parseInt(py / 60);
    //  console.log("y4",y4);
    if (y4 > list.length - 1) {
      y4 = list.length - 1;
    }
    list[index].y = y4 * 60;
    console.log("endlist", list);
    for (let i = 0; i < list.length - 1; i++) {
      for (let j = 0; j < list.length - 1 - i; j++) // j    0,
      {
        if (list[j].y > list[j + 1].y) {
          let temp = list[j];
          list[j] = list[j + 1];
          list[j + 1] = temp;
        }
      }
    }


    that.setData({
      list: list
    })


  },
  /**
   *       --      
   */
  onLoad: function(options) {
    wx.setNavigationBarTitle({
      title: options.title,
      success: function(res) {
        // success
      }
    })
  },

  /**
   *       --          
   */
  onReady: function() {

  },

  /**
   *       --      
   */
  onShow: function() {

  },

  /**
   *       --      
   */
  onHide: function() {

  },

  /**
   *       --      
   */
  onUnload: function() {

  },

  /**
   *           --        
   */
  onPullDownRefresh: function() {

  },

  /**
   *              
   */
  onReachBottom: function() {

  },

  /**
   *          
   */
  onShareAppMessage: function() {

  }
})

コードは直接小さなプログラムのテストにドラッグすることができて、完璧にしたいなら、自分でスタイルを変えなければなりません.