微信小程序 扭蛋抽奖机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 相关文章推荐
一些易混淆且不常用的属性,希望有用
Jan 29 Javascript
javascript设计模式 接口介绍
Jul 24 Javascript
浅析JQuery获取和设置Select选项的常用方法总结
Jul 04 Javascript
javascript事件函数中获得事件源的两种不错方法
Mar 17 Javascript
jQuery实现在列表的首行添加数据
May 19 Javascript
JavaScript获取各大浏览器信息图示
Nov 20 Javascript
详解jQuery Mobile自定义标签
Jan 06 Javascript
你可能不知道的前端算法之文字避让(inMap)
Jan 12 Javascript
node使用promise替代回调函数
May 07 Javascript
利用jquery和BootStrap实现动态滚动条效果
Dec 03 jQuery
详解vue的双向绑定原理及实现
May 05 Javascript
layui加载表格,绑定新增,编辑删除,查看按钮事件的例子
Sep 06 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
PHPMyadmin 配置文件详解(配置)
2009/12/03 PHP
解析php框架codeigniter中如何使用框架的session
2013/06/24 PHP
PHP 微信支付类 demo
2015/11/30 PHP
Zend Framework教程之MVC框架的Controller用法分析
2016/03/07 PHP
jQuery Ajax方法调用 Asp.Net WebService 的详细实例代码
2011/04/27 Javascript
jquery导航制件jquery鼠标经过变色效果示例
2013/12/05 Javascript
jQuery绑定事件监听bind和移除事件监听unbind用法实例详解
2016/01/19 Javascript
在其他地方你学不到的jQuery小贴士和技巧(欢迎收藏)
2016/01/20 Javascript
基于Bootstrap实现Material Design风格表单插件 附源码下载
2016/04/18 Javascript
JS组件Bootstrap Table布局详解
2016/05/27 Javascript
javascript中setAttribute兼容性用法分析
2016/12/12 Javascript
Bootstrap禁用响应式布局的实现方法
2017/03/09 Javascript
详解如何构建一个Angular6的第三方npm包
2018/09/07 Javascript
Node.js中的不安全跳转如何防御详解
2018/10/21 Javascript
BootstrapValidator实现表单验证功能
2019/11/08 Javascript
jQuery实现的上拉刷新功能组件示例
2020/05/01 jQuery
Node在Controller层进行数据校验的过程详解
2020/08/28 Javascript
python使用pil生成图片验证码的方法
2015/05/08 Python
python 多线程实现检测服务器在线情况
2015/11/25 Python
Python中eval带来的潜在风险代码分析
2017/12/11 Python
对Django外键关系的描述
2019/07/26 Python
Python3 操作 MySQL 插入一条数据并返回主键 id的实例
2020/03/02 Python
在python中使用pyspark读写Hive数据操作
2020/06/06 Python
CSS3的常见transformation图形变化用法小结
2016/05/13 HTML / CSS
HTML5图片预览实例分享
2014/06/04 HTML / CSS
澳大利亚领先的宠物用品商店:VetSupply
2017/09/08 全球购物
授权委托书怎么写
2014/04/03 职场文书
工程材料采购方案
2014/05/18 职场文书
让生命充满爱观后感
2015/06/08 职场文书
追悼会悼词大全
2015/06/23 职场文书
初中运动会前导词
2015/07/20 职场文书
学习党史心得体会2016
2016/01/23 职场文书
子女赡养老人协议书
2016/03/23 职场文书
Python中使用Opencv开发停车位计数器功能
2022/04/04 Python
Win11 引入 Windows 365 云操作系统,适应疫情期间混合办公模式:启动时直接登录、模
2022/04/06 数码科技
部分武汉产收音机展览
2022/04/07 无线电