微信小程序加入购物车效果动画

微信小程序加入购物车效果动画

前言

好久没有写过博客了,最近做了个微信小程序(后面统称小程序)加入购物车动画效果,然后给大家分享下。还是老规矩,先看效果图镇楼。在这里插入图片描述
因为是demo,所以UI美观度请无视,如果是你需要的效果或者功能,那就请接下来往下看。

准备

准备一张购物车图片,如下
shopcar

实现

实现这个效果主要就是用小程序提供的动画相关的API,如果你对小程序动画相关的API还不了解,可以移步官方教程:微信小程序动画官方教程

原理

  • 右下角放一个购物车的icon,然后设置position为fixed,让购物车按钮浮动在content上。不理解为什么要这么做的请参考我之前的系列文章微信小程序布局技巧
  • 页面上放置一个position为fixed的飞行点,也就是上图中的绿色点,默认隐藏。
  • 在页面渲染完成之后获取购物车在页面中的坐标。
  • 通过tap事件获取到tap点的坐标,将步骤2中的飞行点移动到点击处。
  • 通过小程序动画相关的API(Animation.left和Animation.top)来执行动画到购物车处。

布局

<view class="container">
  <view wx:for='12345678901234567' class="item" bindtap="addshopcar" hover-class="hover">商品{{index}}</view>
</view>
<view class="dot" animation='{{ani}}' hidden="{{!showdot}}">+1</view>
<view class="count">{{count}}</view>
<view class="shopcar" id="shopcar">
  <image src="../../images/shopcar.png" class="shopcarimg"></image>
</view>

在和pages同级目录新增一个images目录,将购物车图片放入images根目录,然后引用,想必上面的布局文件应该没有什么问题和难度。

样式

.container {
  height: 100%;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: space-between;
  box-sizing: border-box;
} 

.item {
  width: 720rpx;
  height: 100rpx;
  display: flex;
  flex-direction: row;
  align-items: center;
  font-weight: bold;
  padding-left: 30rpx;
  border-bottom: 1rpx solid #efeff4;
}

.hover {
  background: #d9d9db;
}

.dot {
  top: 0;
  left: 0;
  position: fixed;
  width: 40rpx;
  height: 40rpx;
  border-radius: 50%;
  background: #1dae01;
  display: flex;
  flex-direction: row;
  justify-content: center;
  align-items: center;
  font-size: 24rpx;
  color: white;
}

.shopcar {
  position: fixed;
  right: 40rpx;
  bottom: 60rpx;
}

.shopcarimg {
  width: 48rpx;
  height: 48rpx;
}

.count {
  color: red;
  position: fixed;
  font-weight: bold;
  right: 30rpx;
  bottom: 100rpx;
}

布局中用到的样式文件就是以上这些,基本都是一些常规属性,如果对以上还是不能理解,可以查看我之前的布局技巧的系列文章。

逻辑实现

由于代码量也不多,直接就贴出来了,然后关键步骤会做好注释

//方便引用自身
var that
Page({
  data: {
  	//购物车x坐标
    animationx: 0,
    //购物车y坐标
    animationy: 0,
    //是否显示飞行物,默认不显示
    showdot: false,
    //动画对象
    ani: {},
    //商品记数
    count: 0
  },
  onLoad(options) {
    that = this
  },
  onReady() {
  	//页面渲染完后获取购物车在页面中的坐标
    const query = wx.createSelectorQuery()
    query.select('#shopcar').boundingClientRect()
    query.selectViewport().scrollOffset()
    query.exec(function(res) {
      let point = res[0]
      //坐标修正,让飞行物可以正好落在购物车正中心,20是飞行物宽度一半然后转化成px
      var xtemp = (point.left + point.right) / 2 - 20 / 750 * wx.getSystemInfoSync().windowWidth
      var ytemp = (point.top + point.bottom) / 2 - 20 / 750 * wx.getSystemInfoSync().windowWidth
      console.log('xtemp : ' + xtemp + ' ytemp : ' + ytemp)
      that.setData({
      	//获取修正后坐标
        animationx: xtemp,
        animationy: ytemp
      })
    })
  },
  addshopcar(e){
    if(that.data.showdot == true){
      return
    }
    //获取点击点坐标
    var touches = e.touches[0]
    //坐标修正,同上,这么做是为了让飞行点落到点击的中心
    let toptemp = touches.clientY - 20 / 750 * wx.getSystemInfoSync().windowWidth
    let lefttemp = touches.clientX - 20 / 750 * wx.getSystemInfoSync().windowWidth
    console.log('toptemp : ' + toptemp + ' lefttemp : ' + lefttemp)
    var animation1 = wx.createAnimation({
      duration: 1,
      timingFunction: 'ease'
    })
    //通过极短的时间让飞行点移动到手指点击位置,同时让飞行点显示出来
    animation1.left(lefttemp).top(toptemp).step()
    that.setData({
      ani: animation1.export(),
      showdot: true
    })
	
	//然后让飞行点飞行到购物车坐标处,形成添加效果
    setTimeout(function(){
      const animation = wx.createAnimation({
        duration: 1500,
        timingFunction: 'ease'
      })
      //通过Animation的left和top这两个API,将飞行点移动到购物车坐标处
      animation.left(that.data.animationx).top(that.data.animationy).step()
      that.setData({
        ani: animation.export()
      })
      setTimeout(function () {
        var counttemp = that.data.count + 1
        that.setData({
          showdot: false,
          ani: null,
          count: counttemp
        })
      }.bind(this), 1520)//这里也是要稍微延后,后隐藏飞行点,然后清除动画,增加购物计数器
    },5)//注意这里要稍微延后,保证前面移动到手指点击处的动画完成
  }
})

以上就是所有的逻辑实现了, 然后对比注释然后,发现是不是一切都如此简单了。

尾巴

当然你也可以再每个item固定地方放置按钮,然后点击按钮来实现不同的效果,各位自由发挥了。
老规矩,喜欢我的文章,欢迎素质三连:点赞,评论,关注,谢谢大家!

  • 14
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
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
### 回答1: 微信小程序demo精选是指在微信小程序开发过程中,经过筛选和精心设计,选取出来的一些优秀的示例应用程序。这些示例程序往往具备丰富的功能,可以展示各种不同的开发技巧和效果,能够帮助开发者更好地理解和掌握微信小程序的开发方法。 微信小程序demo精选的好处是多方面的。首先,它可以提供给开发者初学者一个学习的范例,帮助他们减少入门难度,更快地上手开发。其次,通过参考这些示例程序,可以学习到一些常见的功能实现方法和交互设计技巧,从而提升自己的开发能力和用户体验。最重要的是,通过参考和尝试这些示例程序,开发者可以根据自己的需求进行修改和扩展,以快速实现自己的小程序开发目标。 微信小程序demo精选的内容丰富多样,包括但不限于商城类、社交类、工具类等,涵盖了各种不同场景和功能需求。例如,商城类的示例程序可以展示商品展示、搜索、购买和支付等功能;社交类的示例程序可以展示朋友圈、私信聊天等功能;工具类的示例程序可以展示天气查询、二维码生成等实用功能。除了基本功能之外,这些示例程序还通常会包含一些特效和动画效果,以增加用户的使用乐趣。 总之,微信小程序demo精选是一个非常有价值的资源库,可以帮助开发者更好地理解和掌握微信小程序的开发技巧,同时也可以节省开发时间和提高开发效率。对于刚入门的开发者来说,通过参考和学习这些示例程序,可以更好地理解小程序的开发原理和思路,为将来的项目开发打下坚实的基础。 ### 回答2: 微信小程序是一种轻量级的应用程序,它可以在微信中进行使用。微信小程序demo精选是指在微信小程序中展示的一些精选示例,用于展示小程序的功能和使用方式。 微信小程序demo精选包括了各种不同类型的小程序,例如购物、社交、工具等。这些示例小程序通过展示各种功能和界面设计,帮助开发者更好地了解微信小程序的开发流程和特性。 通过微信小程序demo精选,可以看到小程序可以实现的功能非常丰富。比如,购物类小程序可以展示商品列表、购物车、订单管理等功能;社交类小程序可以展示朋友圈、私信功能等;工具类小程序可以展示天气查询、电影票预订等功能。这些功能可以满足用户的各种需求,并且在微信的生态系统中具有优势。 微信小程序demo精选还可以帮助开发者了解小程序的界面设计和用户体验。通过观察这些示例,开发者可以学习到如何设计小程序的界面,如何提供良好的用户体验等。这对于开发者提升自己的小程序开发能力非常有帮助。 总的来说,微信小程序demo精选是一个展示微信小程序功能和设计的示例集合。它能够帮助开发者更好地了解和学习小程序的开发,同时也给用户提供了多样化、方便快捷的小程序使用体验。
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值