我需要用三个值的动画制作一个svg饼图,在代码中找不到我的错误。当我移除setTimeout(function(){circle.setAttribute(“Stroke-Dasharray”,p+“100”);},10);在JavaScript中,饼图看起来不错,但没有动画。当我添加这段代码时,它是动画的,但不是加载所有的值,而是逆时针加载,而不是顺时针加载。我不知道任何javascript,但需要添加两个额外的值到现有的饼图,并使用给定的javascript,我创建了两个额外的圆圈。只有一个圆圈的动画效果很好。我注意到最终结果(动画结束后留下的粉红色馅饼)来自。pie div35中的值,但是如果我将div留空,整个馅饼图就会消失。
HTML
<div class="widgets">
<div class="left box stats">
<div class="content">
<div class="widget-row">
<div class="stat stat--pie stat--productivity">
<div class="pie">35</div>
</div>
</div>
</div>
</div>
</div>
CSS
.box.stats .stat.stat--pie {
width: 170px;
display: -webkit-box;
display: -webkit-flex;
display: -ms-flexbox;
display: flex;
-webkit-box-orient: vertical;
-webkit-box-direction: normal;
-webkit-flex-direction: column;
-ms-flex-direction: column;
flex-direction: column;
-webkit-box-align: center;
-webkit-align-items: center;
-ms-flex-align: center;
align-items: center;
}
.box.stats .stat.stat--pie .pie {
position: relative;
height: 170px;
width: 170px;
}
.box.stats .stat.stat--pie .pie > svg {
-webkit-transform: rotate(-90deg);
-ms-transform: rotate(-90deg);
transform: rotate(-90deg);
width: 170px;
height: 170px;
}
.box.stats .stat.stat--pie .pie > svg circle {
-webkit-transition: all 1.2s ease-out;
-o-transition: all 1.2s ease-out;
transition: all 1.2s ease-out;
}
.box.stats .content .stat.stat--productivity .pie svg {
border-radius: 50%;
}
.box.stats .content .stat.stat--productivity .pie svg circle {
fill: none;
stroke: #283250;
stroke-width: 32;
}
.box.stats .content .stat.stat--productivity .pie svg .circle2 {
fill: none;
stroke: #E8E05A;
stroke-width: 32;
}
.box.stats .content .stat.stat--productivity .pie svg .circle3 {
fill: none;
stroke: #E24264;
stroke-width: 32;
}
JavaScript
function $$(selector, context) {
context = context || document;
var elements = context.querySelectorAll(selector);
return Array.prototype.slice.call(elements);
}
$$('.stat--productivity .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 circle2 = document.createElementNS(NS, "circle");
var circle3 = document.createElementNS(NS, "circle");
var digit = document.createElement("H1");
var percent = document.createElement("span");
circle.setAttribute("r", 16);
circle.setAttribute("cx", 16);
circle.setAttribute("cy", 16);
circle.setAttribute("stroke-dasharray", "100 100");
setTimeout(function(){
circle.setAttribute("stroke-dasharray", p + " 100");
}, 10);
circle2.classList.add('circle2');
circle2.setAttribute("r", 16);
circle2.setAttribute("cx", 16);
circle2.setAttribute("cy", 16);
circle2.setAttribute("stroke-dasharray", "90 100");
setTimeout(function(){
circle2.setAttribute("stroke-dasharray", p + " 100");
}, 10);
circle3.classList.add('circle3');
circle3.setAttribute("r", 16);
circle3.setAttribute("cx", 16);
circle3.setAttribute("cy", 16);
circle3.setAttribute("stroke-dasharray", "50 100");
setTimeout(function(){
circle3.setAttribute("stroke-dasharray", p + " 100");
}, 10);
svg.setAttribute("viewBox", "0 0 32 32");
digit.textContent = pie.textContent;
percent.textContent = '%';
pie.textContent = '';
pie.appendChild(svg);
svg.appendChild(circle);
svg.appendChild(circle2);
svg.appendChild(circle3);
pie.appendChild(digit);
pie.appendChild(percent);
});
Link to codepen: https://codepen.io/anon/pen/jjRYwR
下面是顺时针展开的多值图表的工作示例:https://jsfiddle.net/bowkugsq/
对原始代码有多处更改,但我试图尽可能多地保留这些更改,以便让OP理解更改并应用于自己的解决方案。
CSS为每个循环
枚举了带有索引后缀的类。还有一组用于标签
(图例)的类来反映饼图的颜色并进行更多的定制。如果想要在图表中添加下一个片段,则需要再添加一个circle
和label
类。
$$('.stat--productivity .pie').forEach(function(pie) {
var percents = pie.textContent.split(",");
percents = percents.map(function(pct, idx) {
return {
value: parseFloat(pct),
sum: 0,
idx: idx + 1
}
});
for (var i = 0; i < percents.length; i++) {
var prevSum = (i > 0) ? percents[i - 1].sum : 1;
percents[i].sum = prevSum + percents[i].value;
};
percents.reverse();
var NS = "http://www.w3.org/2000/svg";
var svg = document.createElementNS(NS, "svg");
pie.textContent = ''; //clear div
svg.setAttribute("viewBox", "0 0 32 32");
pie.appendChild(svg);
percents.forEach(function(pct, idx) {
var circle = document.createElementNS(NS, "circle");
circle.classList.add("circle" + pct.idx);
circle.setAttribute("r", 16);
circle.setAttribute("cx", 16);
circle.setAttribute("cy", 16);
circle.setAttribute("stroke-dasharray", "0 100");
setTimeout(function() {
circle.setAttribute("stroke-dasharray", pct.sum + " 100");
});
svg.appendChild(circle);
});
percents.forEach(function(pct, idx) {
var digit = document.createElement("span");
digit.textContent = pct.value + " %";
digit.classList.add("label" + (idx + 1));
pie.appendChild(digit);
});
});
问题内容: 我想只使用具有svg / canvas和jsmax的css来动画化线条的渐进绘图。我想画的线的想法可以在这里找到 问题答案: 此答案中列出了三种技术: 有一个全SVG解决方案,涉及逐步修改形状以绘制越来越长的“破折号”,然后是巨大的空白。 演示:[http](http://phrogz.net/svg/progressively-drawing-svg-path-via- dashar
问题内容: 我在制作JApplet并遇到动画问题。 这是我的代码: 有了它,就没有动画:在循环过程中什么也没发生,repaint()方法似乎只在精灵停止移动后才起作用。 我只想将Swing用于此目的,关于如何进行的任何想法? 谢谢阅读。 问题答案: 您应该使用a 来执行动画,而不要使用“线程睡眠”。这是一个很好的链接,可以助您一臂之力:http : //java.sun.com/docs/book
如何在侧滑块中制作一些不同类型的动画。有图书馆吗?如果有图书馆,请提供我。
https://www.chunten.com/angpu/lottiefiles.html 这种动画是怎么制作出来的? 这种我之前一般是用adobe flash制作,后来用adobe animate制作,但我想弄成lottie动画: 像 把这个放到html里就可以看到动画了,但是flash和animate都不能实现,难道需要用adobe AE来制作吗??有没有具体的制作?可以直接生成这种动画js
我将以下数据存储在一个数据框中。 我可以使用plotly(使用px.pie或go.pie)绘制单行的饼图。这里我绘制了最后一行的数据。 有没有一种方法可以创建一个动画饼图,一个接一个地显示每行的数据。它似乎ploly Express支持散点图和条形图的动画,但我找不到任何与饼图相关的东西。注意:我只是在寻找帮助来做这件事。我知道如何使用matplotlib。
问题内容: 我正在尝试在特定时间段内对图像进行动画处理。它在Objective C中可以正常工作。但是,对于Swift来说却不起作用,我的错误在哪里? Objective-C的代码是- 快速代码是- 问题答案: 这不是快速代码。很快就会 修改后的代码: