这里使用小程序自带的api来实现,用小程序来写动画的恶心点在于,没有帧,只能用setimeout 来作为帧来使用,
下面是实现代码, 下面是简单用div代替了图片,需要什么图片,可以自行替换相应的div即可
需要变成原生小程序,则需要修改一下代码的写法
效果图:
创建金币动画组件 clockAnimation.vue
<template> <div class="container" v-if='isShow'> <!-- 创建金币对象 --> <!-- 大金币 --> <div :class="coinShow" :animation="bgCoinAnimation" ></div> <!-- 7个小金币 --> <div :class="coinShow" :animation="coinAnimation1">1</div> <div :class="coinShow" :animation="coinAnimation2">2</div> <div :class="coinShow" :animation="coinAnimation3">3</div> <div :class="coinShow" :animation="coinAnimation4">4</div> <div :class="coinShow" :animation="coinAnimation5">5</div> <div :class="coinShow" :animation="coinAnimation6">6</div> <div :class="coinShow" :animation="coinAnimation7">7</div> </div> </template> <script> export default{ data() { return { coinShow:false,//金币对象是否显示,用于重置动画时,隐藏对象 isShow:false, //遮罩显示 //大金币动画 bgCoinAnimation:{}, //小金币动画 coinAnimation1:{}, coinAnimation2:{}, coinAnimation3:{}, coinAnimation4:{}, coinAnimation5:{}, coinAnimation6:{}, coinAnimation7:{}, } }, methods: { //动画 animation(){ this.coinShow =false this.isShow = true this.bgAnimation() this.smallAnimation() }, //大金币动画 bgAnimation(){ var animation = wx.createAnimation({ duration:1000, timingFunction: 'ease-in-out', }) this.timer = setTimeout(()=>{ animation.translate3d(0,30,0).step().translate3d(0,0,0).step().rotate(80).step({duration:400}).rotate(0).step({duration:500}) this.bgCoinAnimation = animation.export() },100) setTimeout(()=>{ animation.opacity(0).scale(4).step() this.bgCoinAnimation = animation.export() },3000) }, //小金币动画 smallAnimation(){ var animation = wx.createAnimation({ duration:1000, timingFunction: 'ease-in-out', }) animation.translate3d(0,30,0).step().translate3d(0,0,0).step() setTimeout(()=>{ this.coinAnimation1 = animation },300) setTimeout(()=>{ this.coinAnimation2 = animation },500) setTimeout(()=>{ this.coinAnimation3 = animation },600) setTimeout(()=>{ this.coinAnimation4 = animation },700) setTimeout(()=>{ this.coinAnimation5 = animation },800) setTimeout(()=>{ this.coinAnimation6 = animation },900) setTimeout(()=>{ this.coinAnimation7 = animation.export() },1000) //小金币掉落动画 setTimeout(()=>{ animation.translate3d(0,1000,0).step() this.coinAnimation1 = animation this.coinAnimation2 = animation this.coinAnimation3 = animation this.coinAnimation4 = animation this.coinAnimation5= animation this.coinAnimation6 = animation this.coinAnimation7 = animation },3000) //动画结束,重置动画初始位置 setTimeout(()=>{ this.coinShow =true var animation = wx.createAnimation({ duration:300, timingFunction: 'ease-in-out', }) var animation2 = wx.createAnimation({ duration:300, timingFunction: 'ease-in-out', }) animation.translate3d(0,-1000,0).step() animation2.translate3d(0,-1000,0).step().scale(1).step() this.bgCoinAnimation = animation2.export() this.coinAnimation1 = animation this.coinAnimation2 = animation this.coinAnimation3 = animation this.coinAnimation4 = animation this.coinAnimation5= animation this.coinAnimation6 = animation this.coinAnimation7 = animation setTimeout(()=>{ this.isShow = false },500) },4000) } }, mounted () { }, onShow(){ } } </script> <style lang="scss" scoped> .container{ position:absolute; top:0; left: 0; width: 100%; height: 100vh; // z-index: 999; background: rgba(5, 5, 5,0.5) } .bgCoin{ background: rgb(233, 201, 19); border-radius: 50%; width: 100rpx; height: 100rpx; position: absolute; left: 350rpx; margin-left:-50rpx; top:600rpx; text-align: center; line-height: 100rpx; color: #ffffff; transform:rotate(180deg); transform:translate3d(0,-1000rpx,0); } .coinShow{ opacity: 0; } .coin{ background: rgb(233, 201, 19); border-radius: 50%; width: 50rpx; height: 50rpx; position: absolute; font-size: 24rpx; text-align: center; line-height: 40rpx; color: #ffffff; transform:translate3d(0,-1000rpx,0); } .coin1{ top:40rpx; left:60rpx; } .coin2{ top:90rpx; left:200rpx; } .coin3{ top:860rpx; left:250rpx; } .coin4{ top:150rpx; left:600rpx; } .coin5{ top:270rpx; left:500rpx; } .coin6{ top:490rpx; left:580rpx; } .coin7{ top:350rpx; left:150rpx; } </style>
使用 引入组件
<template> <view> <view @click="clockInAnimation">立即签到</view> <clockAnimation :isShow="clockIsShow" ref="clockAnimation"></clockAnimation> </view> </template> <script> //引入组件 import clockAnimation from "../../components/clockAnimation.vue"; export default { components: { clockAnimation }, data() { return { clockIsShow: false, } }, methods: { clockInAnimation() { this.clockIsShow = true; this.$refs.clockAnimation.animation(); }, } </script>
总结
以上所述是小编给大家介绍的mpvue实现小程序签到金币掉落动画(api实现),希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线
暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。
艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。
《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。
更新日志
- 罗志祥《舞状元 (Explicit)》[FLAC/分轨][360.76MB]
- Tank《我不伟大,至少我能改变我。》[320K/MP3][160.41MB]
- Tank《我不伟大,至少我能改变我。》[FLAC/分轨][236.89MB]
- CD圣经推荐-夏韶声《谙2》SACD-ISO
- 钟镇涛-《百分百钟镇涛》首批限量版SACD-ISO
- 群星《继续微笑致敬许冠杰》[低速原抓WAV+CUE]
- 潘秀琼.2003-国语难忘金曲珍藏集【皇星全音】【WAV+CUE】
- 林东松.1997-2039玫瑰事件【宝丽金】【WAV+CUE】
- 谭咏麟.2022-倾·听【环球】【WAV+CUE】
- 4complete《丛生》[320K/MP3][85.26MB]
- 4complete《丛生》[FLAC/分轨][218.01MB]
- 羽泉《给未来的你&天黑天亮》[WAV+CUE][968M]
- 庄心妍《我也许在等候》[低速原抓WAV+CUE]
- 王雅洁《小调歌后2》[原抓WAV+CUE]
- 中国武警男声合唱团《辉煌之声1天路》[DTS-WAV分轨]