• html实现竖直步骤条


    1、问题描述

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

    2、我的代码

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

            index.html

    1. html>
    2. <html>
    3. <head>
    4. <meta charset="utf-8" />
    5. <title>title>
    6. head>
    7. <script type="text/javascript" src="./js/jquery.min.js">script>
    8. <link rel="stylesheet" href="./css/myStyle.css" />
    9. <body>
    10. <script type="text/javascript">
    11. $(document).ready(function() {
    12. // $("body").append(drawLine($("#step1"), $("#step2"),"black"));
    13. // $("body").append(drawLine($("#step2"), $("#step3"),"black"));
    14. // $("body").append(drawLine($("#step3"), $("#step4"),"black"));
    15. var arrStep = [];
    16. var index = 0;
    17. $(".step").each(function() {
    18. console.log($(this).attr("id"));
    19. arrStep[index++] = $(this).attr("id");
    20. })
    21. for (var i = 0; i < arrStep.length - 1; i++) {
    22. $("body").append(drawLine($("#" + arrStep[i]), $("#" + arrStep[i + 1]), "#DDDDDD"));
    23. }
    24. $("#step1").addClass("is-ready");
    25. //$("body").append(drawLine($("#step1"),$("#"+finalStepId),"#DDDDDD"));
    26. $(".btnApprove").click(function() {
    27. var id = $(this).attr("id");
    28. var num = id.substr(id.length - 1, 1);
    29. var bAllow = true;
    30. // console.log(num)
    31. //如果当前步已完成,则直接退出函数
    32. if ($("#step" + num).hasClass("is-finish")) {
    33. return;
    34. }
    35. if (num > 1) {
    36. //第一步之后,只有当下一步未完成且当前步未完成时,上一步已完成,才可以点审批
    37. if ((!$("#step" + (Number(num) + 1)).hasClass("is-finish")) && ($("#step" + (Number(
    38. num) - 1)).hasClass("is-finish"))) {
    39. // console.log("num="+num)
    40. // console.log("bAllow="+bAllow)
    41. bAllow = true;
    42. } else {
    43. bAllow = false;
    44. }
    45. }
    46. if (bAllow) {
    47. console.log("step" + num)
    48. $("#step" + num).removeClass("is-ready");
    49. $("#step" + num).addClass("is-finish");
    50. if (document.getElementById("step" + (Number(num) + 1))) {
    51. $("#step" + (Number(num) + 1)).addClass("is-ready");
    52. }
    53. $("body").append(drawLine($("#step" + num), $("#step" + (Number(num) + 1)), "#4995FA"));
    54. }
    55. });
    56. $(".btnRefuse").click(function() {
    57. var id = $(this).attr("id");
    58. var num = id.substr(id.length - 1, 1);
    59. //如果当前步已完成,则直接退出函数
    60. if ($("#step" + num).hasClass("is-finish")) {
    61. return;
    62. }
    63. $("#step" + (Number(num) - 1)).removeClass("is-finish");
    64. $("#step" + (Number(num) - 1)).addClass("is-ready");
    65. $("#step" + num).removeClass("is-ready");
    66. $("#step-bar" + (Number(num) - 1) + "1").remove();
    67. })
    68. })
    69. //type:1同意,0拒绝
    70. function drawLine(start, end, colorCode) {
    71. if (document.getElementById(start.attr("id")) && document.getElementById(end.attr("id"))) {
    72. var startId = start.attr("id");
    73. var endId = end.attr("id");
    74. var startNum = startId.substr(startId.length - 1, 1);
    75. var endNum = endId.substr(endId.length - 1, 1);
    76. var startObj = start.offset();
    77. var endObj = end.offset();
    78. var returnStr = ""
    79. if (colorCode == "#DDDDDD") {
    80. return `
      `
    81. }
    82. returnStr = returnStr +
    83. `
      `
    84. console.log(returnStr)
    85. return returnStr;
    86. }
    87. }
    88. script>
    89. <div class="step" id="step1">
    90. <div class="point" id="point1">div>
    91. <div class="content">步骤一div>
    92. <button class="btnApprove" id="btnApprove1">同意button>
    93. <button class="btnRefuse" id="btnRefuse1">拒绝button>
    94. div>
    95. <div class="step" id="step2">
    96. <div class="point" id="point2">div>
    97. <div class="content">步骤二div>
    98. <button class="btnApprove" id="btnApprove2">同意button>
    99. <button class="btnRefuse" id="btnRefuse2">拒绝button>
    100. div>
    101. <div class="step" id="step3">
    102. <div class="point" id="point3">div>
    103. <div class="content">步骤三div>
    104. <button class="btnApprove" id="btnApprove3">同意button>
    105. <button class="btnRefuse" id="btnRefuse3">拒绝button>
    106. div>
    107. <div class="step" id="step4">
    108. <div class="point" id="point4">div>
    109. <div class="content">步骤四div>
    110. <button class="btnApprove" id="btnApprove4">同意button>
    111. <button class="btnRefuse" id="btnRefuse4">拒绝button>
    112. div>
    113. <div class="step" id="step5">
    114. <div class="point" id="point5">div>
    115. <div class="content">步骤五div>
    116. <button class="btnApprove" id="btnApprove5">同意button>
    117. <button class="btnRefuse" id="btnRefuse5">拒绝button>
    118. div>
    119. <div class="step" id="step6">
    120. <div class="point" id="point6">div>
    121. <div class="content">步骤六div>
    122. <button class="btnApprove" id="btnApprove6">同意button>
    123. <button class="btnRefuse" id="btnRefuse6">拒绝button>
    124. div>
    125. <div class="step" id="step7">
    126. <div class="point" id="point7">div>
    127. <div class="content">步骤七div>
    128. <button class="btnApprove" id="btnApprove7">同意button>
    129. <button class="btnRefuse" id="btnRefuse7">拒绝button>
    130. div>
    131. <div class="step" id="step8">
    132. <div class="point" id="point8">div>
    133. <div class="content">步骤八div>
    134. <button class="btnApprove" id="btnApprove8">同意button>
    135. <button class="btnRefuse" id="btnRefuse8">拒绝button>
    136. div>
    137. body>
    138. html>

            myStyle.css

    1. .step {
    2. display: table;
    3. height: 100px;
    4. .point {
    5. display: table-cell;
    6. width: 10px;
    7. height: 10px;
    8. border-radius: 50%;
    9. /* background-color: #B4CFEC; */
    10. /* position: relative; */
    11. background-color:#DDDDDD;
    12. float: left;
    13. margin: 10px;
    14. }
    15. .content {
    16. display: table-cell;
    17. position: relative;
    18. float: right;
    19. margin-left: 10px;
    20. }
    21. }
    22. .step.is-finish{
    23. display: table;
    24. height: 100px;
    25. .point {
    26. display: table-cell;
    27. width: 10px;
    28. height: 10px;
    29. border-radius: 50%;
    30. /* background-color: #0E098B; */
    31. /* position: relative; */
    32. background-color:#B4CFEC;
    33. float: left;
    34. margin: 10px;
    35. }
    36. .content {
    37. display: table-cell;
    38. position: relative;
    39. float: right;
    40. margin-left: 10px;
    41. }
    42. }
    43. .step.is-ready{
    44. display: table;
    45. height: 100px;
    46. .point {
    47. display: table-cell;
    48. width: 10px;
    49. height: 10px;
    50. border-radius: 50%;
    51. background-color: #0E098B;
    52. /* position: relative; */
    53. /* background-color:#B4CFEC; */
    54. float: left;
    55. margin: 10px;
    56. }
    57. .content {
    58. display: table-cell;
    59. position: relative;
    60. float: right;
    61. margin-left: 10px;
    62. }
    63. }
    64. .step-bar {
    65. width: 1px;
    66. background-color: #4995FA;
    67. display: inline-block;
    68. position: absolute;
    69. z-index: 1;
    70. /*这里设置大于2,即可看到真正连线的其实是两个元素的中心坐标*/
    71. }
    72. .btnApprove {
    73. background-color: aquamarine;
    74. position:absolute;
    75. margin-left: 100px;
    76. }
    77. .btnRefuse {
    78. background-color:greenyellow;
    79. position:absolute;
    80. margin-left: 150px;
    81. }

    3、效果

    4、总结

            无

    5、参考资料

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

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

    模板字符串 - JavaScript | MDN 

  • 相关阅读:
    关于setInteval定时器在不同浏览器下表现差异
    最小栈(C++解法)
    NGINX缓存详解之服务端缓存
    QT SIGSEGV Segmentation fault
    C语言 指针进阶 贰
    【数据分享】2022年全国各城市公交线路与站点数据
    【Node.js】大前端技能最通俗易懂的讲解 快速入门必看
    序章 调度系统架构设计总述
    Pair RDD的操作
    蓝桥杯(日期问题纯暴力)
  • 原文地址:https://blog.csdn.net/weixin_42032770/article/details/134314847