微信小程序实现侧滑

先上效果图

↓ ↓ ↓ ↓ ↓ ↓

滑动之前

滑动之后

 

觉得效果图不错的朋友请继续往下看

↓ ↓ ↓ ↓ ↓ ↓

先上一段html代码

<view class="touch-item {{isTouchMove ? 'touch-move-active' : ''}}" bindtouchstart="touchstart" bindtouchmove="touchmove" >
  <navigator class="content" hover-class="none">
    <image class="item_img" src="../image/image1.png" />
    <view class="item_title">德国Nestl&#233;雀巢BEBA贝巴适度水解奶粉3段(10个月以上)800g</view>
  </navigator>
  <view class="del" catchtap="del" >删除</view>
</view>

下面是css

.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;
  margin-right: 0;
  -webkit-transition: all 0.4s;
  transition: all 0.4s;
  -webkit-transform: translateX(90px);
  transform: translateX(90px);
  margin-left: -90px;
  background-color: #fff;
}

.item_img {
  float: left;
  width: 100rpx;
  height: 100rpx;
  vertical-align: middle;
}

.item_title {
  padding-right: 25rpx;
  line-height: 200%;
  font-size: 28rpx;
  text-overflow: ellipsis;
  overflow: hidden;
  display: -webkit-box;
  -webkit-line-clamp: 2;
  -webkit-box-orient: vertical;
  padding-left: 20rpx;
}

.del {
  background-color: orangered;
  width: 90px;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  color: #fff;
  -webkit-transform: translateX(90px);
  transform: translateX(90px);
  -webkit-transition: all 0.4s;
  transition: all 0.4s;
}

.touch-move-active .content, .touch-move-active .del {
  -webkit-transform: translateX(0);
  transform: translateX(0);
}
//手指触摸动作开始 记录起点X坐标
  touchstart: function (e) {
    //开始触摸时 重置样式,并记录触摸位置
    this.setData({
      startX: e.changedTouches[0].clientX,
      startY: e.changedTouches[0].clientY,
      isTouchMove : this.data.isTouchMove ? !this.data.isTouchMove : this.data.isTouchMove; 
    })
  },
  //滑动事件处理
  touchmove: function (e) {
     var that = this,
      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 });
      var isTouchMove 
      //滑动超过30度角 return
      if (Math.abs(angle) > 30) return;
        if (touchMoveX > startX){ //右滑
           isTouchMove = false 
        }else{ //左滑
          isTouchMove = true
        }
    //更新数据
    that.setData({
      isTouchMove : isTouchMove 
    })
  },
  /**
   * 计算滑动角度
   * @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);
  }                

ps:如有错误,欢迎指正。共同学习,共同进步

 


更多专业前端知识,请上 【猿2048】www.mk2048.com
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值