html+css+js实现step进度条效果

实现效果

代码实现

HTML部分

html 复制代码
<div class="box">
    <ul class="step">
      <li class="circle actives ">1</li>
      <li class="circle">2</li>
      <li class="circle">3</li>
      <li class="progress"></li>
    </ul>
    <ul class="text">
      <li class="item shows">步骤一</li>
      <li class="item">步骤二</li>
      <li class="item">步骤三</li>
    </ul>
    <button>下一步</button>
  </div>

CSS部分

css 复制代码
<style>
    *{
      padding: 0;
      margin: 0;
      box-sizing: border-box;
    }
    ul{
      list-style: none;
    }
    .box{
      padding: 25px;
      margin: 50px auto;
      width: 870px;
      height: 160px;
      border: 1px solid #c0c4cc;
    }
    .step{
      position: relative;
      display: flex;
      justify-content: space-between;
      height: 25px;
      line-height: 25px;
    }
    .step::before{
      content: '';
      position: absolute;
      top: 50%;
      transform: translateY(-50%);
      width: 100%;
      height: 3px;
      background-color: #c0c4cc;
      z-index: -2;
    }
    .step .circle{
      position: relative;
      width: 25px;
      height: 25px;
      border-radius: 50%;
      border: 2px solid #c0c4cc;
      text-align: center;
      background-color: #fff;
      line-height: 22px;
      color: #c0c4cc;
    }
    .step .circle.actives{
      position: relative;
      color: black;
      border: 2px solid black;
      font-weight: bold;
    }
    .step .circle.circle.active::before{
      content: '';
      position: absolute;
      left: -2px;
      top: -2px;
      width: 100%;
      height: 100%;
      border-radius: 50%;
      border: 2px solid #67c23a;
      text-align: center;
      background-image: url(./03.png);
      background-size: cover;
      line-height: 22px;
      transition:0.5s ease ;
    }
    .step .progress{
      position: absolute;
      top: 50%;
      transform: translateY(-50%);
      width:0%;
      background-color: #67c23a;
      height: 3px;
      z-index: -1;
      transition:0.5s ease;
    }
    .text{
      display: flex;
      justify-content: space-between;
      height: 38px;
      line-height: 38px;
      margin-bottom: 10px;
    }
    .text li{
      color:#c0c4cc ;
      font-weight: bold;
    }
    .text li.shows{
      color: black;
      font-weight: bold;
    }
    .text li.show{
      color: #67c23a;
    }
    button{
      cursor: pointer;
      padding: 8px 15px;
      background-color: #fff;
      color: #c0c4cc;
      border: 1px solid #c0c4cc;
      border-radius: 3px;
    }
    button:hover{
      border: 1px solid rgba(64, 158, 255, 0.1);
      background-color:rgba(64, 158, 255, 0.1);
      color:#409eff ;
    }
    button:disabled{
      background-color: #e0e0e0;
      cursor: not-allowed;
    }
  </style>

JS部分

javascript 复制代码
<script>
    const btn=document.querySelector('button')
    const circles=document.querySelectorAll('.circle')
    const progress=document.querySelector('.progress')
    const items=document.querySelectorAll('.item')
    let i = -1
    btn.addEventListener('click',function(){
      i++
      if(i>=circles.length) return btn.disabled=true
      if(i<circles.length){
        // 对号变化
        circles[i].classList.add('active')
        // 文字
        items[i].classList.add('show')
        // 进度条
        const actived=document.querySelectorAll('.active')
        progress.style.width=(actived.length-1) / (circles.length-1) * 100 + '%'
      }
      if(i<circles.length-1){
        circles[i+1].classList.add('actives')
        items[i+1].classList.add('shows')
      }
    })
  </script>
相关推荐
燃先生._.1 小时前
Day-03 Vue(生命周期、生命周期钩子八个函数、工程化开发和脚手架、组件化开发、根组件、局部注册和全局注册的步骤)
前端·javascript·vue.js
高山我梦口香糖2 小时前
[react]searchParams转普通对象
开发语言·前端·javascript
唯之为之2 小时前
巧用mask属性创建一个纯CSS图标库
css·svg
black^sugar3 小时前
纯前端实现更新检测
开发语言·前端·javascript
寻找沙漠的人4 小时前
前端知识补充—CSS
前端·css
2401_857600954 小时前
SSM 与 Vue 共筑电脑测评系统:精准洞察电脑世界
前端·javascript·vue.js
2401_857600954 小时前
数字时代的医疗挂号变革:SSM+Vue 系统设计与实现之道
前端·javascript·vue.js
GDAL4 小时前
vue入门教程:组件透传 Attributes
前端·javascript·vue.js
小白学大数据4 小时前
如何使用Selenium处理JavaScript动态加载的内容?
大数据·javascript·爬虫·selenium·测试工具