CSS+JS 實現動態曲線進度條


由於系統UI風格升級,產品童鞋和UI童鞋總是想要搞點兒事情出來,項目頁面上的進度條從直線變成了曲線,哈哈,好吧,那就迎難而上

實現效果:

1.簡單搞一搞 CSS , 此處代碼有折疊

  .process {
    width: 110px;
    box-sizing: border-box;
    margin: 0 auto;
    height: 55px;
    overflow: hidden;
  } 
  .ring-def {
    width: 110px;
    height: 55px;
    border-radius: 110px 110px 0 0;
    border: 2px solid #E5E5E5;
    border-bottom: none;
    box-sizing: border-box;
  }
  .ring-color {
    width: 110px;
    height: 55px;
    border-radius: 0 0 110px 110px;
    border: 2px solid #ff6200;
    border-top: none;
    box-sizing: border-box;
    transform-origin: top;
    transition: 1s;
  }
  p {
    text-align: center;
    color: #828282;
  }
  input,
  button {
    width: 45px;
    height: 30px;
    line-height: 30px;
    color: #828282;
    font-size: 14px;
    outline: none;
    border: 1px solid #dddddd;
    text-align: center;
  }

分析一下實現思路:

  • 想要曲線效果,首先就能想到 border-radius 屬性

  • 兩個大小寬高一致的div,設置不同的邊款顏色,一個隱藏,一個顯示

  • 動態獲取進度條時,隱藏的半圓,通過角度換算,旋轉顯示對應角度的弧長

搞事情,不多說,上代碼

  <div class="process">
    <div class="ring-def"></div>
    <div class="ring-color" id="ringColor"></div>
  </div>
  <p>
    設置進度條:<input type="number" max="100" min="0" id="procNum"> % <button id="btn" onclick="getProcess()">確定</button>
  </p>
  <script>
    function getProcess() {
      // 此處input用戶輸入 模擬真實請求返回數據
      var val = document.getElementById('procNum').value
      var tmp = val <= 0 ? 0 : val >= 100 ? 100 : val
      document.getElementById('procNum').value = tmp
      var deg = Math.floor(tmp / 100 * 180)
      document.getElementById('ringColor').style.transform = 'rotate(' + deg + 'deg)'
    }
  </script>


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM