-齐枭飞前端架构师 微信小程序--仿微信 QQ左划事件--

39 篇文章 0 订阅
35 篇文章 0 订阅

废话不多说,直接上代码:
js:

var app = getApp()

Page({

  data: {

    items: [],

    startX: 0, //开始坐标

    startY: 0

  },

  onLoad: function () {

    for (var i = 0; i < 10; i++) {

      this.data.items.push({

        content: i + " 向左滑动删除哦,向左滑动删除哦,向左滑动删除哦,向左滑动删除哦,向左滑动删除哦",

        isTouchMove: false //默认全隐藏删除

      })

    }

    this.setData({

      items: this.data.items

    })

  },

  //手指触摸动作开始 记录起点X坐标

  touchstart: function (e) {

    //开始触摸时 重置所有删除

    this.data.items.forEach(function (v, i) {

      if (v.isTouchMove)//只操作为true的

        v.isTouchMove = false;

    })

    this.setData({

      startX: e.changedTouches[0].clientX,

      startY: e.changedTouches[0].clientY,

      items: this.data.items

    })

  },

  //滑动事件处理

  touchmove: function (e) {

    var that = this,

      index = e.currentTarget.dataset.index,//当前索引

      startX = that.data.startX,//开始X坐标

      startY = that.data.startY,//开始Y坐标

      touchMoveX = e.changedTouches[0].clientX,//滑动变化坐标

      touchMoveY = e.changedTouches[0].clientY,//滑动变化坐标

      //获取滑动角度

      angle = that.angle({ X: startX, Y: startY }, { X: touchMoveX, Y: touchMoveY });

    that.data.items.forEach(function (v, i) {

      v.isTouchMove = false

      //滑动超过30度角 return

      if (Math.abs(angle) > 30) return;

      if (i == index) {

        if (touchMoveX > startX) //右滑

          v.isTouchMove = false

        else //左滑

          v.isTouchMove = true

      }

    })

    //更新数据

    that.setData({

      items: that.data.items

    })

  },

  /**

  * 计算滑动角度

  * @param {Object} start 起点坐标

  * @param {Object} end 终点坐标

  */

  angle: function (start, end) {

    var _X = end.X - start.X,

      _Y = end.Y - start.Y

    //返回角度 /Math.atan()返回数字的反正切值

    return 360 * Math.atan(_Y / _X) / (2 * Math.PI);

  },

  //删除事件

  del: function (e) {

    this.data.items.splice(e.currentTarget.dataset.index, 1)

    this.setData({

      items: this.data.items

    })

  }

})



wxss:

.touch-item {

    font-size: 14px;

    display: flex;

    justify-content: space-between;

    border-bottom:1px solid #ccc;

    width: 100%;

    overflow: hidden;

}

.content {

    width: 100%;

    padding: 10px;

    line-height: 22px;

    margin-right:0;

    -webkit-transition: all 0.4s;

    transition: all 0.4s;

    -webkit-transform: translateX(270px);

    transform: translateX(270px);

    margin-left:-270px;

}

.del {

    background-color: orangered;

    width: 90px;

    display: flex;

    flex-direction: column;

    align-items: center;

    justify-content: center;

    color: #fff;

    -webkit-transform: translateX(270px);

    transform: translateX(270px);

    -webkit-transition: all 0.4s;

    transition: all 0.4s;

}

.details {

    background-color: orangered;

    width: 90px;

    display: flex;

    flex-direction: column;

    align-items: center;

    justify-content: center;

    color: #fff;

    -webkit-transform: translateX(270px);

    transform: translateX(270px);

    -webkit-transition: all 0.4s;

    transition: all 0.4s;

}

.touch-move-active .content,

.touch-move-active .del {

    -webkit-transform: translateX(0);

    transform: translateX(0);

}

.touch-move-active .content,

.touch-move-active .details {

    -webkit-transform: translateX(0);

    transform: translateX(0);

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

终极前端开发协会

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

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

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

打赏作者

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

抵扣说明:

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

余额充值