【发布时间】:2020-10-27 11:31:07
【问题描述】:
如何创建一个从起点沿顺时针和非顺时针方向展开的圆形进度条?
这是我目前的进展:https://jsfiddle.net/qchygknu/
HTML:
<div class="wheel circle-menu is-draggable-horizontal">
<div class="wheel__list circle-menu__circle" style="transform: rotate(1deg);">
<div class="wheel__list__item circle-menu__circle__item position--top-right" style="transform: rotate(60deg);">
<a href="#">
<div class="circle-menu__circle__item__inner" style="transform: rotate(-61deg);">
</div>
</a>
</div>
<div class="wheel__list__item circle-menu__circle__item position--bottom" style="transform: rotate(180deg);">
<a href="#">
<div class="circle-menu__circle__item__inner" style="transform: rotate(-181deg);">
</div>
</a>
</div>
<div class="wheel__list__item circle-menu__circle__item position--top-left" style="transform: rotate(300deg);">
<a href="#">
<div class="circle-menu__circle__item__inner" style="transform: rotate(-301deg);">
</div>
</a>
</div>
<svg class="circle-menu__circle__svg" viewBox="0 0 100 100">
<text id="myTimer" text-anchor="middle" x="100" y="110" style="font-size: 36px;" >0%</text>
<circle id="svg-circle-1" class="circle-menu__circle__svg__circle_1" cx="50" cy="50" r="50" transform="rotate(-90 50 50)"></circle>
<circle id="svg-circle-2" class="circle-menu__circle__svg__circle_2" cx="50" cy="50" r="50" transform="rotate(-90 50 50)"></circle>
<circle class="circle-menu__circle__svg__line" cx="50" cy="50" r="50" transform="rotate(-90 50 50)"></circle>
</svg>
</div>
</div>
CSS:
.circle-menu__circle {
list-style: none;
padding: 0;
margin: 0 auto;
position: relative;
width: 400px;
height: 400px;
}
.circle-menu__circle__item {
width: 0;
height: 100%;
position: absolute;
margin: 0 50%;
cursor: auto;
}
.circle-menu__circle__item__inner {
position: absolute;
left: 50%;
bottom: 98%;
margin-left: -5px;
width: 15px;
height: 15px;
border-radius: 50%;
background-color: #333;
}
.circle-menu__circle__svg {
height: 100%;
overflow: visible;
}
.circle-menu__circle__svg__circle_1 {
fill: transparent;
stroke: #333;
stroke-width: 0.5px;
}
.circle-menu__circle__svg__circle_2 {
fill: transparent;
stroke: #333;
stroke-width: 4px;
}
.circle-menu__circle__svg__line {
fill: transparent;
stroke: black;
stroke-width: 0.5px;
stroke-dasharray: 315;
stroke-dashoffset: 315;
-webkit-transition: stroke-dashoffset 1s;
transition: stroke-dashoffset 1s;
}
Javascript:
(function () {
// math trick 2*pi*57 = 358, must be less than 360 degree
var circle = document.getElementById('svg-circle-2');
var myTimer = document.getElementById('myTimer');
var interval = 30;
var angle = 0;
var angle_increment = 6;
window.timer = window.setInterval(function () {
circle.setAttribute("stroke-dashoffset", 45 );
circle.setAttribute("stroke-dasharray", angle + ", 20000");
myTimer.innerHTML = angle;
if (angle >= 90) {
window.clearInterval(window.timer);
}
angle += angle_increment;
}.bind(this), interval);
})()
我曾尝试使用svg 绘制圆圈并使用stroke-dasharray 和stroke-dashoffset 但我无法设置起点,它只能向一个方向扩展,我需要进度条在两个方向扩展时点被点击了
示例 - 第 1 步
示例 - 第 2 步
示例 - 第 3 步
示例 - 第 4 步
【问题讨论】:
标签: javascript html jquery css svg