由於系統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>