uniapp--简单实现红包雨demo

<template>
	<view class="home">
		<view class="content">
				<view @animationend="runend(index)" @animationstart="runstart(index)" v-for="(item,index) in packStyle" :key="index" class="envelope" :style="item">
					
				</view>
			
		</view>
	</view>
</template>

<script>
   
export default {
	data() {
		return {
			packStyle: []
		};
	},
	onLoad() {
		// 随即生成红包
		this.createRedPack();
	},
	mounted() {
		
	},
	onReady() {
		
	},
	methods: {
		runstart(key){
			if(key===0){
				console.log('监听动画开始');
			}	
		},
		runend(key){
			if(key===this.packStyle.length-1){
				console.log('监听动画结束---下一波红包开始');
				this.createRedPack()
			}
		},
		createRedPack(){
			// 随机生成30个红包
			var initNumber = 0;
			for (var i = 0; i < 60; i++) {
			   let lefts = (Math.floor(Math.random()*5+5)); // 随机边距
			   let delay = Math.floor(Math.random()*5+2); // 延迟时间
			   initNumber+=lefts; // 确保唯一,不让红包出现重叠现象
			   this.packStyle.push({
				   'left': initNumber+'%',
				   'top': lefts+'px',
				   'animation-delay': delay/2+'s'
			   })
			}	
		}
	}
};
</script>

<style>
.home {
	width: 100%;
	height: 100%;
}
.content {
  position: relative;
  height: 100%;
  background: #fff;
  overflow: hidden;
}
.envelope {
	position: fixed;
	opacity: 0;
	animation: drops 1.2s cubic-bezier(.22,.22,.39,.26) 1;
	width: 60px;
	height: 60px;
	background: url(../../static/hongbaotu.png) no-repeat;
	/* background-color: #007AFF; */
	background-size: 60px 60px;
}
@keyframes drops {
  0% {
    opacity: 0;
  }
  20% {
    opacity: 1;
  }
  90% {
    opacity: 1;
  }
  100% {
    opacity: 0;
    transform: translate3d(10px, 100vh, -10px);
  }
}
</style>

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值