微信小程序 扭蛋抽奖机css3动画实现详解


Posted in Javascript onJuly 19, 2019

前言

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

微信小程序 扭蛋抽奖机css3动画实现详解

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来做做。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
Javascript公共脚本库系列(一): 弹出层脚本
Feb 24 Javascript
javascript setTimeout和setInterval计时的区别详解
Jun 21 Javascript
bootstrap data与jquery .data
Jul 07 Javascript
javascript动态创建及删除元素的方法
Dec 22 Javascript
详解AngularJS中的表达式使用
Jun 16 Javascript
jQuery如何获取动态添加的元素
Jun 24 Javascript
jQuery中each循环的跳出和结束实例
Aug 16 jQuery
js注册时输入合法性验证方法
Oct 21 Javascript
react中实现搜索结果中关键词高亮显示
Jul 31 Javascript
vue vantUI tab切换时 list组件不触发load事件的问题及解决方法
Feb 14 Javascript
vue实现五子棋游戏
May 28 Javascript
Vue Mint UI mt-swipe的使用方式
Jun 05 Vue.js
Vue配置marked链接添加target=&quot;_blank&quot;的方法
Jul 19 #Javascript
vue-cli 项目打包完成后运行文件路径报错问题
Jul 19 #Javascript
Smartour 让网页导览变得更简单(推荐)
Jul 19 #Javascript
bootstrap Table实现合并相同行
Jul 19 #Javascript
Element-ui DatePicker显示周数的方法示例
Jul 19 #Javascript
element-ui 中使用upload多文件上传只请求一次接口
Jul 19 #Javascript
深入浅析ng-bootstrap 组件集中 tabset 组件的实现分析
Jul 19 #Javascript
You might like
PHP时间和日期函数详解
2015/05/08 PHP
如何在PHP中生成随机数
2020/06/04 PHP
Aster vs Newbee BO5 第三场2.19
2021/03/10 DOTA
range 标准化之获取
2011/08/28 Javascript
JavaScript高级程序设计 客户端存储学习笔记
2011/09/10 Javascript
Javascript执行效率全面总结
2013/11/04 Javascript
jquery复选框checkbox实现删除前判断
2014/04/20 Javascript
Winform客户端向web地址传参接收参数的方法
2016/05/17 Javascript
js放大镜放大购物图片效果
2017/01/18 Javascript
手把手教你使用vue-cli脚手架(图文解析)
2017/11/08 Javascript
nodejs实现OAuth2.0授权服务认证
2017/12/27 NodeJs
浅谈Angularjs中不同类型的双向数据绑定
2018/07/16 Javascript
JavaScript实现选项卡效果的分析及步骤
2019/04/16 Javascript
用Vue编写抽象组件的方法
2019/05/06 Javascript
微信小程序学习总结(四)事件与冒泡实例分析
2020/06/04 Javascript
python原始套接字编程示例分享
2014/02/21 Python
Python统计列表中的重复项出现的次数的方法
2014/08/18 Python
Python连接PostgreSQL数据库的方法
2016/11/28 Python
Python 类的继承实例详解
2017/03/25 Python
Python PO设计模式的具体使用
2019/08/16 Python
django中间键重定向实例方法
2019/11/10 Python
Numpy中ndim、shape、dtype、astype的用法详解
2020/06/14 Python
HTML5自定义data-* data(obj)属性和jquery的data()方法的使用
2012/12/13 HTML / CSS
欧洲领先的电子和电信零售商和服务提供商:Currys PC World Business
2017/12/05 全球购物
奥地利票务门户网站:oeticket.com
2019/12/31 全球购物
ASP.NET中的身份验证有那些
2012/07/13 面试题
车辆安全检查制度
2014/01/12 职场文书
《可爱的动物》教学反思
2014/02/22 职场文书
办公室员工岗位工作职责
2014/03/10 职场文书
我的中国梦演讲稿初中篇
2014/08/19 职场文书
销售员试用期自我评价
2014/09/15 职场文书
2015企业年终工作总结范文
2015/05/27 职场文书
副校长2015年教育教学工作总结
2015/07/27 职场文书
描述鲁迅的名言整理,一生受用
2019/08/08 职场文书
使用pandas或numpy处理数据中的空值(np.isnan()/pd.isnull())
2021/05/14 Python
微信告警的zabbix监控系统 监控整个NGINX集群
2022/04/18 Servers