抽奖界面及功能

news2025/3/9 10:43:15

1.代码

<template>
	<view class="container">
		<view class="container_circle" v-for="(v,i) in  circleList" :key="i"
			:style="{'top':v.topCircle+'rpx','left':v.leftCircle+'rpx','background-color':(i%2 ==0)?oneCircleColor:twoCircleColor}">
		</view>
		<view class="container_content">
			<view class="content_out" v-for="(v,i) in prizeList" :key="i" :style="{'top':v.topAward+'rpx','left':v.leftAward+'rpx',
			'background':  (i==indexSelect)?prizeCheckColor:prizeDefaultColor,
			'background-size':' 400%',
			'animation': 'animatebox 3s linear infinite'
			}">
				<image class="award_image" :src="v.imgList"></image>
			</view>
			<view class="content_btn" @tap="handleStart" :style="{'background-color':isRunning?'#55ffff':'#f7f7f7'}">开始
			</view>
		</view>
		<view class="container_num">剩余抽奖次数{{luckDrawNum}}</view>
	</view>
</template>

<script>
	export default {
		data() {
			return {
				circleList: [], // 圆圈数组
				prizeList: [], // 奖品数组
				oneCircleColor: '#29f5ff', // 圆圈颜色1
				twoCircleColor: '#aaaaff', // 圆圈颜色2
				prizeDefaultColor: '#FFF', // 奖品的默认颜色
				prizeCheckColor: 'linear-gradient(72.5deg, #aa0000, #ff0000, #ff00ff, #550000, #ffaaff, #aa0000, #ff0000)', // 奖品的选中颜色
				indexSelect: 0, //被选中的奖品index
				isRunning: false, //是否正在抽奖
				//奖品图片数组
				imgList: [
					'https://cdn.cnbj1.fds.api.mi-img.com/nr-pub/202209261921_a1b840c267bd26bcf4dc654d52f259e5.png?w=800&h=800',
					'https://cdn.cnbj1.fds.api.mi-img.com/mi-mall/0bcd64f412dfb5e15695fa96d21ecb23.png?w=800&h=800',
					'https://cdn.cnbj1.fds.api.mi-img.com/nr-pub/202208111030_e3554c41e0484da99b16bb9e02142e68.png?w=800&h=800',
					'https://cdn.cnbj0.fds.api.mi-img.com/b2c-shopapi-pms/pms_1653393310.29013051.png',
					'https://cdn.cnbj1.fds.api.mi-img.com/nr-pub/202209261921_a1b840c267bd26bcf4dc654d52f259e5.png?w=800&h=800',
					'https://cdn.cnbj0.fds.api.mi-img.com/b2c-shopapi-pms/9E253411E26FD16C7215D7E74321FA45.png',
					'https://cdn.cnbj1.fds.api.mi-img.com/mi-mall/cc0be95d45d0063b0aa8bb541be22c77.png?w=800&h=800',
					'https://cdn.cnbj1.fds.api.mi-img.com/mi-mall/0c4b5e30d14ca8b51dc6fa6917295ff5.png?w=800&h=800'
				],
				luckDrawNum: 2, //剩余抽奖次数
				repeat: true
			};
		},
		onLoad() {
			//圆点设置
			let topCircle = 7.5;
			let leftCircle = 7.5;
			let circleList = [];
			for (let i = 0; i < 24; i++) {
				if (i == 0) {
					topCircle = 15;
					leftCircle = 15;
				} else if (i < 6) {
					topCircle = 7.5;
					leftCircle += 102.5;
				} else if (i == 6) {
					topCircle = 15;
					leftCircle = 620;
				} else if (i < 12) {
					topCircle += 94;
					leftCircle = 620;
				} else if (i == 12) {
					topCircle = 565;
					leftCircle = 620;
				} else if (i < 18) {
					topCircle = 570;
					leftCircle -= 102.5;
				} else if (i == 18) {
					topCircle = 565;
					leftCircle = 15;
				} else if (i < 24) {
					topCircle -= 94;
					leftCircle = 7.5;
				} else {
					return;
				}
				circleList.push({
					topCircle,
					leftCircle
				});
			}
			this.circleList = circleList;
			//圆点闪烁
			setInterval(() => {
				if (this.oneCircleColor == '#29f5ff') {
					this.oneCircleColor = '#aaaaff';
					this.twoCircleColor = '#29f5ff';
				} else {
					this.oneCircleColor = '#29f5ff';
					this.twoCircleColor = '#aaaaff';
				}
			}, 500)
			let prizeList = [];
			//间距,怎么顺眼怎么设置吧.
			let topAward = 25;
			let leftAward = 25;
			for (let j = 0; j < 8; j++) {
				if (j == 0) {
					topAward = 25;
					leftAward = 25;
				} else if (j < 3) {
					topAward = topAward;
					//166.6666是宽.15是间距.下同
					leftAward = leftAward + 166.6666 + 15;
				} else if (j < 5) {
					leftAward = leftAward;
					//150是高,15是间距,下同
					topAward = topAward + 150 + 15;
				} else if (j < 7) {
					leftAward = leftAward - 166.6666 - 15;
					topAward = topAward;
				} else if (j < 8) {
					leftAward = leftAward;
					topAward = topAward - 150 - 15;
				}
				let imgList = this.imgList[j];
				prizeList.push({
					topAward,
					leftAward,
					imgList
				});
			}
			this.prizeList = prizeList;
		},
		methods: {
			// 点击开始
			handleStart() {
				if (this.isRunning) return;
				if (this.luckDrawNum > 0) {
					this.luckDrawNum--
				} else {
					uni.showModal({
						title: '提示',
						content: '分享获取抽奖次数',
						showCancel: false,
						success: (res) => {
							if (res.confirm) {}
						}
					});
					this.indexSelect = 0
					return
				}
				this.isRunning = true;
				let indexSelect = 0;
				let i = 0;
				let timer = setInterval(() => {
					indexSelect++;
					i += 30;
					let randomNum = 1000 + Math.ceil(Math.random() * 1000) //控制奖品
					if (i > randomNum) {
						//去除循环
						clearInterval(timer);
						//获奖提示
						uni.showModal({
							title: '恭喜您',
							content: '获得了第' + (this.indexSelect + 1) + '个奖品',
							showCancel: false,
							success: (res) => {
								if (res.confirm) {
									this.isRunning = false;
								}
							}
						});
					}
					indexSelect = indexSelect % 8;
					this.indexSelect = indexSelect;
				}, 200 + i)
			}
		}
	}
</script>

<style lang="scss">
	.container {
		position: relative;
		height: 600rpx;
		width: 650rpx;
		margin: 100rpx auto;
		border-radius: 40rpx;
		background: linear-gradient(72.5deg, #e9f78c, #ffffb9, #cc55e5, #ef9bcb, #e5b8d8, #ffb140, #f7ed54);
		background-size: 400%;
		animation: animatebox 3s linear infinite;

		@keyframes animatebox {
			0% {
				background-position: 0%;
			}

			50% {
				background-position: 100%;
			}

			100% {
				background-position: 0%;
			}
		}


		.container_circle {
			position: absolute;
			display: block;
			border-radius: 50%;
			height: 20rpx;
			width: 20rpx;
		}

		.container_content {
			position: absolute;
			left: 0;
			right: 0;
			top: 0;
			bottom: 0;
			width: 580rpx;
			height: 530rpx;
			background-color: #b375ff;


			border-radius: 40rpx;
			margin: auto;

			background: linear-gradient(72.5deg, #ef499c, #cc55e5, #ffb140, #f7ed54, #ffb140, #cc55e5, #ef499c);
			background-size: 400%;
			animation: animate1 3s linear infinite;

			@keyframes animate1 {
				0% {
					background-position: 0%;
				}

				50% {
					background-position: 100%;
				}

				100% {
					background-position: 0%;
				}
			}


			.content_out {
				position: absolute;
				height: 150rpx;
				width: 166.6666rpx;
				background-color: #f5f0fc;
				border-radius: 15rpx;
				box-shadow: 0 5px 0 #d87fde;

				.award_image {
					position: absolute;
					margin: auto;
					top: 0;
					left: 0;
					bottom: 0;
					right: 0;
					height: 140rpx;
					width: 130rpx;
				}
			}

			.content_btn {
				position: absolute;
				top: 50%;
				left: 50%;
				transform: translate(-50%, -50%);
				border-radius: 15rpx;
				height: 150rpx;
				width: 166.6666rpx;
				background-color: #ffe400;
				box-shadow: 0 5rpx 0 #e7930a;
				color: #b375ff;
				text-align: center;
				font-size: 55rpx;
				font-weight: bolder;
				line-height: 150rpx;
				background: linear-gradient(72.5deg, #f7a0ec, #ffb140, #e58da0, #ef7ecb, #ab9ae5, #ffec8a, #f6f7a6);
				background-size: 400%;
				animation: animate 3s linear infinite;

				@keyframes animate {
					0% {
						background-position: 0%;
					}

					50% {
						background-position: 100%;
					}

					100% {
						background-position: 0%;
					}
				}

			}
		}

		.container_num {
			position: absolute;
			top: -60rpx;
			left: 50%;
			transform: translateX(-50%);
			background-image: -webkit-linear-gradient(left, #083a96, #e63609 25%, #083a96 50%, #e63609 75%, #083a96);
			-webkit-text-fill-color: transparent;
			background-clip: text;
			background-size: 200% 100%;
			animation: masked-animation 3s infinite linear;

			@keyframes masked-animation {
				0% {
					background-position: 0 0;
				}

				100% {
					background-position: -100% 0;
				}
			}
		}
	}
</style>

2.运行界面

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

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

相关文章

大厂面试题:有了 G1 还需要其他垃圾回收器吗?

Java全能学习面试指南&#xff1a;https://javaxiaobear.cn 今天我们主要来看下这两个高频的面试考题&#xff1a; G1 的回收原理是什么&#xff1f;为什么 G1 比传统 GC 回收性能好&#xff1f; 为什么 G1 如此完美仍然会有 ZGC&#xff1f; 我们在上一篇中&#xff0c;简要…

Flask+pyecharts结合,html统计图呈现在前端页面

是我,是你 在网上看到这样一段话: “很多时候,你必须接受这世界上突如其来的失去。洒了的牛奶,遗失的钱包,走散的爱人,断掉的友情。当你做什么都于事无补的时候,唯一能做的,就是让自己努力好过一点。” <

iptables 目标地址转换

目录 一、实验准备 二、配置web服务器 三、配置web防火墙网卡 四、配置客户机网卡 五、测试 1、开启防火墙功能&#xff0c;设置源地址转换&#xff0c;通过改变我客户机的地址身份为web服务器同网段来实现访问 2、通过改变目标地址&#xff08;客户机&#xff09;的地址…

无法加载文件xxx,此系统上禁止运行脚本

在 VsCode 跑一个前端项目的时候出现如下错误&#xff1a;此系统上禁止运行脚本 解决&#xff1a;在终端执行指令设置 脚本执行策略 为 RemoteSigned 以管理员身份运行vs code&#xff1b;查看当前执行策略&#xff1a;get-ExecutionPolicy&#xff0c;如显示 Restricted 则表…

element UI table横向树结合checkbox进行多选,实现各个节点的[全选,半选,不选]状态附带模拟数据

element UI table横向树结合checkbox进行多选&#xff0c;实现各个节点的[全选&#xff0c;半选&#xff0c;不选]状态&#xff0c;包含模拟数据 思路&#xff1a; 步骤一、后端返回tree格式数据&#xff0c;先结合element-ui的table的数据格式要求&#xff0c;将tree转换成ta…

第30章_瑞萨MCU零基础入门系列教程之IRDA红外遥控实验

本教程基于韦东山百问网出的 DShanMCU-RA6M5开发板 进行编写&#xff0c;需要的同学可以在这里获取&#xff1a; https://item.taobao.com/item.htm?id728461040949 配套资料获取&#xff1a;https://renesas-docs.100ask.net 瑞萨MCU零基础入门系列教程汇总&#xff1a; ht…

苹果iPhone 15/Pro新机发布,毫米波5G仍然只限美国版

苹果公司今日发布了 iPhone 15 系列新机&#xff0c;共四款&#xff0c;分别是 iPhone 15、iPhone 15 Plus、iPhone 15 Pro 和 iPhone 15 Pro Max。这些新机型都配备了 USB-C 接口和灵动岛&#xff0c;而 Pro 版还有更多的特色功能&#xff0c;如 A17 Pro 芯片、轻质钛金属框架…

2023.2.1最新版IDEA创建一个SpringBoot项目,简单小示例

介绍 Springboot Spring Boot_百度百科 新建项目 打开IDEA选择 File->New->Project&#xff1b;选择 Spring Initializr Spring initializr 是Spring 官方提供的一个用来初始化一个Spring boot 项目的工具。组名项目名称可自定义 点击 next 选择 Dependencies Web…

芯科蓝牙BG27开发笔记1-新建示例工程

此笔记的必要性 芯科的官方资料很丰富&#xff0c;并且ssv5中能方便索引到所需文档&#xff0c;不过大而全的问题就是找不到合适的切入点&#xff0c;更不会有本地化比较好的中文的系统的教程了。往往看到一个starting guide&#xff0c;会延伸其他starting guide&#xff0c;…

ChatGPT高级数据分析功能

目录 只需要上传数据集就可以自动化分析,我们测试以下,首先我找了一份数据,主要是关于二手车的,格式如下: 接下来调用,GPT中的高级数据分析功能,上传数据,并要求进行分析 第一步:自动对数据字段进行详细的解释: 第二步,对数据进行预处理,比如缺失值,基本的描述…

第29章_瑞萨MCU零基础入门系列教程之改进型环形缓冲区

本教程基于韦东山百问网出的 DShanMCU-RA6M5开发板 进行编写&#xff0c;需要的同学可以在这里获取&#xff1a; https://item.taobao.com/item.htm?id728461040949 配套资料获取&#xff1a;https://renesas-docs.100ask.net 瑞萨MCU零基础入门系列教程汇总&#xff1a; ht…

C语言数组和指针笔试题(一)(一定要看)

目录 一维数组例题1例题2例题3例题4例题5例题6例题7例题8例题9例题10例题输出结果 字符数组一例题1例题2例题3例题4例题5例题6例题7 一维数组 int a[] {1,2,3,4}; 1:printf("%d\n",sizeof(a)); 2:printf("%d\n",sizeof(a0)); 3:printf("%d\n",…

TypeScript高级类型

&#x1f3ac; 岸边的风&#xff1a;个人主页 &#x1f525; 个人专栏 :《 VUE 》 《 javaScript 》 ⛺️ 生活的理想&#xff0c;就是为了理想的生活 ! 目录 映射类型&#xff08;Mapped Types&#xff09; 1. Readonly 2. Partial 3. Pick 4. Record 条件类型&#xf…

【javaSE】 反射与反射的使用

文章目录 &#x1f332;反射的定义&#x1f38d;反射的用途&#x1f334;反射基本信息&#x1f340;反射相关的类&#x1f6a9;Class类(反射机制的起源 )&#x1f388;Class类中的相关方法 &#x1f6a9;反射示例&#x1f388;获得Class对象的三种方式&#x1f388;反射的使用 …

导数应用:曲线的凹凸性、渐进线、弧微分与曲率

目录 曲线的凹凸性 函数的拐点 曲线的渐近线 函数的弧微分与曲率 曲线的凹凸性 曲线的凹凸性是描述曲线在某一点处的曲率属性的几何性质。 具体来说&#xff0c;对于平面上的曲线&#xff0c;其在某一点的切线的斜率是不断变化的。当切线的斜率在某区间内恒为正值时&#…

基于HTML、CSS和JavaScript制作一个中秋节倒计时网页

&#x1f482; 个人网站:【工具大全】【游戏大全】【神级源码资源网】&#x1f91f; 前端学习课程&#xff1a;&#x1f449;【28个案例趣学前端】【400个JS面试题】&#x1f485; 寻找学习交流、摸鱼划水的小伙伴&#xff0c;请点击【摸鱼学习交流群】 这个项目使用HTML、CSS和…

第一百四十天学习记录:工作相关:Qt5.14.2的安装

最近一段时间被新项目搞得心力憔悴。 加上需要调用一个同事的OpenCV库一直报错&#xff0c;后面发现是Qt版本不兼容的问题。 在尝试了在线安装Qt无果后&#xff0c;重新安装Qt&#xff0c;顺便回顾一下Qt的安装过程。 毕竟上一次安装Qt还是在2019年……之后的这4年工作电脑和家…

TypeScript类型推断

&#x1f3ac; 岸边的风&#xff1a;个人主页 &#x1f525; 个人专栏 :《 VUE 》 《 javaScript 》 ⛺️ 生活的理想&#xff0c;就是为了理想的生活 ! 目录 类型推断 1. 基础类型推断 #2. 最佳公共类型推断 3. 上下文类型推断 4. 类型断言 #5. 类型推断和泛型 总结 类…

【javaSE】 Lambda表达式与Lambda表达式的使用

文章目录 &#x1f333;Lambda表达式的背景&#x1f6a9;Lambda表达式的语法&#x1f6a9;函数式接口 &#x1f38b;Lambda表达式的基本使用&#x1f384;语法精简 &#x1f332;变量捕获&#x1f6a9;匿名内部类&#x1f6a9;匿名内部类的变量捕获&#x1f6a9;Lambda的变量捕…

【力扣-二叉树-01】在二叉树中分配硬币-力扣 979 题

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kuan 的首页,持续学…