html实现竖直步骤条

news/2024/7/7 19:10:16

1、问题描述

        最近碰到一个需求,要把审批流程改为竖直步骤条的形式。本来想直接抄网上的,但是网上给的要么是水平步骤条,要么是集成在框架里的,要么就是人家写的太复杂了,js,css一大堆。

2、我的代码

        代码下载:【免费】步骤条Demo.zip资源-CSDN文库

        index.html

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8" />
		<title></title>
	</head>
	<script type="text/javascript" src="./js/jquery.min.js"></script>
	<link rel="stylesheet" href="./css/myStyle.css" />
	<body>
		<script type="text/javascript">
			$(document).ready(function() {
				// $("body").append(drawLine($("#step1"), $("#step2"),"black"));
				// $("body").append(drawLine($("#step2"), $("#step3"),"black"));
				// $("body").append(drawLine($("#step3"), $("#step4"),"black"));
				var arrStep = [];
				var index = 0;
				$(".step").each(function() {
					console.log($(this).attr("id"));
					arrStep[index++] = $(this).attr("id");
				})
				for (var i = 0; i < arrStep.length - 1; i++) {
					$("body").append(drawLine($("#" + arrStep[i]), $("#" + arrStep[i + 1]), "#DDDDDD"));
				}
				$("#step1").addClass("is-ready");
				//$("body").append(drawLine($("#step1"),$("#"+finalStepId),"#DDDDDD"));

				$(".btnApprove").click(function() {
					var id = $(this).attr("id");
					var num = id.substr(id.length - 1, 1);
					var bAllow = true;
					// console.log(num)
					//如果当前步已完成,则直接退出函数
					if ($("#step" + num).hasClass("is-finish")) {
						return;
					}
					if (num > 1) {
						//第一步之后,只有当下一步未完成且当前步未完成时,上一步已完成,才可以点审批
						if ((!$("#step" + (Number(num) + 1)).hasClass("is-finish")) && ($("#step" + (Number(
								num) - 1)).hasClass("is-finish"))) {
							// console.log("num="+num)
							// console.log("bAllow="+bAllow)
							bAllow = true;
						} else {
							bAllow = false;
						}
					}
					if (bAllow) {
						console.log("step" + num)
						$("#step" + num).removeClass("is-ready");
						$("#step" + num).addClass("is-finish");
						if (document.getElementById("step" + (Number(num) + 1))) {
							$("#step" + (Number(num) + 1)).addClass("is-ready");
						}
						$("body").append(drawLine($("#step" + num), $("#step" + (Number(num) + 1)), "#4995FA"));
					}

				});

				$(".btnRefuse").click(function() {
					var id = $(this).attr("id");
					var num = id.substr(id.length - 1, 1);
					//如果当前步已完成,则直接退出函数
					if ($("#step" + num).hasClass("is-finish")) {
						return;
					}
					$("#step" + (Number(num) - 1)).removeClass("is-finish");
					$("#step" + (Number(num) - 1)).addClass("is-ready");
					$("#step" + num).removeClass("is-ready");
					$("#step-bar" + (Number(num) - 1) + "1").remove();
				})
			})

			//type:1同意,0拒绝
			function drawLine(start, end, colorCode) {
				if (document.getElementById(start.attr("id")) && document.getElementById(end.attr("id"))) {
					var startId = start.attr("id");
					var endId = end.attr("id");
					var startNum = startId.substr(startId.length - 1, 1);
					var endNum = endId.substr(endId.length - 1, 1);
					var startObj = start.offset();
					var endObj = end.offset();
					var returnStr = ""
					if (colorCode == "#DDDDDD") {
						return `<div class='step-bar' style='top:${startObj.top+20}px;left:${startObj.left+15}px;height:${endObj.top-startObj.top-10}px;background-color:${colorCode};'></div>`
					}
					returnStr = returnStr +
						`<div class='step-bar' id='step-bar${startNum}1' style='top:${startObj.top+20}px;left:${startObj.left+15}px;height:${endObj.top-startObj.top-10}px;background-color:${colorCode};'></div>`
					console.log(returnStr)
					return returnStr;
				}
			}
		</script>
		<div class="step" id="step1">
			<div class="point" id="point1"></div>
			<div class="content">步骤一</div>
			<button class="btnApprove" id="btnApprove1">同意</button>
			<button class="btnRefuse" id="btnRefuse1">拒绝</button>
		</div>
		<!-- <div class="step-bar"></div> -->
		<div class="step" id="step2">
			<div class="point" id="point2"></div>
			<div class="content">步骤二</div>
			<button class="btnApprove" id="btnApprove2">同意</button>
			<button class="btnRefuse" id="btnRefuse2">拒绝</button>
		</div>

		<div class="step" id="step3">
			<div class="point" id="point3"></div>
			<div class="content">步骤三</div>
			<button class="btnApprove" id="btnApprove3">同意</button>
			<button class="btnRefuse" id="btnRefuse3">拒绝</button>
		</div>

		<div class="step" id="step4">
			<div class="point" id="point4"></div>
			<div class="content">步骤四</div>
			<button class="btnApprove" id="btnApprove4">同意</button>
			<button class="btnRefuse" id="btnRefuse4">拒绝</button>
		</div>

		<div class="step" id="step5">
			<div class="point" id="point5"></div>
			<div class="content">步骤五</div>
			<button class="btnApprove" id="btnApprove5">同意</button>
			<button class="btnRefuse" id="btnRefuse5">拒绝</button>
		</div>

		<div class="step" id="step6">
			<div class="point" id="point6"></div>
			<div class="content">步骤六</div>
			<button class="btnApprove" id="btnApprove6">同意</button>
			<button class="btnRefuse" id="btnRefuse6">拒绝</button>
		</div>

		<div class="step" id="step7">
			<div class="point" id="point7"></div>
			<div class="content">步骤七</div>
			<button class="btnApprove" id="btnApprove7">同意</button>
			<button class="btnRefuse" id="btnRefuse7">拒绝</button>
		</div>

		<div class="step" id="step8">
			<div class="point" id="point8"></div>
			<div class="content">步骤八</div>
			<button class="btnApprove" id="btnApprove8">同意</button>
			<button class="btnRefuse" id="btnRefuse8">拒绝</button>
		</div>
	</body>
</html>

        myStyle.css

.step {
	display: table;
	height: 100px;
	.point {
		display: table-cell;
		width: 10px;
		height: 10px;
		border-radius: 50%;
		/* background-color: #B4CFEC; */
		/* position: relative; */
		background-color:#DDDDDD;
		float: left;
		margin: 10px;
	}

	.content {
		display: table-cell;
		position: relative;
		float: right;
		margin-left: 10px;
	}
}

.step.is-finish{
	display: table;
	height: 100px;
	.point {
		display: table-cell;
		width: 10px;
		height: 10px;
		border-radius: 50%;
		/* background-color: #0E098B; */
		/* position: relative; */
		background-color:#B4CFEC;
		float: left;
		margin: 10px;
	}
	
	.content {
		display: table-cell;
		position: relative;
		float: right;
		margin-left: 10px;
	}
}

.step.is-ready{
	display: table;
	height: 100px;
	.point {
		display: table-cell;
		width: 10px;
		height: 10px;
		border-radius: 50%;
		background-color: #0E098B;
		/* position: relative; */
		/* background-color:#B4CFEC; */
		float: left;
		margin: 10px;
	}
	
	.content {
		display: table-cell;
		position: relative;
		float: right;
		margin-left: 10px;
	}
}

.step-bar {
	width: 1px;
	background-color: #4995FA;
	display: inline-block;
	position: absolute;
	z-index: 1;
	/*这里设置大于2,即可看到真正连线的其实是两个元素的中心坐标*/
}

.btnApprove {
	background-color: aquamarine;
	position:absolute;
	margin-left: 100px;
}

.btnRefuse {
	background-color:greenyellow;
	position:absolute;
	margin-left: 150px;
}

3、效果

4、总结

        无

5、参考资料

jquery获取当前元素的坐标_jq获取元素坐标-CSDN博客

js+css实现两个dom元素之间的连线_js 连线-CSDN博客 

模板字符串 - JavaScript | MDN 


http://lihuaxi.xjx100.cn/news/1771628.html

相关文章

pytest + yaml 框架 -58.运行报告总结summary.json

前言 用例运行结束后&#xff0c;在本地生成summary.json 文件&#xff0c;总结运行结果。 v1.5.1版本更新内容&#xff1a; 1.解决参数化&#xff0c;中文在控制台输出问题 2.保存用例结果summary.json 保存用例结果summary.json 命令行执行用例 pytest运行结束&#xff0…

HTTP协议详解-下(Tomcat)

如何构造 HTTP 请求 对于 GET 请求 地址栏直接输入点击收藏夹html 里的 link script img a…form 标签 通过 form 标签构造GET请求 <body><!-- 表单标签, 允许用户和服务器之间交互数据 --><!-- 提交的数据报以键值对的结果来组织 --><form action&quo…

Python--列表及其应用场景

1.为什么需要列表 思考&#xff1a;有一个人的姓名(laowang)怎么书写存储程序&#xff1f; 用 变量。如&#xff1a;name laowang 但是&#xff0c;如果要记录很多人的名字&#xff0c;怎么办&#xff1f; 思考&#xff1a; 如果一个班级100位学生&#xff0c;每个人的…

C++中的函数重载:多功能而强大的特性

引言 函数重载是C编程语言中的一项强大特性&#xff0c;它允许在同一个作用域内定义多个同名函数&#xff0c;但这些函数在参数类型、个数或顺序上有所不同。本文将深入探讨函数重载的用法&#xff0c;以及它的优势和应用场景。 正文 在C中&#xff0c;函数重载是一项非常有…

遍历List集合和Map进行修改和删除报java.util.ConcurrentModificationException错误详解

一、异常产生 当我们使用foreach迭代一个ArrayList或者HashMap时&#xff0c;如果尝试对集合做一些修改操作&#xff08;例如删除元素或新增&#xff09;&#xff0c;可能会抛出java.util.ConcurrentModificationException的异常。 javapublic static void main(String[] args)…

解决方案 |法大大电子合同推动汽车后市场多元数智化发展

近日&#xff0c;商务部等9部门联合发布《关于推动汽车后市场高质量发展的指导意见》&#xff08;以下简称《指导意见》&#xff09;&#xff0c;明确了汽车后市场发展的总体目标和主要任务&#xff0c;系统部署推动汽车后市场高质量发展&#xff0c;促进汽车后市场规模稳步增长…

【使用python绘制统计图表】

在Python中&#xff0c;我们通常使用matplotlib&#xff0c;pandas&#xff0c;和seaborn等库来绘制统计图表。 A.以下是一些示例&#xff1a; 首先&#xff0c;确保你已经安装了这些库。如果没有&#xff0c;可以使用以下命令进行安装&#xff1a; pip install matplotlib …

浅谈插接母线温度在线监测系统研究与应用-安科瑞黄安南

摘要 低压封闭式插接母线是供配电设施的关键部件&#xff0c;安装在生产车间内部高空&#xff0c;不易保养和维护&#xff0c;在安装不良或保养不当时易发生故障。插接点温度的异常变化与母线故障的发生有着密切的关系&#xff0c;以汽车整车制造工厂为例&#xff0c;提出母线接…