elementui vue的html随机点名器软件网页版源码1.1

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

**在之前基础上新增了点击开始点名之后,判断姓名池的数量的判断,如果数量为零给出提示。
按钮的双击, 如果是在姓名池,在会进入上面的被点名状态,
如果是在上面卡片中的点名状态,则会重新回到姓名池
**
HTML

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<script src="js/Vue.jsv2.6.12.js" type="text/javascript" charset="utf-8"></script>
		<script src="element-ui/lib/index.js" type="text/javascript" charset="utf-8"></script>
		<link rel="stylesheet" type="text/css" href="element-ui/lib/theme-chalk/index.css" />
		<link rel="stylesheet" type="text/css" href="css/silence.css" />
		<script src="js/jquery-3.6.0.min.js" type="text/javascript" charset="utf-8"></script>
	</head>
	<body>
		<div id="silence">


			<!-- 这里是被抽到姓名的人在这个卡片出现 -->
			<el-card shadow="always" id="mycard" class="mycard"> </el-card>

			<!-- 随机点名按钮块 -->
			<div class="randomMenu">
				<el-button type="success" :disabled="sjdmDisabled" @click="clickSjdmBtn">{{sjdmName}}</el-button>
			</div>

			<!-- 横切线 -->
			<el-divider content-position="right"></el-divider>

			<!-- 姓名body主体 -->
			<div shadow="always" class="flexBodyName" id="flexBodyName">
				<div v-for="name in names">
					<!-- btn被绑定了双击事件 -->
					<el-button class="btn" type="success">{{name}}</el-button>
				</div>
			</div>


		</div>
	</body>
	<script src="js/silence.js" type="text/javascript" charset="utf-8"></script>
</html>

JS

let vue = new Vue({
	el: "#silence",
	data: {
		sjdmName: "开始点名",
		sjdmDisabled: false, //随机点名的是否禁用
		names: [
			"张三", "李四", "赵六", "奥特曼", "灰太狼", "喜羊羊", "钱七", "小美", "小明", "四个字的", "王五", "王五",
			"张三", "李四", "赵六", "奥特曼", "灰太狼", "喜羊羊", "钱七", "小美", "小明", "四个字的", "王五", "王五",
			"张三", "李四", "赵六", "奥特曼", "灰太狼", "喜羊羊", "钱七", "小美", "小明", "四个字的", "王五", "王五"
		]

	},
	methods: {
		/* 开始点名事件被单击 */
		clickSjdmBtn() {
			random();
		},
		//外部调用的提示消息的方法
		message(str) {
			this.$message({
				message: str,
				type: 'warning'
			});
		}

	}
});


flag = false; //随机点名
let lastIndex = -1; //旧索引
function random() {
	/* 获取所有人的对象数组 */
	btnDom = $(".flexBodyName .btn");
	//判断姓名池,是否有人
	if (btnDom.length == 0) {
		vue.message("点名池主体   数量为零    无法点名");
		return;
	}

	flag = !flag;
	if (flag) {
		//获取人数
		const number = btnDom.length - 1;
		//按钮名称改变
		vue.sjdmName = "点击停止";
		//开始点名,每50毫秒运行一次
		interval = setInterval(function() {
			//获得随机数
			let newIndex = Math.round(Math.random() * number);
			//将前一次样式置为空
			if (lastIndex != -1) {
				//删除选中状态
				$(btnDom[lastIndex]).removeClass("btnRunntime");
			}
			//添加css样式 ,为选中状态
			$(btnDom[newIndex]).addClass("btnRunntime")
			//将新索引赋值给老的索引
			lastIndex = newIndex;
		}, 50);
	} else {
		//将按钮置为禁用状态
		vue.sjdmDisabled = true;
		//停止循环
		clearInterval(interval);
		//500毫秒之后运行一次, 在这里停顿一下,能看清具体选到哪里了0.
		setTimeout(function() {
			//将btn对象的父元素div 转为jquery对象
			let dom = $(btnDom[lastIndex].parentElement);
			//添加一个左边距
			dom.css("margin-left", "10px");
			//将当前btn 对象的父元素,div,添加到卡片中
			$(".mycard").append(dom);
			lastIndex = -1;
			//按钮名称改变
			vue.sjdmName = "开始点名";
			//启用按钮
			vue.sjdmDisabled = false;
		}, 500);
	}
}


/* 姓名按钮双击事件
 如果在姓名主体,则会移动到上面被点名的状态
 如果是在上面被点名的状态,则移出。移动到主体
 */
$(".btn").on("dblclick", function() {
	//使用js语法 获取父元素的父元素
	let parentDom = this.parentElement.parentElement;
	//使用jquery获取id属性
	let idName = $(parentDom).prop("id");
	//获取包裹button 的div jquery对象
	let divBtn = $(this.parentElement);
	// 如果在姓名主体,则会移动到上面被点名的状态
	if (idName == "mycard") {
		//将被选中状态, 移到主体
		//删除被选中样式的 背景色class  和左边距
		divBtn.css("margin-left", "0");
		$(this).removeClass("btnRunntime");
		//添加到主体
		$(".flexBodyName").append(divBtn);
	}

	// 如果在姓名主体,则会移动到上面被点名的状态
	if (idName == "flexBodyName") {
		//将姓名主体添加到 被选中状态
		divBtn.css("margin-left", "10px");
		/*添加一个被选中的css样式 */
		$(this).addClass("btnRunntime");
		//添加到被点中的,卡片池
		$(".mycard").append(divBtn);
	}


});

CSS

body {
	/* background-color: #C2E7B0; */
	background-color: #F0F9EB;
}

/* 点名器主面板 */
.flexBodyName {
	width: 70%;
	margin: auto;
	background-color: ##A0CFFF;
	padding: 10px;
	/* flex 布局 */
	display: flex;
	justify-content: space-around;
	flex-wrap: wrap;
	/* 边框阴影 */
	box-shadow: 0 2px 4px rgba(0, 0, 0, .12), 0 0 6px rgba(0, 0, 0, .04)
		/*
	 居中
	 margin: 0;
	position: absolute;
	top: 50%;
	left: 50%;
	-ms-transform: translate(-50%, -50%);
	transform: translate(-50%, -50%); */

}

/* 姓名按钮 */
.btn {
	margin-top: 6px;
	margin-bottom: 6px;
	width: 90px;
	height: 50px;
	background-color: #F0C78A;
}

/*被点到的人的按钮,在care卡片的颜色 */
.btnRunntime {
	background-color: red;
}

/* 按钮自带的左边距取消 */
.el-button+.el-button {
	margin-left: initial;
}


/*卡片 被点中明的池*/
.mycard {
	background-color: ##A0CFFF;
	display: flex;
	justify-content: left;
	flex-wrap: wrap;
}

/* 卡片内边距 */
.el-card__body {
	padding: 0;
}

/* 随机点名下拉菜单 */
.randomMenu {
	margin-top: 10px;
	text-align: right;
}

.el-divider--horizontal {
	margin: 10px;
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Silence丶你的名字

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值