javascript - 圆圈上的百分比动画
问题描述
我有一个将百分比显示为圆圈的代码。是否有可能做一些事情让动画从顶部开始,向右,而不是像现在,它从右边开始。这条线可以绕吗?有没有其他更好的代码来做这样的事情?我只对 vanillaJS 感兴趣。
var circle = document.querySelector('circle');
var radius = circle.r.baseVal.value;
var circumference = radius * 2 * Math.PI;
circle.style.strokeDasharray = circumference;
circle.style.strokeDashoffset = circumference;
function setProgress(percent) {
var offset = circumference - percent / 100 * circumference;
circle.style.strokeDashoffset = offset;
}
setProgress(60);
<svg class="progress-ring" width="120" height="120">
<circle class="progress-ring__circle" stroke="#000" stroke-width="8" fill="transparent" r="56" cx="60" cy="60">
</svg>
解决方案
正如我所评论的,您可以旋转 svg 元素 transform:rotate(-90deg)。或者,您可以旋转圆圈。您也可以使用路径而不是圆圈并使其从顶部开始。如果你想使用路径,你可以这样做:
在这种情况下,路径从顶部开始M60,4
接下来是一个半径均为 56 的弧。第一个弧结束于 60,116 跟随第二个弧A56,56,0 0 1 60,4
,最后你关闭路径z
因为circumference
你不需要知道半径。您可以执行var circumference = circle.getTotalLength();
wheregetTotalLength
是返回路径总长度的方法。
var circle = document.querySelector('path');
var circumference = circle.getTotalLength();
circle.style.strokeDasharray = circumference;
circle.style.strokeDashoffset = circumference;
function setProgress(percent) {
var offset = circumference - percent / 100 * circumference;
circle.style.strokeDashoffset = offset;
}
setProgress(60);
<svg class="progress-ring" width="120" height="120">
<path fill="none" class="progress-ring__circle" stroke="black" stroke-linecap="round" stroke-width="8" d="M60,4A56,56,0 0 1 60,116A56,56,0 0 1 60,4z" />
</svg>
推荐阅读
- javascript - 如何从 JS 代码中删除 dns 依赖项
- visual-studio-code - 为什么打开最近时“ctrl + 鼠标左键”不起作用?
- c# - 导航到 button_clicked 中的另一个页面时出现 Xamarin.Forms 错误
- angular - 角度 - 无法读取未定义的属性
- json - Gson 的意外行为
- azure - Azure VNET 对等互连与 NSG 异常
- python - 如何动态读取 QLineEdit 数据
- jestjs - 如何在玩笑中配置所有 cmmon 文件?
- google-apps-script - 无法打印/查看日志(谷歌表)
- apache - 将第三级域重定向到文件夹