购物车动画实现

先看一下实现的效果图:
在这里插入图片描述
微信的 .wxml文件:

  <view class="container">
    <swiper indicator-dots>
      <block wx:for="{{goods.image}}" wx:key="{{index}}">
        <swiper-item>
          <image src="{{item}}" mode="aspectFit" />
        </swiper-item>
      </block>
    </swiper>

    <!-- 加入购物车组件 -->
    <view class="goods-operation">
      <!-- <image wx:if="{{show}}" src="/image/cart1.png" class="to-carts-icon"></image> -->
      <text class="goods-operation-num">数量</text>
      <text class="goods-operation-add" bindtap="addCount">+</text>
      <text class="goods-operation-num">{{num}}</text>
      <text class="goods-operation-sub" bindtap="subCount">-</text>
      <text class="goods-to-cart" bindtap="addToCart">加入购物车</text>
      <image src="../../image/cart1.png" class="goods-cart-img" bindtap="addToCart"></image>
    </view>
    <view class="goods-box">
    <image wx:if="{{show}}" src="/image/cart1.png" class="to-carts-icon"></image>
      <view class="goods-stock">{{goods.stock}}</view>
      <view class="goods-title">{{goods.title}}</view>
      <view class="goods-price">¥ {{goods.price}}</view>

    </view>

    <!-- 底部的固定栏 -->
    <view class="fixedBottom">
      <navigator open-type="switchTab" url="../cart/cart" class="nav-bott">
        <view class="carts-icon {{scaleCart?'on':''}}">
          <image src="../../image/cart2.png"></image>
          <text class="carts-icon-num" wx:if="{{hasCarts}}">{{totalNum}}</text>
        </view>
      </navigator>
    </view>
  </view>

js文件:


// pages/detail/detail.js
Page({
  data: {
    goods: {
      id: 1,
      image: [
        '/image/goods1.png',
        '/image/goods2.png',
        '/image/goods3.png'
      ],
      title: '新鲜梨',
      price: 0.01,
      stock: '有货',
      detail: '这里是梨的详情。',
      parameter: '125g/个',
      service: '不支持退货',
      scaleCart: false
    },
    num: 1,
    totalNum: 0,
    hasCarts: false,
    curIndex: 0,
    show: false,
    scaleCart: false
  },
  addCount() {
    let that = this
    that.setData({
      num: that.data.num + 1
    })
  },
  subCount() {
    let that = this
    that.setData({
      num: that.data.num - 1
    })
  },
  addToCart() {
    const self = this;
    const num = this.data.num;
    let total = this.data.totalNum;
    self.setData({
      show: true
    })
    setTimeout(function() {
      self.setData({
        show: false,
        scaleCart: true
      })
      setTimeout(function() {
        self.setData({
          scaleCart: false,
          hasCarts: true,
          totalNum: num + total
        })
      }, 200)
    }, 300)

  },

  onLoad: function(options) {

  },
  onReady: function() {

  },
  onShow: function() {

  },
  onHide: function() {

  },
  onUnload: function() {

  },
  onPullDownRefresh: function() {

  },
  onReachBottom: function() {

  },
  onShareAppMessage: function() {

  }
})

.wxss文件:

/* pages/detail/detail.wxss */

swiper {
  height: 375rpx;
  text-align: center;
}

swiper image {
  height: 100%;
}

/* 加入购物车组件 */

.goods-operation {
  position: relative;
  padding: 0 50rpx;
  margin: 20rpx 40rpx;
  background-color: #ab956d;
  text-align: center;
  border-radius: 40rpx;
  height: 100rpx;
  color: #ffff;
  line-height: 100rpx;
  display: flex;
  justify-content: space-between;
  align-items: center; /* 垂直居中 */
}

.goods-operation image {
  width: 45rpx;
  height: 45rpx;
}

/* 固定的底部栏 */

.fixedBottom {
  position: fixed;
  bottom: 0;
  left: 0;
  width: 100%;
  height: 100rpx;
  background-color: pink;
}

.fixedBottom navigator {
  display: flex;
  justify-content: center;
  align-items: center;
  width: 100;
  height: 100%;
}

.fixedBottom navigator .carts-icon {
  width: 75rpx;
  height: 75rpx;
}

.fixedBottom navigator image {
  width: 100%;
  height: 100%;
}

/* 放入购物车,购物车按钮稍微放大一点的动画效果 */

@keyframes to_cart_scale {
  50% {
    transform: scale(1.2);
  }
}

.carts-icon.on {
  animation: to_cart_scale 0.3s ease;
}

.carts-icon {
  position: relative;
}

/* 购物车左边的物品数字显示 */

.carts-icon-num {
  position: absolute;
  left: -15rpx;
  width: 40rpx;
  height: 40rpx;
  line-height: 40rpx;
  border-radius: 50%;
  background: #ab956d;
  color: #fff;
  font-size: 24rpx;
  text-align: center;
}

.goods-box {
  position: relative;
  padding: 40rpx 45rpx;
  text-align: center;
  color: #454552;
  border-bottom: 30rpx solid #ededed;
}

.goods-stock {
  font-size: 28rpx;
  margin-bottom: 20rpx;
}

.goods-title {
  font-size: 40rpx;
  margin-bottom: 30rpx;
}

.goods-price {
  font-size: 40rpx;
}

/* 扔进去的过程,起步位置 */

@keyframes to_cart {
  0% {
    right: 80rpx;
    top: -20rpx;
    transform: scale(5);
    width: 10rpx;
    height: 10rpx;
  }

  100% {
    right: 430rpx;
    top: 900rpx;
    width: 5rpx;
    height: 5rpx;
  }
}

/* 点击加入购物车,扔出去的物品动画 */

.to-carts-icon {
  position: absolute;
  border-radius: 50%;
  opacity: 1;
  animation: to_cart 0.3s ease-out;
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
js加入购物车抛物线动画购物车效果特效,亲测可用, 当您在电商购物网站浏览中意的商品时,您可以点击页面中的“加入购物车”按钮即可将商品加入的购物车中。本文介绍借助一款基于jQuery的动画插件,点击加入购物车按钮时,实现商品将飞入到右侧的购物车中的效果。 HTML 首先载入jQuery库文件和jquery.fly.min.js插件。 复制代码 代码如下: 接着,将商品信息html结构布置好,本例中,我们用四个商品并排布置,每个商品box中包括有商品图片、价格、名称以及加入购物车按钮等信息。 复制代码 代码如下: ¥3499.00 LG 49LF5400-CA 49寸IPS硬屏富贵招财铜钱设计 加入购物车 ¥3799.00 Hisense/海信 LED50T1A 海信电视官方旗舰店 加入购物车 ¥¥3999.00 Skyworth/创维 50E8EUS 8核4Kj极清酷开系统智能液晶电视 加入购物车 ¥6969.00 乐视TV Letv X60S 4核1080P高清3D安卓智能超级电视 加入购物车 然后,我们还需要在页面的右侧加上购物车以及提示信息。 复制代码 代码如下: 购物车 已成功加入购物车! CSS 我们使用CSS先将商品排列美化,然后设置右侧购物车样式,具体请看代码: 复制代码 代码如下: .box{float:left; width:198px; height:320px; margin-left:5px; border:1px solid #e0e0e0; text-align:center} .box p{line-height:20px; padding:4px 4px 10px 4px; text-align:left} .box:hover{border:1px solid #f90} .box h4{line-height:32px; font-size:14px; color:#f30;font-weight:500} .box h4 span{font-size:20px} .u-flyer{display: block;width: 50px;height: 50px;border-radius: 50px;position: fixed;z-index: 9999;} .m-sidebar{position: fixed;top: 0;right: 0;background: #000;z-index: 2000;width: 35px;height: 100%;font-size: 12px;color: #fff;} .cart{color: #fff;t

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值