uniapp弹幕

news2024/12/27 13:49:49

效果图
在这里插入图片描述
barrage.vue

<template>
	<view class="l-barrage">
		<block v-for="(item,index) in items" :key="index">
			<view v-if="item.display" class="aon" :style="{top: `${item.top}rpx`}">
				<view class="bbg">
					<image
						:src="item.sex == 0 ? 'https://box-mall.oss-cn-hangzhou.aliyuncs.com/static/new-icon/girl.png' : 'https://box-mall.oss-cn-hangzhou.aliyuncs.com/static/new-icon/boy.png'"
						mode="" class="bbg-head"></image>
					<view class="bbg-phone">
						{{item.phone}}
					</view>
					<view class="bbg-phone">
						{{item.prize}}
					</view>
					<image :src="item.img" mode="" class="bbg-img"></image>
				</view>
			</view>
		</block>
	</view>
</template>

<script>
	let cycle;
	import { mathSub,mathMul,mathAdd } from '@/utils/mathUtils.js'
	// 弹幕字体颜色
	function getRandomColor() {
		let rgb = []
		for (let i = 0; i < 3; ++i) {
			let color = Math.floor(Math.random() * 256).toString(16)
			color = color.length == 1 ? '0' + color : color
			rgb.push(color)
		}
		return '#' + rgb.join('')
	}

	export default {
		name: 'l-barrage',
		props: {
			minTime: {
				type: Number,
				default: 6
			},
			maxTime: {
				type: Number,
				default: 14
			},
			minTop: {
				type: Number,
				default: 10
			},
			maxTop: {
				type: Number,
				default: 40
			}
		},
		data() {
			return {
				items: [],
			}
		},
		methods: {
			add(item, time = Math.ceil(Math.floor(Math.random() * (this.maxTime - this.minTime +
				1) + this.minTime))) {
					// let op = mathAdd(mathMul(mathAdd(Math.floor(Math.random()*5) , 1),50),100)
					let op = mathAdd(mathMul(Number(item.top),50),100)
				this.items.push({
					prize:item.prize,//奖品名称
					phone:item.phone,//中奖者电话
					time,//时间
					top: op,//距离顶部高度
					// top: Math.ceil(Math.random() * (this.maxTop - this.minTop + 1) + this.minTop),
					display: 1,
					sex:item.sex,//中奖者性别
					img:item.prizeImg //奖品图片
				});
			},
			start(items = []) {
				this.items = [];
				cycle && (clearInterval(cycle));
				let i = 0,
					len = items.length;

				cycle = setInterval(() => {
					let time = 5;
					// #ifndef H5
					time = Math.ceil(Math.floor(Math.random() * (this.maxTime - this.minTime + 1) + this.minTime));
					// #endif

					if (i < len) {
						// this.add(items[i].phone, items[i].prize, items[i].sex, time);
						this.add(items[i], time);
						i++;
					} else {
						clearInterval(cycle);
						setTimeout(() => {
							this.$emit("end", {});
						}, time * 1000)
					}
				}, 500)
			}
		}
	}
</script>

<style lang="scss">
	.aon {
		position: absolute;
		white-space: nowrap;

		animation: mymove 10s linear forwards;
		animation-timing-function: linear;
		-webkit-animation-timing-function: linear;
		animation-fill-mode: forwards;
		height: 48rpx;
		padding: 0 1rpx;
	}

	.l-barrage {
		z-index: 3;
		width: 100%;
		position: absolute;
	}

	@keyframes mymove {
		from {
			left: 100%;
		}

		to {
			left: -200%;
		}
	}

	@-moz-keyframes mymove

	/* Firefox */
		{
		from {
			left: 100%;
		}

		to {
			left: -200%;
		}
	}

	@-webkit-keyframes mymove

	/* Safari and Chrome */
		{
		from {
			left: 100%;
		}

		to {
			left: -200%;
		}
	}

	@-o-keyframes mymove

	/* Opera */
		{
		from {
			left: 100%;
		}

		to {
			left: -200%;
		}
	}

	.bbg {
		height: 48rpx;
		border-radius: 24rpx;
		display: flex;
		align-items: center;
		background: linear-gradient(90deg, #FFBC78 0%, #ED7361 29%, #EB6262 57%, #A087F6 100%);
		padding-right: 20rpx;

		.bbg-head {
			width: 44rpx;
			height: 44rpx;
			border-radius: 50%;
		}

		.bbg-phone {
			color: #ECECEC;
			font-size: 24rpx;
			line-height: 24rpx;
			margin-left: 24rpx;
		}
		.bbg-img{
			width: 44rpx;
			height: 44rpx;
			border-radius: 50%;
			margin-left: 20rpx;
		}
	}
</style>

需要用到的页面

<!-- @end执行结束回调 -->
<barrage ref="lBarrage" @end="getWinActive"></barrage>
import barrage from './barrage.vue'
getWinActive(){
	let webList = this.getWinList()
	this.$refs.lBarrage.start(webList)
},
//winIndex一次展示几条弹幕
getWinList(winIndex=2){
	let phoneHead = [13,17,15,18,19] //电话号码开头
	let len = mathAdd(Math.floor(Math.random()*winIndex),1)
	let webList = []
	let prizeText = [
		'一发入魂','欧气三连','霸气五连','十连冲天'
	]
	let lvText = [
		'普通','稀有','珍贵','尊享'
	]
	let prizeImg = [
		'https://box-mymm.oss-cn-hangzhou.aliyuncs.com/product/XwaPSGwg.jpg',
		'https://box-mymm.oss-cn-hangzhou.aliyuncs.com/product/tE4cdr0g.jpg',
		'https://box-mymm.oss-cn-hangzhou.aliyuncs.com/product/2m9ZM7bn.jpg',
		'https://box-mymm.oss-cn-hangzhou.aliyuncs.com/product/96Ejjiml.jpg',
		'https://box-mymm.oss-cn-hangzhou.aliyuncs.com/product/iylrOr2k.png',
		'https://box-mymm.oss-cn-hangzhou.aliyuncs.com/product/uAnfAhLj.png',
		'https://box-mymm.oss-cn-hangzhou.aliyuncs.com/product/XQ0BR78m.png',
	]
	let prize = [
		'开中了【尊享级奖品】',
		'开中了【珍贵级奖品】',
		'开中了【稀有级奖品】'
	]
	for(let i = 0;i<len;i++){
		let imgIndex = Math.floor(Math.random()*7)
		let sexIndex = Math.floor(Math.random()*10)
		let phoneIndex = Math.floor(Math.random()*5)
		let phoneLast = mathAdd(Math.floor(Math.random() * 8998),1000)
		let prizeIndex = Math.floor(Math.random()*4)
		let lvIndex = Math.floor(Math.random()*4)
		let prizeI = Math.floor(Math.random()*3)
		let obj = {
			sex:sexIndex % 2 == 0 ? 0 : 1,
			phone:`${phoneHead[phoneIndex]} **** ${phoneLast}`,
			prize: prize[prizeI],
			top:i,
			prizeImg:`https://box-mymm.oss-cn-hangzhou.aliyuncs.com/wish/guangbo/level${prizeI}.png`,
		}
		webList.push(obj)
	}
	return webList
},

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/190536.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

数据库丨记录一次TiDB v5.2.3迁移到v6.1.0的实操过程

文章目录前言一、环境简介二、迁移前提条件三、迁移方案四、迁移过程总结前言 TiDB 是一款结合了传统的关系型数据库和 NoSQL 数据库特性的新型分布式数据库。是第一个把数据分布在全球范围内的系统&#xff0c;并且支持外部一致性的分布式事务。 TiDB 具备强一致性和高可用性…

Struts2之注解

Struts2之注解1、引入依赖2、注解结构3、注解的使用1、引入依赖 Struts2中可以使用注解来代表struts.xml中的某些配置&#xff0c;可以简化配置。要使用注解&#xff0c;必须引入额外的依赖&#xff0c;如下&#xff1a; <!-- struts2注解依赖 --><dependency><…

未经风雨,怎见彩虹!回首2022,你好2023,新的一年,点面科技与您一起大展宏“兔”,扬眉“兔”气!

时光飞逝&#xff0c;转眼间2022虎年即将变成昨天的记忆。2022年&#xff0c;对于整个行业而言都是不寻常的一年&#xff0c;我们砥砺艰辛&#xff0c;着实经历着一场“寒冬”。但是&#xff0c;2022年注定也是不平凡的一年&#xff0c;在这个变中有定、变中求新的市场格局下&a…

【Rust】11. 泛型、Trait 和生命周期

11.1 泛型数据类型 11.1.1 函数的泛型 注意&#xff1a;泛型的比较适用于实现了 std::cmp::PartialOrd trait 的数据类型 11.1.2 结构体的泛型 结构体的泛型可以使用多个泛型类型参数 11.1.3 枚举的泛型 类似于结构体&#xff0c;枚举的泛型也可以使用多个泛型类型参数 11.…

Android 动画

在App中合理地使用动画能够获得友好愉悦的用户体验&#xff0c;Android中的动画有View动画、属性动画、帧动画、布局动画、转场动画等&#xff0c;在5.x以后有又新增了矢量动画&#xff0c;这些动画在平常开发中使用较为普遍&#xff0c;所以有必要做一次完整的总结。一、View动…

130道python练习题 完整版PDF

今天跟大家分享一些干货&#xff0c;在学python的朋友可以动起来了&#xff01; python基础知识练习题&#xff0c;常见常用的&#xff0c;可以作为参考&#xff0c;挺不错的&#xff0c;也有许许多多的讲解&#xff0c;适合python巩固基础知识和入门 130道练习题&#xff0c…

电脑网速慢怎么解决?提升网速真的很容易!

我们经常会使用电脑&#xff0c;如果加载网页的时间过长&#xff0c;或者是出现未响应的提示等问题&#xff0c;会非常影响我们使用电脑的观感。 针对这种问题&#xff0c;电脑网速慢怎么解决&#xff1f;来看看下面造成电脑网速慢的主要原因&#xff0c;以及我们该怎么提升电…

Python父类方法重写

在 Python 中&#xff0c;子类继承了父类&#xff0c;那么子类就拥有了父类所有的类属性和类方法。通常情况下&#xff0c;子类会在此基础上&#xff0c;扩展一些新的类属性和类方法。但凡事都有例外&#xff0c;我们可能会遇到这样一种情况&#xff0c;即子类从父类继承得来的…

vue前框框架课程笔记(六)

目录单文件组件.vue文件单文件组件常用结构App.vueStudent.vueSchool.vuemain.jsindex.html运行结果vue脚手架具体步骤项目架构其他配置项props配置项mixin混入插件scoped属性本博客参考尚硅谷官方课程&#xff0c;详细请参考 【尚硅谷bilibili官方】 本博客以vue2作为学习目…

zookeeper源码分享四 ---- RequestProcessor 处理链路

单机zookeeper RequestProcessor 处理链路 将请求放入LinkedBlockingQueue队列中&#xff0c;通过一个队列中。启动一个线程去消费这个队列&#xff0c;避免了阻塞。 zookeeper的处理是实现RequestProcessor接口的processRequest(Request request) 方法。 PrepRequestProcesso…

exsi删除虚拟机提示在当前状况下不允许执行此操作解决方法、vmware删除虚拟机提示在当前状况下不允许执行此操作解决方法

说明 我这exsi版本为5.5 今天在回收虚拟机的时候有些虚拟机无法删除&#xff0c;提示下面内容。 解决方法 方法1 直接给删除失败的虚拟机开机&#xff0c;开机完毕以后再关机就能直接删除了。 方法2 删除失败的虚拟机&#xff0c;也无法开机的情况下&#xff0c;实用该方…

春节档的观影“热”,拯救不了影视圈的“冷”?

配图来自Canva可画 疫情三年&#xff0c;影视业也随着“冬眠”了三年。 先是疫情爆发影响影视业上下游的正常生产&#xff0c;而后国家加速规范影视行业税收秩序&#xff0c;资本相继撤离&#xff0c;再后来影视企业入不敷出业绩巨亏&#xff0c;影视寒冬来临成为行业共识。在…

MMCV - dataset_analysis.py 可视化检测和跟踪任务自定义数据集神器

做视觉检测跟踪任务时,我们需要在论文插图中体现出我们数据集的信息,这个时候就有一个非常好用的神器:dataset_analysis.py的文件。该文件能够帮助用户直接可视化custom数据集的bbox实例信息,如上图所示,包括:显示类别和 bbox 实例个数的分布图;显示类别和 bbox 实例宽/…

中科院和人社部职称评审所需材料内容对比

目录1.前言2.中科院所需材料2.1 基本情况2.2 工作经历2.3 主要专业技术工作业绩2.4 重要著&#xff08;译&#xff09;作、论文及技术工作报告2.5 继 续 教 育 情 况2.6 考试、考核情况2.7 单位推荐意见2.8 材料审核意见2.9 个人技术报告2.10 未来工作展望3.人社部所需材料3.1 …

三十八、Kubernetes1.25中数据存储第二篇

1、概述在前面已经提到&#xff0c;容器的生命周期可能很短&#xff0c;会被频繁地创建和销毁。那么容器在销毁时&#xff0c;保存在容器中的数据也会被清除。这种结果对用户来说&#xff0c;在某些情况下是不乐意看到的。为了持久化保存容器的数据&#xff0c;kubernetes引入了…

行为型模式 - 状态模式State

状态模式的定义与特点 状态&#xff08;State&#xff09;模式的定义&#xff1a;对有状态的对象&#xff0c;把复杂的“判断逻辑”提取到不同的状态对象中&#xff0c;允许状态对象在其内部状态发生改变时改变其行为。 状态模式是一种对象行为型模式&#xff0c;其主要优点…

Oracle用户权限管理

一、运行企业管理器 管理员身份运行客户端的企业管理器 首次打开需要添加数据库信息&#xff0c;这里使用已经存在的数据库orcl 使用系统用户登录 用户名&#xff1a;system&#xff0c;口令orcl 或者不输入使用SYSDBA登录 可以查看所有用户的详细信息: 用户名, 账户状态,…

union和union all 的区别

1&#xff1a;union用于合并两个或多个select 语句的结果集。 注意&#xff1a; 1&#xff1a;union内部的select 语句必需拥有相同数量的列&#xff0c;列也夜必须拥有相似的数据类型&#xff0c;同时每条select 语句中的列的顺序必须相同。 2&#xff1a;union结果集中的列…

JVM垃圾回收与性能调优策略

一、JVM内存模型及垃圾收集算法 1.根据Java虚拟机规范&#xff0c;JVM将内存划分为&#xff1a; New&#xff08;年轻代&#xff09; Tenured&#xff08;年老代&#xff09; 永久代&#xff08;Perm&#xff09; 其中New和Tenured属于堆内存&#xff0c;堆内存会从JVM启动参…