微信小程序 扭蛋抽奖机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 学习笔记(十六) js事件
Feb 01 Javascript
JS getStyle获取最终样式函数代码
Apr 01 Javascript
使用jquery.upload.js实现异步上传示例代码
Jul 29 Javascript
JS 对象属性相关(检查属性、枚举属性等)
Apr 05 Javascript
每天一篇javascript学习小结(Boolean对象)
Nov 12 Javascript
微信小程序 form组件详解
Oct 25 Javascript
关于Function中的bind()示例详解
Dec 02 Javascript
vue实现todolist单页面应用
Apr 11 Javascript
vue渲染时闪烁{{}}的问题及解决方法
Mar 28 Javascript
代码分析vue中如何配置less
Sep 28 Javascript
js实现窗口全屏示例详解
Sep 17 Javascript
layui字体图标 loading图标静止不旋转的解决方法
Sep 23 Javascript
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中获取内网用户MAC地址(WINDOWS/linux)的实现代码
2011/08/11 PHP
PHP实现全角字符转为半角方法汇总
2015/07/09 PHP
JQuery 浮动导航栏实现代码
2009/08/27 Javascript
纯CSS打造的导航菜单(附jquery版)
2010/08/07 Javascript
javaScript同意等待代码实现心得
2011/01/01 Javascript
浅谈Javascript面向对象编程
2011/11/15 Javascript
Google 地图类型详解及示例代码
2016/08/06 Javascript
jQuery实现发送验证码并60秒倒计时功能
2016/11/25 Javascript
canvas知识总结
2017/01/25 Javascript
纯JS实现弹性导航条效果
2017/03/06 Javascript
从零开始学习Node.js系列教程五:服务器监听方法示例
2017/04/13 Javascript
AngularJS全局警告框实现方法示例
2017/05/18 Javascript
Easyui和zTree两种方式分别实现树形下拉框
2017/08/04 Javascript
JQuery 又谈ajax局部刷新
2017/11/27 jQuery
详解js的视频和音频采集
2018/08/09 Javascript
初学node.js中实现删除用户路由
2019/05/27 Javascript
微信小程序实现下拉框功能
2019/07/16 Javascript
原生js实现五子棋游戏
2020/05/28 Javascript
jQuery列表动态增加和删除的实现方法
2020/11/05 jQuery
JS实现鼠标移动拖尾
2020/12/27 Javascript
图文详解WinPE下安装Python
2016/05/17 Python
python实现归并排序算法
2018/11/22 Python
基于python检查矩阵计算结果
2020/05/21 Python
Python字典取键、值对的方法步骤
2020/09/30 Python
电工技术比武方案
2014/05/11 职场文书
护士长2014年度工作总结
2014/11/11 职场文书
2014年大学生工作总结
2014/11/20 职场文书
2015年乡镇财政工作总结
2015/05/19 职场文书
业务员年终工作总结2015
2015/05/28 职场文书
追讨欠款律师函
2015/06/24 职场文书
2019年个人工作总结范文
2019/03/25 职场文书
超详细教你怎么升级Mysql的版本
2021/05/19 MySQL
CSS变量实现主题切换的方法
2021/06/23 HTML / CSS
Java详细解析==和equals的区别
2022/04/07 Java/Android
六个好看实用的 HTML + CSS 后台登录入口页面
2022/04/28 HTML / CSS
Python使用pyecharts控件绘制图表
2022/06/05 Python