微信小程序:扭蛋抽奖机-css3动画实现

最近快速上线一个抽奖活动,又不想用canvas做,思考了很久,还是决定使用css3的动画来做,只要小球动得快,就没人发现我这些个小球的运动路径都是一样的了。先上动图


扭蛋机抽奖.gif
wxml文件:
<view class="ball-box">
      <image class="ball ball_1 {{start?'weiyi_1':''}}" src="https://acceleratepic.miniso.com/miniso/ball1.png"></image>
      <image class="ball ball_2 {{start?'weiyi_2':''}}" src="https://acceleratepic.miniso.com/miniso/ball1.png"></image>
      <image class="ball ball_3 {{start?'weiyi_3':''}}" src="https://acceleratepic.miniso.com/miniso/ball2.png"></image>
      <image class="ball ball_4 {{start?'weiyi_4':''}}" src="https://acceleratepic.miniso.com/miniso/ball2.png"></image>
      <image class="ball ball_5 {{start?'weiyi_5':''}}" src="https://acceleratepic.miniso.com/miniso/ball1.png"></image>
      <image class="ball ball_6 {{start?'weiyi_6':''}}" src="https://acceleratepic.miniso.com/miniso/ball2.png"></image>
      <image class="ball ball_7 {{start?'weiyi_7':''}}" src="https://acceleratepic.miniso.com/miniso/ball3.png"></image>
      <image class="ball ball_8 {{start?'weiyi_8':''}}" src="https://acceleratepic.miniso.com/miniso/ball3.png"></image>
      <image class="ball ball_9 {{start?'weiyi_9':''}}" src="https://acceleratepic.miniso.com/miniso/ball3.png"></image>
      <image class="ball ball_10 {{start?'weiyi_10':''}}" src="https://acceleratepic.miniso.com/miniso/ball4.png"></image>
      <image class="ball ball_11 {{start?'weiyi_11':''}}" src="https://acceleratepic.miniso.com/miniso/ball4.png"></image>
</view>

这个做得我头皮发麻,但是写这篇文章时突然想到,为啥不用个for循环来做呢?!

<view class="ball-box">
  <image wx:for="ballList" wx:for-index="i" class="ball ball_{{i}} {{start?'weiyi_{{i}}':''}}" src="https://acceleratepic.miniso.com/miniso/ball{{i}}.png"></image>
</view>

这样看起来是不是舒服多了,因为是这段代码现场手写,如果有啥bug也不好说。

wxss文件:
.weiyi_1 {
  animation: around1 1.5s linear infinite;
  -webkit-animation: around1 1.5s linear infinite;
}

简单的动画

/* 位移 */

@-webkit-keyframes around1 {
  0% {
    -webkit-transform: translate(0rpx, 0rpx)
  }
  20% {
    -webkit-transform: translate(100rpx, -250rpx)
  }
  40% {
    -webkit-transform: translate(200rpx, -100rpx)
  }
  60% {
    -webkit-transform: translate(50rpx, -230rpx)
  }
  80% {
    -webkit-transform: translate(300rpx, -50rpx)
  }
  100% {
    -webkit-transform: translate(0, 0)
  }
}

@keyframes around1 {
  0% {
    transform: translate(0rpx, 0rpx)
  }
  20% {
    transform: translate(100rpx, -250rpx)
  }
  40% {
    transform: translate(200rpx, -100rpx)
  }
  60% {
    transform: translate(50rpx, -230rpx)
  }
  80% {
    transform: translate(300rpx, -50rpx)
  }
  100% {
    transform: translate(0, 0)
  }
}

简单的位移
其他就不一一列出来了,反正都差不多,改变一下运动轨迹就行了。

js文件:

相比丧病的样式,js文件就简单多了。

_this.setData({
  start: true
})

控制抽奖开始

setTimeout(() => {
        _this.setData({
          start: false,
          end: true
        })
      //其他代码部分
      //time是接口请求开始到结束的时间
}, Math.ceil(time / 1500) * 1500 - time)

这里用了一个setTimeout,用于设置动画结束时间,优化一下动画,不让结束看起来太突兀。
1500是wxss里这是的动画时间。

总结:

简单的扭蛋机,有时间用canvas来做做。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 每天的学习记录,可能有的地方写的不对,因为刚学,以后发现错的话会回来改掉整体流程 https://develope...
    有点健忘阅读 5,018评论 0 7
  • 1:官方工具:https://mp.weixin.qq.com/debug/w ... tml?t=1476434...
    Programmer客栈阅读 39,533评论 3 105
  • 创建小程序 新建项目选择小程序项目,选择代码存放的硬盘路径,填入刚刚申请到的小程序的 AppID,给你的项目起一个...
    Hachiman阅读 1,261评论 0 2
  • 决定开始写些文章,还是近两年的事。在此之前,玩转过很多博客、空间,许多小事写写当作生活的记录,特别是准备考研考博的...
    海上书阅读 519评论 0 2
  • 第七章 出发向阳市 出来后看见空地上熟悉的笑容,李杰,宇成,春生,祥龙,我快步走过去和他们热情...
    你老公叫小四么阅读 152评论 0 0

友情链接更多精彩内容