微信小程序 扭蛋抽奖机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实现检测指定目录是否存在的方法
Jan 12 Javascript
非常有用的40款jQuery 插件推荐(系列二)
Dec 25 Javascript
ie8 不支持new Date(2012-11-10)问题的解决方法
Jul 31 Javascript
JS中数组重排序方法
Nov 11 Javascript
JS中对数组元素进行增删改移的方法总结
Dec 15 Javascript
js/jq仿window文件夹移动/剪切/复制等操作代码
Mar 08 Javascript
使用vue.js编写蓝色拼图小游戏
Mar 17 Javascript
Angular刷新当前页面的实现方法
Nov 21 Javascript
WebSocket的简单介绍及应用
May 23 Javascript
layui实现三级导航菜单
Jul 26 Javascript
React Native 混合开发多入口加载方式详解
Sep 23 Javascript
关于Js中new操作符的作用详解
Feb 21 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图片上传程序
2008/03/27 PHP
浅析php原型模式
2014/11/25 PHP
php+mysql数据库实现无限分类的方法
2014/12/12 PHP
使用PHP处理数据库数据如何将数据返回客户端并显示当前状态
2016/02/16 PHP
PHP中Cookie的使用详解(简单易懂)
2017/04/28 PHP
Laravel 集成微信用户登录和绑定的实现
2019/12/27 PHP
ThinkPHP 框架实现的读取excel导入数据库操作示例
2020/04/14 PHP
escape、encodeURI、encodeURIComponent等方法的区别比较
2006/12/27 Javascript
JavaScript CSS 修改学习第四章 透明度设置
2010/02/19 Javascript
WEB 浏览器兼容 推荐收藏
2010/05/14 Javascript
qTip 基于JQuery的Tooltip插件[兼容性好]
2010/09/01 Javascript
javascript实现字符串反转的方法
2015/02/05 Javascript
基于JavaScript将表单序列化类型的数据转化成对象的处理(允许对象中包含对象)
2015/12/28 Javascript
AngularJS优雅的自定义指令
2016/07/01 Javascript
Bootstrap Search Suggest使用例子
2016/12/21 Javascript
jQuery插件FusionCharts绘制的3D环饼图效果示例【附demo源码】
2017/04/02 jQuery
ionic3 懒加载
2017/08/16 Javascript
JS常见DOM节点操作示例【创建 ,插入,删除,复制,查找】
2018/05/14 Javascript
JS手写一个自定义Promise操作示例
2020/03/16 Javascript
关于angular 8.1使用过程中的一些记录
2020/11/25 Javascript
50行代码实现贪吃蛇(具体思路及代码)
2013/04/27 Python
Python实现将n个点均匀地分布在球面上的方法
2015/03/12 Python
Python中的getopt函数使用详解
2015/07/28 Python
centos+nginx+uwsgi+Django实现IP+port访问服务器
2019/11/15 Python
python 导入数据及作图的实现
2019/12/03 Python
详解python opencv、scikit-image和PIL图像处理库比较
2019/12/26 Python
python脚本实现mp4中的音频提取并保存在原目录
2020/02/27 Python
详解pandas中iloc, loc和ix的区别和联系
2020/03/09 Python
Monnier Frères美国官网:法国知名奢侈品网站
2016/11/22 全球购物
怀俄明州飞钓:Platte River Fly Shop
2017/12/28 全球购物
英文留学推荐信范文
2014/01/25 职场文书
2014两会优秀的心得体会范文
2014/03/17 职场文书
小学学习雷锋活动总结
2014/07/03 职场文书
对照四风自我剖析材料
2014/10/07 职场文书
遗嘱范文
2015/08/07 职场文书