我有一个脚本可以用作饼图加载程序,但是一旦加载到整个圆圈,加载程序部分就会消失。我希望它在“计时器”达到100%(又称整圈)时停止。但我不知道。
这是我的代码
var loader = document.getElementById('pie-loader'),
α = 0,
π = Math.PI,
t = 22,
tdraw;
function PieDraw() {
α++;
α %= 360;
var r = (α * π / 180),
x = Math.sin(r) * 90,
y = Math.cos(r) * -90,
mid = (α > 180) ? 1 : 0,
anim = 'M 0 0 v -90 A 90 90 1 ' + mid + ' 1 ' + x + ' ' + y + ' z';
loader.setAttribute('d', anim);
if (α != 0) {
tdraw = setTimeout(PieDraw, t);
}
}
PieDraw();
.pie svg {
position: absolute;
top: 50%;
left: 50%;
z-index: 100;
display: block;
width: 180px;
height: 180px;
-webkit-transform: translateX(-50%) translateY(-50%);
transform: translateX(-50%) translateY(-50%);
pointer-events: none
}
.pie #pie-loader {
fill: #155385;
fill-opacity: .5
}
<div class="pie">
<svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="180" height="180" viewbox="0 0 180 180"><path id="pie-loader" transform="translate(90,90)" /></svg>
</div>
蓝色圆圈填满后,在停止此操作方面的任何帮助,将不胜感激!
我尝试添加它,但是它不是100%充满。
function PiePause(){
clearTimeout(tdraw);
var anim = 'M 0 0 v -90 A 90 90 1 1 1 -3.140954703225074 -89.94517443171861 z';
loader.setAttribute('d',anim);
}
谢谢。
答案 0 :(得分:1)
if((α != 0) && (α < 360)) { tdraw = setTimeout(PieDraw,t); }
对此条件进行更改并检查。
答案 1 :(得分:1)
好吧,我不确定发布答案的用户发生了什么,但是从他们发布的内容开始,进行了很小的更改,现在可以正常工作了:
var loader = document.getElementById('pie-loader'), α = 0, π = Math.PI, t = 22, tdraw;
function PieDraw(){
α++;
α %= 360;
var r = ( α * π / 180 )
, x = Math.sin( r ) * 90
, y = Math.cos( r ) * - 90
, mid = ( α > 180 ) ? 1 : 0
, anim = 'M 0 0 v -90 A 90 90 1 '
+ mid + ' 1 '
+ x + ' '
+ y + ' z';
loader.setAttribute( 'd', anim );
if((α !== 0) && (α < 359)) {
tdraw = setTimeout(PieDraw,t);
} else {
var anim = 'M 0 0 v -90 A 90 90 1 1 1 -0.01 -90 z';
loader.setAttribute('d',anim);
}
}
答案 2 :(得分:1)
问题不在于超时,而是关于实现100%圆以达到添加封闭参数所需的效果。可以完成以下操作:
var loader = document.getElementById('pie-loader'),
α = 0,
π = Math.PI,
t = 22,
tdraw, prevMid = '';
function PieDraw() {
α++;
α %= 360;
var r = (α * π / 180),
x = Math.sin(r) * 90,
y = Math.cos(r) * -90,
mid = (α > 180) ? 1 : 0,
anim = 'M 0 0 v -90 A 90 90 1 ' + mid + ' 1 ' + x + ' ' + y + ' z';
if (α == 0) {
anim = ' M 0, 0' +
'm -90, 0' +
'a 90,90 0 1,0 180,0' +
'a 90,90 0 1,0 -180,0 z'
}
loader.setAttribute('d', anim);
if (α != 0) {
tdraw = setTimeout(PieDraw, t);
}
}
PieDraw();
.pie svg {
position: absolute;
top: 50%;
left: 50%;
z-index: 100;
display: block;
width: 180px;
height: 180px;
-webkit-transform: translateX(-50%) translateY(-50%);
transform: translateX(-50%) translateY(-50%);
pointer-events: none
}
.pie #pie-loader {
fill: #155385;
fill-opacity: .5
}
<div class="pie">
<svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="180" height="180" viewbox="0 0 180 180"><path id="pie-loader" transform="translate(90,90)" />
</svg>
</div>
您实际上获得了99.99%的圈子,需要关闭。