简易抽奖页面

<!DOCTYPE html>
<html lang="zh">
	<head>
		<meta charset="UTF-8">
		<meta name="viewport" content="width=device-width, initial-scale=1.0">
		<meta http-equiv="X-UA-Compatible" content="ie=edge">
		<title>随机加载图片</title>
		<style type="text/css">
			/* 设置全局字体家族 */
			body {
				font-family: Arial, sans-serif;
				/* 设置背景颜色 */
				background-color: #f5f5f5;
				/* 移除默认的边距 */
				margin: 0;
				/* 移除默认的内边距 */
				padding: 0;
				/* 文本颜色 */
				color: #333;
			}

			/* 容器的最大宽度 */
			.container {
				max-width: 800px;
				/* 水平居中 */
				margin: 0 auto;
				/* 内边距 */
				padding: 20px;
				/* 背景颜色 */
				background-color: #fff;
				/* 添加阴影 */
				box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
				/* 圆角 */
				border-radius: 8px;
			}

			/* 标题居中显示 */
			h1 {
				text-align: center;
				/* 底部边距 */
				margin-bottom: 20px;
			}

			/* 输入组 */
			.input-group {
				margin-bottom: 15px;
			}

			/* 标签样式 */
			.input-group label {
				display: block;
				margin-bottom: 5px;
			}

			/* 输入框样式 */
			.input-group input[type="text"],
			.input-group input[type="file"] {
				width: calc(100% - 22px);
				padding: 10px;
				border: 1px solid #ccc;
				border-radius: 4px;
			}

			/* 按钮样式 */
			.input-group button {
				padding: 10px 20px;
				background-color: #007BFF;
				color: #fff;
				border: none;
				border-radius: 4px;
				cursor: pointer;
			}

			/* 鼠标悬停效果 */
			.input-group button:hover {
				background-color: #0056b3;
			}

			/* 输出框样式 */
			.output {
				border: none;
				outline: none;
				padding: 5px;
				width: 100%;
				/* 初始宽度 */
				min-width: 5px;
				/* 最小宽度 */
				max-width: 100%;
				/* 最大宽度 */
				overflow: hidden;
				/* 超出部分隐藏 */
				resize: none;
				/* 禁止用户调整大小 */
				margin-bottom: 20px;
			}

			/* 图片容器样式 */
			#random-image-container {
				position: relative;
				width: 100%;
				height: 300px;
				overflow: hidden;
				margin-bottom: 20px;
				display: flex;
				justify-content: center;
				align-items: center;
			}

			/* 图片样式 */
			#random-image {
				position: absolute;
				top: 0;
				left: 0;
				max-width: 100%;
				max-height: 100%;
				object-fit: contain;
			}
		</style>
	</head>
	<body>
		<!-- 主要容器 -->
		<div class="container">
			<!-- 标题 -->
			<h1>有无图片抽奖</h1>
			<!-- 无图模式 -->
			<div id="mode1" style="display: none;">
				<!-- 无图模式标题 -->
				<h2 align="center">无图抽奖</h2>
				<!-- 输入组,显示中奖人员 -->
				<div class="input-group">
					<label>中奖人员:</label>
					<input type="text" id="display" value="" disabled />
				</div>
				<!-- 输入组,显示已添加的抽奖列表元素 -->
				<div class="input-group">
					<label>已经添加在抽奖列表元素:</label>
					<input type="text" id="output" disabled class="output" oninput="resizeInput(this)" />
				</div>
				<!-- 输入组,添加抽奖列表的人员姓名 -->
				<div class="input-group">
					<label>请输入添加抽奖列表的人员姓名:</label>
					<input type="text" id="add" value="" />
					<!-- 按钮,点击时调用add()函数 -->
					<button type="button" onclick="add()">加入抽奖</button>
				</div>
				<!-- 输入组,提供删除上一个和清空抽奖列表的按钮 -->
				<div class="input-group">
					<!-- 按钮,点击时调用delLast()函数 -->
					<button type="button" onclick="delLast()">删除上一个</button>
					<!-- 按钮,点击时调用del()函数 -->
					<button type="button" onclick="del()">清空抽奖列表</button>
				</div>
				<!-- 输入组,删除指定元素 -->
				<div class="input-group">
					<label>请输入想要删除指定抽奖列表人员的姓名:</label>
					<input type="text" id="del" value="" />
					<!-- 按钮,点击时调用delOne()函数 -->
					<button type="button" onclick="delOne()">删除指定元素</button>
				</div>
				<!-- 输入组,开始抽奖按钮 -->
				<div class="input-group">
					<!-- 按钮,点击时调用lottery()函数 -->
					<button type="button" onclick="lottery()">开始抽奖</button>
				</div>
			</div>
			<!-- 有图模式 -->
			<div id="mode2" style="display: none;">
				<!-- 有图模式标题 -->
				<h2 align="center">有图抽奖</h2>
				<!-- 输入组,选择图片文件 -->
				<div class="input-group">
					<label>插入元素:</label>
					<input type="file" id="imageInput" multiple />
				</div>
				<!-- 按钮,点击时调用show-random-image按钮的事件 -->
				<div class="input-group">
					<button type="button" id="show-random-image">抽奖开始</button>
				</div>
				<!-- 图片容器,用于显示随机加载的图片 -->
				<div id="random-image-container">
					<img src="" id="random-image" style="display: none;" />
				</div>
				<!-- 输入组,显示已添加的图片名称 -->
				<div class="input-group">
					<label>已经添加的图片名称:</label>
					<input type="text" id="output1" disabled class="output" />
				</div>
				<!-- 输入组,选择图片名称删除 -->
				<div class="input-group">
					<label>选择图片名称删除:</label>
					<select id="deleteSelect" class="output"></select>
					<!-- 按钮,点击时调用deleteSelectedImage()函数 -->
					<button type="button" id="deleteButton">删除指定图片</button>
				</div>
			</div>
		</div>
		<script>
			/* 全局变量 */
			var arr = []; // 存储参与者或图片
			var addText = document.getElementById("add"); // 获取添加文本框
			var display = document.getElementById("display"); // 获取显示中奖人的输入框
			var outputDiv1 = document.getElementById("output"); // 获取输出框
			var outputDiv = document.getElementById("output1"); // 使用output1
			var delText = document.getElementById("del"); // 获取删除指定元素的输入框
			var currentIndex = 0; // 当前索引
			var intervalId; // 用于存储轮播间隔ID
			/* 添加参与者 */
			function add() {
				if (addText.value !== "") {
					if (arr.includes(addText.value)) {
						alert("已经有重复名称!");
					} else {
						var textValue = addText.value;
						arr.push(textValue);
						addText.value = "";
						outputDiv1.value = arr.join(',');
						console.log("添加后的数组:" + arr);
					}
				} else {
					alert("输入值为空,请输入人名!");
				}
				return arr;
			}
			/* 删除最后一个参与者 */
			function delLast() {
				if (arr.length > 0) {
					arr.pop();
					outputDiv1.value = arr.join(',');
					console.log("删除上一个元素后的数组:" + arr);
				} else {
					alert("列表为空,无法删除!");
				}
				return arr;
			}
			/* 清空列表 */
			function del() {
				arr = [];
				outputDiv1.value = "";
				console.log("删除所有元素后的数组:" + arr);
			}
			/* 删除指定元素 */
			function delOne() {
				const index = arr.indexOf(delText.value);
				if (index > -1) {
					arr.splice(index, 1);
				}
				delText.value = "";
				outputDiv1.value = arr.join(',');
				console.log("删除指定元素后的数组:" + arr);
				return arr;
			}
			/* 开始抽奖 */
			function lottery() {
				if (arr.length !== 0) {
					var result = arr[Math.floor(Math.random() * arr.length)];
					display.value = result;
					alert("恭喜" + display.value + "被选中!");
				} else {
					alert("抽奖列表为空,无法进行抽奖!");
				}
			}
			/* 调整输入框大小 */
			function resizeInput(input) {
				input.style.width = (input.value.length + 1) * 8 + 'px'; // 字符长度乘以字体大小
				if (input.style.width > '1080px') {
					input.style.width = '1080px'; // 限制最大宽度
				}
			}
			/* 处理文件上传 */
			function handleImageFiles(e) {
				var files = e.target.files;
				var output = document.getElementById("output1"); // 使用output1
				var existingOutput = output.value.trim();
				var newOutput = existingOutput ? existingOutput + ", " : "";
				for (var i = 0; i < files.length; i++) {
					var file = files[i];
					arr.push({
						name: file.name,
						dataURL: URL.createObjectURL(file)
					});
					newOutput += file.name;
					if (i < files.length - 1) {
						newOutput += ", ";
					}
				}
				output.value = newOutput;
				updateDeleteSelect();
				displayImages();
			}
			/* 显示图片 */
			function displayImages() {
				var img = document.getElementById("random-image");
				if (arr.length > 0) {
					img.src = arr[currentIndex].dataURL;
					img.style.display = "block";
					img.style.maxWidth = "100%";
					img.style.maxHeight = "100%";
					img.style.objectFit = "contain";
					startCarousel();
				} else {
					img.style.display = "none";
				}
			}
			/* 开始轮播 */
			function startCarousel(speed) {
				speed = speed || 1000;
				clearInterval(intervalId);
				intervalId = setInterval(function() {
					currentIndex = (currentIndex + 1) % arr.length;
					var img = document.getElementById("random-image");
					img.src = arr[currentIndex].dataURL;
				}, speed);
			}
			/* 加速轮播 */
			function speedUpCarousel() {
				clearInterval(intervalId);
				startCarousel(200);
			}
			/* 停止轮播 */
			function stopCarousel() {
				clearInterval(intervalId);
				var img = document.getElementById("random-image");
				img.src = arr[currentIndex].dataURL;
				display.value = arr[currentIndex].name;
				alert("恭喜" + display.value + "被选中!");
			}
			/* 更新删除选项 */
			function updateDeleteSelect() {
				var select = document.getElementById("deleteSelect");
				select.innerHTML = "";
				for (var i = 0; i < arr.length; i++) {
					var option = document.createElement("option");
					option.value = arr[i].name;
					option.text = arr[i].name;
					select.appendChild(option);
				}
			}
			/* 删除选定图片 */
			function deleteSelectedImage() {
				var selectedName = document.getElementById("deleteSelect").value;
				var indexToDelete = -1;
				for (var i = 0; i < arr.length; i++) {
					if (arr[i].name === selectedName) {
						indexToDelete = i;
						break;
					}
				}
				if (indexToDelete > -1) {
					arr.splice(indexToDelete, 1);
					var output = document.getElementById("output1");
					output.value = arr.map(item => item.name).join(", ");
					updateDeleteSelect();
					displayImages();
				} else {
					alert("未找到该图片名称,请重新选择!");
				}
			}
			/* 选择模式 */
			function chooseMode() {
				var choice = prompt("请选择抽奖模式:\n1. 无图模式\n2. 有图模式", "");
				if (choice === "1") {
					document.getElementById("mode1").style.display = "block";
					document.getElementById("mode2").style.display = "none";
				} else if (choice === "2") {
					document.getElementById("mode1").style.display = "none";
					document.getElementById("mode2").style.display = "block";
				} else {
					alert("无效的选择,请重新选择!");
					chooseMode();
				}
			}
			/* 页面加载时执行 */
			window.onload = function() {
				chooseMode();
				document.getElementById('imageInput').addEventListener('change', handleImageFiles);
				document.getElementById('show-random-image').addEventListener('click', function() {
					speedUpCarousel();
					setTimeout(function() {
						stopCarousel();
					}, 3000);
				});
				document.getElementById('deleteButton').addEventListener('click', deleteSelectedImage);
				arr = [];
				outputDiv.value = "";
				outputDiv1.value = "";
				display.value = "";
			};
		</script>
	</body>
</html>

进入页面选择输入‘1’-无图抽奖(mode1)还是输入‘2’-有图抽奖(mode2),刷新页面可以重置页面所有数据。在这里插入图片描述
无图抽奖,在文本框输入参加抽奖人员名称添加名单里。下面按钮对抽奖名单指定或所有人员删除修改,点击开始抽奖随机选中幸运儿。在这里插入图片描述
有图抽奖点击浏览加入抽奖人员图片,可以一次加入多张图片,图片名称为抽奖人员名字,下面抽奖按钮就会轮询播放抽奖人员图片,文本框会显示所有图片的名称(抽奖人员名字),下面选项框可以选择已添加的图片名称进行删除指定图片。在这里插入图片描述
无图抽奖示例图在这里插入图片描述
有图抽奖示例图在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值