微信小程序 扭蛋抽奖机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 13 Javascript
两种不同的方法实现js对checkbox进行全选和反选
May 13 Javascript
JavaScript学习笔记之JS对象
Jan 22 Javascript
jquery中ajax处理跨域的三大方式
Jan 05 Javascript
基于jquery实现百度新闻导航菜单滑动动画
Mar 15 Javascript
js 基础篇必看(点击事件轮播图的简单实现)
Aug 20 Javascript
jQuery图片轮播实现并封装(一)
Dec 03 Javascript
Bootstrap 模态框(Modal)插件代码解析
Dec 21 Javascript
如何用JS/HTML将时间戳转换为“xx天前”的形式
Feb 06 Javascript
页面缩放兼容性处理方法(zoom,Firefox火狐浏览器)
Aug 29 Javascript
vue2实现搜索结果中的搜索关键字高亮的代码
Aug 29 Javascript
JavaScript实现的级联算法示例【省市二级联动功能】
Dec 25 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在Web开发领域的优势
2006/10/09 PHP
NOT NULL 和NULL
2007/01/15 PHP
php不用内置函数对数组排序的两个算法代码
2010/02/08 PHP
php读取mysql乱码,用set names XXX解决的原理分享
2011/12/29 PHP
PHP-FPM和Nginx的通信机制详解
2019/02/01 PHP
JavaScript 学习小结(适合新手参考)
2009/07/30 Javascript
Firefox下提示illegal character并出现乱码的原因
2010/03/25 Javascript
jQuery学习笔记[1] jQuery中的DOM操作
2010/12/03 Javascript
createElement与createDocumentFragment的点点区别小结
2011/12/19 Javascript
50款非常棒的 jQuery 插件分享
2012/03/29 Javascript
JS连接SQL数据库与ACCESS数据库的方法实例
2013/11/21 Javascript
jquery mobile页面跳转后样式丢失js失效的解决方法
2014/09/06 Javascript
JavaScript获取文本框内选中文本的方法
2015/02/20 Javascript
JavaScript使表单中的内容显示在屏幕上的方法
2015/06/29 Javascript
Javascript仿新浪游戏频道鼠标悬停显示子菜单效果
2015/08/21 Javascript
js如何判断访问是来自搜索引擎(蜘蛛人)还是直接访问
2015/09/14 Javascript
Bootstrap树形组件jqTree的简单封装
2016/01/25 Javascript
JS在onclientclick里如何控制onclick的执行
2016/05/30 Javascript
详解Angular 中 ngOnInit 和 constructor 使用场景
2017/06/22 Javascript
JS对象序列化成json数据和json数据转化为JS对象的代码
2017/08/23 Javascript
vue-router 中 meta的用法详解
2019/11/01 Javascript
python局域网ip扫描示例分享
2014/04/03 Python
Python 中 list 的各项操作技巧
2017/04/13 Python
python正则表达式面试题解答
2020/04/28 Python
Python读取txt内容写入xls格式excel中的方法
2018/10/11 Python
关于PyTorch 自动求导机制详解
2019/08/18 Python
Python爬虫实现模拟点击动态页面
2020/03/05 Python
html5简介_动力节点Java学院整理
2017/07/07 HTML / CSS
美国购买汽车零件网站:Buy Auto Parts
2018/04/02 全球购物
英国豪华文具和皮具配件经典老品牌:Smythson(斯迈森)
2018/04/19 全球购物
平面设计专业求职信
2014/08/09 职场文书
地下停车场租赁协议范本
2014/10/07 职场文书
2015年世界无烟日活动方案
2015/05/04 职场文书
行政诉讼答辩状
2015/05/21 职场文书
MySQL 8.0 之不可见列的基本操作
2021/05/20 MySQL
html+css实现分层金字塔的实例
2021/06/02 HTML / CSS