微信小程序 扭蛋抽奖机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类
Sep 08 Javascript
Web Inspector:关于在 Sublime Text 中调试Js的介绍
Apr 18 Javascript
基于jQuery实现网页进度显示插件
Mar 04 Javascript
javascript通过获取html标签属性class实现多选项卡的方法
Jul 27 Javascript
比较常见的javascript中定义函数的区别
Nov 09 Javascript
基于MVC4+EasyUI的Web开发框架形成之旅之界面控件的使用
Dec 16 Javascript
js简单判断flash是否加载完成的方法
Jun 21 Javascript
js 自带的sort() 方法全面了解
Aug 16 Javascript
jQuery过滤选择器经典应用
Aug 18 Javascript
Node.js学习教程之HTTP/2服务器推送【译】
Oct 31 Javascript
ng-zorro-antd 入门初体验
Dec 03 Javascript
详解vue中v-model和v-bind绑定数据的异同
Aug 10 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
PHPnow安装服务[apache_pn]失败的问题的解决方法
2010/09/10 PHP
php和数据库结合的一个简单的web实例 代码分析 (php初学者)
2011/07/28 PHP
浅析PHP substr,mb_substr以及mb_strcut的区别和用法
2013/06/21 PHP
php之readdir函数用法实例
2014/11/13 PHP
thinkphp如何获取客户端IP
2015/11/03 PHP
ThinkPHP3.2框架自定义配置和加载用法示例
2018/06/14 PHP
Laravel中为什么不使用blpop取队列详析
2018/08/01 PHP
Javascript继承(上)——对象构建介绍
2012/11/08 Javascript
js局部刷新页面时间具体实现
2013/07/04 Javascript
jQuery实现统计复选框选中数量
2014/11/24 Javascript
javascript定义变量时加var与不加var的区别
2014/12/22 Javascript
微信企业号开发之微信考勤百度地图定位
2015/09/11 Javascript
原生JS获取元素集合的子元素宽度实例
2016/12/14 Javascript
详解JS中的柯里化(currying)
2017/08/17 Javascript
详解jquery插件jquery.viewport.js学习使用方法
2017/09/08 jQuery
BACKBONE.JS 简单入门范例
2017/10/17 Javascript
微信小程序使用Promise简化回调
2018/02/06 Javascript
深入理解 Koa 框架中间件原理
2018/10/18 Javascript
vue 点击展开显示更多(点击收起部分隐藏)
2019/04/09 Javascript
vue实现动态表格提交参数动态生成控件的操作
2020/11/09 Javascript
详解Django中的过滤器
2015/07/16 Python
python学习教程之Numpy和Pandas的使用
2017/09/11 Python
Python多进程multiprocessing.Pool类详解
2018/04/27 Python
使用Python写一个量化股票提醒系统
2018/08/22 Python
使用django-guardian实现django-admin的行级权限控制的方法
2018/10/30 Python
python之PyQt按钮右键菜单功能的实现代码
2019/08/17 Python
Python headers请求头如何实现快速添加
2020/11/03 Python
python爬虫beautifulsoup库使用操作教程全解(python爬虫基础入门)
2021/02/19 Python
谷歌浏览器小字体处理方案即12px以下字体
2013/12/17 HTML / CSS
美国第二大团购网站:LivingSocial
2016/07/24 全球购物
英国婴儿产品专家:Samuel Johnston
2020/04/20 全球购物
Sql面试题
2013/03/20 面试题
公司离职证明标准范本
2014/10/05 职场文书
中班教师个人总结
2015/02/05 职场文书
2015秋季开学典礼致辞
2015/07/16 职场文书
redis实现共同好友的思路详解
2021/05/26 Redis