首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带有关键帧和css变量的dashoffset动画

带有关键帧和css变量的dashoffset动画
EN

Stack Overflow用户
提问于 2018-09-28 14:40:12
回答 1查看 1.6K关注 0票数 0

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

一旦我抛出一个CSS变量在混合,关键帧动画没有动画-它只是跳到最后的状态。

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

代码语言:javascript
复制
document.getElementById('btn').addEventListener('click', function(){
  
  var percent = document.getElementById('percent').value;
  document.querySelector('.left').style.setProperty('--leftPercent', percent);
});
代码语言:javascript
复制
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); }
}
代码语言:javascript
复制
<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抛入文本框并单击“动画”。然后,翻转掉注释掉的行,以使用动画而不是转换,并重新运行它。

动画与过渡,但没有关键帧。

有人在里面看到明显的东西了吗?

谢谢

EN

回答 1

Stack Overflow用户

发布于 2018-09-28 15:12:42

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

您可以简单地考虑这方面的过渡:

代码语言:javascript
复制
document.getElementById('btn').addEventListener('click', function(){
  
  var percent = document.getElementById('percent').value;
  document.querySelector('.left').style.setProperty('--leftPercent', percent);
});
代码语言:javascript
复制
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;
}
代码语言:javascript
复制
<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>

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52557663

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档