zoukankan      html  css  js  c++  java
  • taro/vue 左滑删除购物车

    环境:taro/vue 开发的小程序

    效果图

     结构

     

     布局思路:利用margin-right:-125rpx;讲删除按钮隐藏,触发条件以后,改变margin-right,margin-left状态,讲删除按钮展示,选择按钮隐藏

      css

    .shop_item_view{
      background: #fff;
      margin: 25rpx 28rpx;
       .shop_item {
        overflow: hidden;
        .shop_name {
          display: flex;
          flex-direction: row;
          color: #14151a;
          font-size: 28rpx;
          padding: 38rpx 30rpx;
          display: flex;
          flex-direction: row;
          align-items: center;
          image {
             20rpx;
            height: 20rpx;
          }
        }
        .good_item {
          padding: 0 30rpx;
          margin-bottom: 48rpx;
          position: relative;
          padding-right: 145rpx;
          margin-left: 0;
           margin-right: -115rpx;
           transition: all .3s;
         
         &.is_delete{
     margin-right: 0;
     margin-left: -85rpx;
     .no_buy{
           margin-right: 26rpx;
     }
         }
          .left_item{
             display: flex;
            flex-direction: row;
            align-items: center;
      
            .good_l {
                display: flex;
                flex-direction: row;
                align-items: center;
                image {
                   184rpx;
                  height: 184rpx;
                }
            }
            .good_r {
               360rpx;
              margin-left: 25rpx;
              .good_name {
                 360rpx;
                white-space: nowrap;
                overflow: hidden;
                text-overflow: ellipsis;
              
                font-size: 28rpx;
                color: #14151a;
              }
              .no_buy_good_name{
                color: #999999;
              }
              .tag {
                margin: 32rpx 0 28rpx;
                .tag_item {
                  background: #f4f4f4;
                  padding: 2rpx 15rpx;
                  color: #666666;
                  font-size: 24rpx;
                  border-radius: 4rpx;
                }
              }
              .btm_box {
                display: flex;
                flex-direction: row;
                align-items: center;
                justify-content: space-between;
                .price {
                  color: #f64747;
                  font-size: 32rpx;
                }
                .number_box {
                  font-size: 30rpx;
                  display: flex;
                  flex-direction: row;
                  align-items: center;
                  justify-content: center;
                  input {
                    font-size: 28rpx;
                     76rpx;
                    text-align: center;
                    background: #f4f4f4;
                    margin: 0 20rpx;
                  }
                }
              }
            }
          }
          .right_item{
            background: #F64747;
            position: absolute;
            top: 0;
            right: 0;
            color: #fff;
            font-size: 28rpx;
             115rpx;
            height: 100%;
          display: flex;
          align-items: center;
          justify-content: center;
          }
        }
      }
    }
    

      

    data

     data() {
        return {
            startX: 0, //开始触摸的位置
            endX: 0, //结束触摸的位置
            disX: 0, //移动距离
            lastX: 0, //上一次X坐标 
        };
      },
    View Code

    实现思路

    获取第一次触发的x坐标

    获取结束移动的x坐标

    两个x坐标相减,正数,向右边滑动

                               负数,向左边滑动

    监听左滑右滑

     // 监听左滑右滑
          touchStart: function (ev) {
            ev = ev || event;
            // console.log(ev.targetTouches);
            // console.log(ev.changedTouches);
            if (ev.touches.length == 1) { //tounches类数组,等于1时表示此时有只有一只手指在触摸屏幕
              this.startX = this.lastX = ev.touches[0].clientX; // 记录开始位置
            }
          },
          touchMove: function (ev) {
            ev = ev || event;
            // ev.touches.length == 1  触摸移动,当且仅当屏幕只有一个触摸点
            if (ev.touches.length == 1) {
             
              // 记录一次坐标值
              this.lastX = ev.touches[0].clientX;
              
            }
          },
          touchEnd: function (ev,cartItem) {
            ev = ev || event;
            // ev.changedTouches.length == 1
            // 1.一个手指触摸
            // 一个手指先触摸,另一个手指触摸,一个一个触摸,不是同时触摸
            if (ev.changedTouches.length == 1) {
              let endX = ev.changedTouches[0].clientX;
              this.disX = endX - this.startX;
              // 只有滑动大于一半距离才触发
              if (Math.abs(this.disX) > 100) {
                if (this.disX < 0) {
                  console.log('左滑');
                 
                  cartItem.isDelete=true;
                } else {
                  console.log('右滑');
               
                   cartItem.isDelete=false;
                }
              }
            }
          },
    
  • 相关阅读:
    【简单易懂】JPA概念解析:CascadeType(各种级联操作)详解
    [转] @JoinColumn 详解 (javax.persistence.JoinColumn)
    Feign二: @FeignClient 接口调用
    @Basic表示一个简单的属性 懒加载,急加载
    RPC接口测试(一)什么是 RPC 框架
    Mysql中 查询慢的 Sql语句的记录查找
    Mysql 查看连接数,状态 最大并发数
    ntp时间一致对与设备心跳的影响
    jmeter常用四种断言
    jmeter BeanShell断言(四)
  • 原文地址:https://www.cnblogs.com/GoTing/p/15076565.html
Copyright © 2011-2022 走看看