js实现购物车左滑删除

使用 js 和jquery动画实现购物车左滑,请引入jquery库,不然会报错哦!

首页编写页面,注意布局,滑动分成两部分,商品图片和信息放在一个布局,删除和移入收藏放在一起。

其中js用到了 touchstart touchend addEventListener事件。

获取的是滑动的方向距离即定义为 startX, startY, endX, endY 具体实现附完整代码 githup:https://github.com/ad-skylar/cart-leftslide,下面是展示图

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8" />
    <meta name="viewport"  content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no"/>
    <title>购物车</title>
    <link rel="stylesheet" type="text/css" href="index.css" />
  </head>
  <body>
    <div class="cart clearfix">
      <!-- 购物车列表 start-->   
      <div class="list-goods  clearfix">
        <div class="scroll-part">
          <!-- 商品信息 sart -->
          <div class="scroll-left ui-flex" id="part1">
            <div class="ui-flex goods-img " style="40%;">
                <img class="" src="images/img1.png" />  
            </div>
            <div class="main-info-wrapper ui-flex" style="58%">
              <div class="goods-info">
                <div class="goods-info-title">Jordan官方AIR JORDAN 1 HIGH ZIP AJ1女子运动鞋高帮AQ3742</div>
                <div class="goods-info-size">
                  <div>100帆白/柠檬绿黄/空间蓝/草皮橙</div>
                  <div>尺码:38</div>
                </div>
                <div class="sell-price">
                  已降
                  <span>¥20.00</span>
                </div>
                <div class="goods-info-price">
                  <span class="price-now">¥799</span>
                  <span class="price-original">¥1299.00</span>
                </div>
              </div>
            </div>
          </div>
          <!-- 商品信息 sart -->
          <!-- 商品删除收藏按钮 sart -->
          <div class="handel-right ui-flex">
            <span class="move-collection ui-flex">
              移入收藏
            </span>
            <span class="delete ui-flex">
              删除
            </span>
          </div>
          <!-- 商品删除收藏按钮 sart -->
        </div>
      </div>
      <!--购物车列表 end-->
       <!-- 购物车列表 start-->   
       <div class="list-goods  clearfix">
            <div class="scroll-part">
              <!-- 商品信息 sart -->
              <div class="scroll-left ui-flex" id="part1">
                <div class="ui-flex goods-img " style="40%;">
                    <img class="" src="images/img1.png" />  
                </div>
                <div class="main-info-wrapper ui-flex" style="58%">
                  <div class="goods-info">
                    <div class="goods-info-title">Jordan官方AIR JORDAN 1 HIGH ZIP AJ1女子运动鞋高帮AQ3742</div>
                    <div class="goods-info-size">
                      <div>100帆白/柠檬绿黄/空间蓝/草皮橙</div>
                      <div>尺码:38</div>
                    </div>
                    <div class="sell-price">
                      已降
                      <span>¥20.00</span>
                    </div>
                    <div class="goods-info-price">
                      <span class="price-now">¥799</span>
                      <span class="price-original">¥1299.00</span>
                    </div>
                  </div>
                </div>
              </div>
              <!-- 商品信息 sart -->
              <!-- 商品删除收藏按钮 sart -->
              <div class="handel-right ui-flex">
                <span class="move-collection ui-flex">
                  移入收藏
                </span>
                <span class="delete ui-flex">
                  删除
                </span>
              </div>
              <!-- 商品删除收藏按钮 sart -->
            </div>
          </div>
          <!--购物车列表 end-->
    </div>
    <script src="js/jquery.min.js"></script>
    <script type="text/javascript" src="index.js"></script>
  </body>
</html>

css

*{
    margin:0;
    padding:0;
}
body{
    background-color: #efeff4;
    -webkit-overflow-scrolling: touch;
}
.list-goods{
    background-color: #fff;
    height: 160px;
    margin-top: 10px;
    overflow: hidden;
    white-space: nowrap;
    position: relative;
 
}
.scroll-part{
    float: left;
    white-space: nowrap;
    position: relative;
    width: 100%;
    height: 100%;
}
.list-goods:first-of-type{
    margin-top: 0;
}
.list-goods .goods-img{
    margin-right: 0.2rem;
    width: 40%;
    height: 40%;
}
.list-goods .goods-img img{
    width: 100%;
    height: 100%;
}
.scroll-left{
    position: absolute;
    width: 100%;
    background: #fff;
    box-sizing: border-box;
}
/* 商品信息 */
.goods-info{
    padding: 10px;
}
.goods-info .goods-info-title{
    font-size: 14px;
    color: #767676;
    white-space: pre-wrap;
}
.goods-info .goods-info-price{
    margin-top: 4px;
}
.goods-info .sell-price {
    color:#ff3e41;
    margin-top: 6px;
    font-size: 13px;
}
.goods-info .goods-info-size{
    color:#b0b0b0;
    font-size: 13px;
    padding: 4px 0;
}

.goods-info .goods-info-price .price-now{
    color: #cf170f;
    font-size: 13px;
    margin-right:4px;
}
.goods-info .goods-info-price .price-original{
    color: #6a6a6a;
    text-decoration: line-through;
    font-size: 0.38rem;
    margin-right: 0.7rem;
}


/* 商品删除收藏 */

.scroll-part .handel-right{
    color: #fff;
    position: relative;
    height: 100%;
    width: 30%;
    position: absolute;
    right: -11rem;
    top: 0;

}
.handel-right span{
    height: 100%;
    width: 38%;
    text-align: center;
    align-items: center;
    padding: 0 0.2rem;
    justify-content: center;
}
.handel-right .move-collection{
    background-color: #ffa800;
    white-space: pre-wrap;
}
.handel-right .delete{
    background-color: #fe3a3c;
    box-sizing: border-box;
    width: 68%;
}

/* 通用 */

/** flex */
.ui-flex { display: -webkit-box; display: -webkit-flex; display: flex; }
.clearfix{
    overflow: hidden;
}
.colorprimary{
    color: #ff3f3e !important;
}

js 

$(function () {
    //左滑右滑效果
    var moveDiv = "";
    for (var i = 0; i < $(".scroll-left").length; i++) {
        moveDiv = $(".scroll-left")[i];
        var startX;
        moveDiv.addEventListener('touchstart', function (ev) {
            ev.preventDefault();
            startX = ev.touches[0].pageX;
            startY = ev.touches[0].pageY;
        }, false);
        moveDiv.addEventListener('touchend', function (ev) {
            ev.preventDefault();
            var endX, endY;
            endX = ev.changedTouches[0].pageX;
            endY = ev.changedTouches[0].pageY;
            var direction = GetSlideDirection(startX, startY, endX, endY);
            switch (direction) {
                case 1:

                    $(this).next().animate({ right: "0" });
                    $(this).animate({ left: "-8em" });
                    break;
                case 2:
                    $(this).next().animate({ right: "-11rem" });
                    $(this).animate({ left: "0" });
                    break;
                default:
            }
        }, false);
    } 
  
})
function GetSlideAngle(dx, dy) {
    return Math.atan2(dy, dx) * 180 / Math.PI;
}

//根据起点和终点返回方向 1:向左,2:向右,
function GetSlideDirection(startX, startY, endX, endY) {
    var dy = startY - endY;
    var dx = endX - startX;
    var result = 0;

    //如果滑动距离太短  
    if (Math.abs(dx) < 2 && Math.abs(dy) < 2) {
        return result;
    }
    var angle = GetSlideAngle(dx, dy);
    if (angle >= -45 && angle < 45) {
        result = 2;
    } else if ((angle >= 135 && angle <= 180) || (angle >= -180 && angle < -135)) {
        result = 1;
    }

    return result;
}

原文地址:https://www.cnblogs.com/imMeya/p/11492490.html