微信小程序 扭蛋抽奖机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 相关文章推荐
IE6/7 and IE8/9/10(IE7模式)依次隐藏具有absolute或relative的父元素和子元素后再显示父元素
Jul 31 Javascript
javascript判断是否按回车键并解决浏览器之间的差异
May 13 Javascript
node.js中的console.error方法使用说明
Dec 10 Javascript
实例讲解jquery中mouseleave和mouseout的区别
Feb 17 Javascript
js遍历json对象所有key及根据动态key获取值的方法(必看)
Mar 09 Javascript
详解angularJS+Ionic移动端图片上传的解决办法
Sep 13 Javascript
Vee-Validate的使用方法详解
Sep 22 Javascript
vue项目中应用ueditor自定义上传按钮功能
Apr 27 Javascript
解决Layui 表格自适应高度的问题
Nov 15 Javascript
vue.js+ElementUI实现进度条提示密码强度效果
Jan 18 Javascript
在vue中使用Echarts利用watch做动态数据渲染操作
Jul 20 Javascript
基于js实现的图片拖拽排序源码实例
Nov 04 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之第六天
2006/10/09 PHP
PHP脚本中include文件出错解决方法
2008/11/20 PHP
php 文件状态缓存带来的问题
2008/12/14 PHP
PHP 读取大文件并显示的简单实例(推荐)
2016/08/12 PHP
JQuery的Validation插件中Remote验证的中文问题
2010/07/26 Javascript
常见效果实现之返回顶部(结合淡入、淡出、减速滚动)
2012/01/04 Javascript
jquery打开直接跳到网页最下面、最低端实现代码
2013/04/22 Javascript
js去空格技巧分别去字符串前后、左右空格
2013/10/21 Javascript
基于jquery实现鼠标滚轮驱动的图片切换效果
2015/10/26 Javascript
zTree树形插件异步加载方法详解
2017/06/14 Javascript
微信小程序模版渲染详解
2018/01/26 Javascript
Vue利用canvas实现移动端手写板的方法
2018/05/03 Javascript
JS实现可视化文件上传
2018/09/08 Javascript
微信小程序学习笔记之本地数据缓存功能详解
2019/03/29 Javascript
前端面试知识点目录一览
2019/04/15 Javascript
[08:56]DOTA2-DPC中国联赛2月23日Recap集锦
2021/03/11 DOTA
Python中每次处理一个字符的5种方法
2015/05/21 Python
python中redis的安装和使用
2016/12/04 Python
Python实现选择排序
2017/06/04 Python
Python编程之序列操作实例详解
2017/07/22 Python
Python3实现取图片中特定的像素替换指定的颜色示例
2019/01/24 Python
详解python校验SQL脚本命名规则
2019/03/22 Python
tensorflow对图像进行拼接的例子
2020/02/05 Python
基于nexus3配置Python仓库过程详解
2020/06/15 Python
python中plt.imshow与cv2.imshow显示颜色问题
2020/07/16 Python
python爬取代理ip的示例
2020/12/18 Python
使用CSS3来实现滚动视差效果的教程
2015/08/24 HTML / CSS
Java面试题:说出如下代码的执行结果
2015/10/30 面试题
电信专业应届生自荐信
2013/09/28 职场文书
高二物理教学反思
2014/02/08 职场文书
微电影大赛策划方案
2014/06/05 职场文书
莫言诺贝尔获奖感言(全文)
2015/07/31 职场文书
Python读取文件夹下的所有文件实例代码
2021/04/02 Python
Django显示可视化图表的实践
2021/05/10 Python
python 如何将两个实数矩阵合并为一个复数矩阵
2021/05/19 Python
总结高并发下Nginx性能如何优化
2021/11/01 Servers