gpt4 book ai didi

javascript - 带有关键帧和 css 变量的 stroke-dashoffset 动画

转载 作者:行者123 更新时间:2023-11-28 01:02:46 27 4
gpt4 key购买 nike

要么我疯了,要么我发现了关键帧和 svg 动画的怪异之处。我只是围绕一个圆圈设置 SVG 笔画动画,这实际上创建了一个动画百分比刻度盘。

只要我在混合中加入 CSS 变量,关键帧动画就不会激活 - 它只是跳到最终状态。

这是我的 PEN 演示: https://codepen.io/tateman66/pen/ePYZmx

document.getElementById('btn').addEventListener('click', function(){

var percent = document.getElementById('percent').value;
document.querySelector('.left').style.setProperty('--leftPercent', percent);
});
svg {
height: 200px; width: 200px; --leftPercent: 300;
}

.center { fill: #6d6e71; }
.stroke {
stroke: rgba(109,110,113, .75);
fill: none;
stroke-dasharray: 300;
stroke-dashoffset: var(--leftPercent);
animation: left 5s ease-in forwards;
//transition: stroke-dashoffset 2s;
}

@keyframes left {
to { stroke-dashoffset: var(--leftPercent); }
}
<svg viewBox="0 0 100 100" class="left">
<circle class="center" cx="50" cy="50" r="25"></circle>
<circle class="stroke" cx="50" cy="50" r="45" stroke-width="10" stroke-miterlimit="10" stroke-dasharray="300" stroke-dashoffset="300"></circle>
</svg>

<br><br>
<input type="text" id="percent" value="300" />
<button id="btn">Animate</button>

在文本框中输入 50,然后单击动画。然后,翻转注释掉的行以使用动画而不是过渡并重新运行它。

使用过渡动画但不使用关键帧。

有人看到里面有什么明显的东西吗?

谢谢

最佳答案

因为 to 状态与 from 状态相同所以没有动画。基本上,如果您不指定 from,将使用元素的初始值,并且该值也使用 CSS 变量设置,如 to。另一点是动画只会运行一次,所以即使您稍后更改它的某些状态,您也不会触发动画再次运行。

您可以简单地考虑为此进行过渡:

document.getElementById('btn').addEventListener('click', function(){

var percent = document.getElementById('percent').value;
document.querySelector('.left').style.setProperty('--leftPercent', percent);
});
svg {
height: 200px; width: 200px; --leftPercent: 300;
}

.center { fill: #6d6e71; }
.stroke {
stroke: rgba(109,110,113, .75);
fill: none;
stroke-dasharray: 300;
stroke-dashoffset: var(--leftPercent);
animation: left 5s ease-in forwards;
transition: stroke-dashoffset 2s;
}
<svg viewBox="0 0 100 100" class="left">
<circle class="center" cx="50" cy="50" r="25"></circle>
<circle class="stroke" cx="50" cy="50" r="45" stroke-width="10" stroke-miterlimit="10" stroke-dasharray="300" stroke-dashoffset="300"></circle>
</svg>

<br><br>
<input type="text" id="percent" value="300" />
<button id="btn">Animate</button>

关于javascript - 带有关键帧和 css 变量的 stroke-dashoffset 动画,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52557663/

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