首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SVG animateTransform不工作于css3变换

SVG animateTransform不工作于css3变换
EN

Stack Overflow用户
提问于 2015-12-15 20:32:50
回答 1查看 686关注 0票数 1

SVG animateTransform不像css3转换那样工作。

代码语言:javascript
复制
svg.truck {
  overflow: visible;
}
.smoke{
  transform-origin: 50% 50%;
  animation: smoke 1.5s infinite ease-out;
}
@keyframes smoke {
  from {transform: translate(0, 5px) scale(1, 1);}
  to { transform: translate(40px, 10px) scale(4, 4);}
}
代码语言:javascript
复制
<svg class='truck' height='53' viewBox='0 0 93 53' width='93' xmlns='http://www.w3.org/2000/svg'>
  <g>
    <circle cx='90' cy='35' fill='#000' r='2.5'>
      <animateTransform attributeName='transform' attributeType='XML' dur='1.5s' from='1' repeatCount='indefinite' to='4' type='scale'></animateTransform>
      <animateTransform additive='sum' attributeName='transform' attributeType='XML' dur='1.5s' from='0, 5' repeatCount='indefinite' to='40,10' type='translate'></animateTransform>
    </circle>
  </g>
</svg>
<hr>
<svg class='truck' height='53' viewBox='0 0 93 53' width='93' xmlns='http://www.w3.org/2000/svg'>
  <g class='smoke-group'>
    <circle class='smoke' cx='90' cy='35' fill='#000' r='2.5' />
  </g>
</svg>

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-12-16 07:14:55

问题是SVG动画无法像CSS那样设置转换原点。因此,尺度变换对位置和尺寸都有影响。

最简单的解决方案是将圆置于原点,并将其与父组元素重新定位。

此外,要匹配CSS,需要切换<animateTransform>元素的顺序。

代码语言:javascript
复制
svg.truck {
  overflow: visible;
}
.smoke{
  transform-origin: 50% 50%;
  animation: smoke 1.5s infinite ease-out;
}
@keyframes smoke {
  from {transform: translate(0, 5px) scale(1, 1);}
  to { transform: translate(40px, 10px) scale(4, 4);}
}
代码语言:javascript
复制
<svg class='truck' height='53' viewBox='0 0 93 53' width='93' xmlns='http://www.w3.org/2000/svg'>
  <g transform="translate(90,35)">
    <circle cx='0' cy='0' fill='#000' r='2.5'>
      <animateTransform attributeName='transform' attributeType='XML' dur='1.5s' from='0, 5' repeatCount='indefinite' to='40,10' type='translate'></animateTransform>
      <animateTransform additive='sum' attributeName='transform' attributeType='XML' dur='1.5s' from='1' repeatCount='indefinite' to='4' type='scale'></animateTransform>
    </circle>
  </g>
</svg>
<hr>
<svg class='truck' height='53' viewBox='0 0 93 53' width='93' xmlns='http://www.w3.org/2000/svg'>
  <g class='smoke-group'>
    <circle class='smoke' cx='90' cy='35' fill='#000' r='2.5' />
  </g>
</svg>

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

https://stackoverflow.com/questions/34298861

复制
相关文章

相似问题

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