gpt4 book ai didi

javascript - 向 svg 饼图添加填充动画

转载 作者:太空宇宙 更新时间:2023-11-04 02:47:16 25 4
gpt4 key购买 nike

我想在加载时使用动态和未知值制作饼图动画。假设我尽快检索值并将其转换为四舍五入的百分比:

var percentage = Math.round(sum * 100 / total);

然后我把我的值(value)放在那里:

<div class="pie animated" id="pie-get-percentage"></div>

$('#pie-get-percentage').html(percentage);

SVG

$(document).ready(function() {
$('#pie-get-percentage').html(percentage);

function $$(selector, context) {
context = context || document;
var elements = context.querySelectorAll(selector);
return Array.prototype.slice.call(elements);
}

$$('.pie').forEach(function(pie) {
var p = parseFloat(pie.textContent);
var NS = "http://www.w3.org/2000/svg";
var svg = document.createElementNS(NS, "svg");
var circle = document.createElementNS(NS, "circle");
var title = document.createElementNS(NS, "title");

circle.setAttribute("r", 16);
circle.setAttribute("cx", 16);
circle.setAttribute("cy", 16);
circle.setAttribute("stroke-dasharray", p + " 100");

svg.setAttribute("viewBox", "0 0 32 32");
title.textContent = pie.textContent;
pie.textContent = '';
svg.appendChild(title);
svg.appendChild(circle);
pie.appendChild(svg);
});

});

CSS

.pie-wrapper {
.pie {
width: 100px;
height: 100px;
display: inline-block;
margin: 10px;
transform: rotate(-90deg);
}
svg {
background: $primary;
border-radius: 50%;
}
circle {
fill: $primary;
stroke: $secondary;
stroke-width: 32;
}
@keyframes grow {
to {
stroke-dasharray: 100 100
}
}
.pie.animated {
animation: grow 2s linear;
}
}

如您所见,我以为我必须简单地摆弄 .pie.animated CSS 规则,但到目前为止,我一直无法为我的动态值设置动画,只能设置完整的圆圈.

基本上,如果我的值为 42%,我会尝试将我的圈子扩大到 SVG 的 42%。但问题是我无法真正为我的 CSS 动画赋予动态值。也许我可能需要使用内联 CSS,但我不确定动画关键帧是否可行。

JSFiddle 是 here

最佳答案

我玩过你的 JSFiddle 的 JQuery 部分,这就是我的结果。

<div class="pie">60%</div>

<div class="pie">90%</div>

<div class="pie">12%</div>

这个想法很简单。我每次都使用 javascript 间隔计时器来调用计数计时器。我还添加了一些 max-val、inc-val 和其他相关变量以使其工作。

function $$(selector, context) {
context = context || document;
var elements = context.querySelectorAll(selector);
return Array.prototype.slice.call(elements);
}

function count(){
var isUsed = false;
$$('.pie').forEach(function(pie) {
var p = parseFloat(pie.textContent);

if(pie.maxValue == null){
pie.maxValue = p;
pie.incValue = p / 100.0;
pie.lastValue = 0;
}
else
pie.lastValue = pie.lastValue + pie.incValue;

if(pie.lastValue <= pie.maxValue){
var NS = "http://www.w3.org/2000/svg";
var svg = document.createElementNS(NS, "svg");
var circle = document.createElementNS(NS, "circle");
var title = document.createElementNS(NS, "title");

circle.setAttribute("r", 16);
circle.setAttribute("cx", 16);
circle.setAttribute("cy", 16);
circle.setAttribute("stroke-dasharray", pie.lastValue + " 100");

svg.setAttribute("viewBox", "0 0 32 32");
title.textContent = pie.textContent;
pie.textContent = '';
svg.appendChild(title);
svg.appendChild(circle);
pie.appendChild(svg);

isUsed = true;
}

});
if(isUsed)
window.setTimeout(function() { count(); }, 30);
}

window.setTimeout(function() { count(); }, 30);

count();

关于javascript - 向 svg 饼图添加填充动画,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33674896/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com