svg 怎么应用 CSS3 的过渡效果,实现 path 路径的平滑过渡??

svg 怎么应用 CSS3 的过渡效果,实现 path 路径的平滑过渡??

想要实现的效果:

由这张图 clipboard.png 平滑过渡到:
clipboard.png

代码如下(相关详情在js代码部分):

 css: 
   #svg , #path {
      transition:all 0.5s ease-in-out;
      -webkit-transition:all 0.5s ease-in-out;
      -moz-transition:all 0.5s ease-in-out;
      -o-transition:all 0.5s ease-in-out;
      -ms-transition:all 0.5s ease-in-out;
   }
   #path {
      fill:#e7e7e7;
      stroke:none;
   }
 html:

 <svg width='100' height='100' xmlns='http://www.w3.org/2000/svg' version='1.1' id='svg'>
    <path d='' id='toggle' id='path'></path>
 </svg>

 javascript: 
 
 var d1 = 'M 0 0 h 5 v 20 h -5 L 0 0  M 11 0 h 5 v 20 h -5 L 11 0 Z';
 var d2 = 'M 0 0 L 18 11 L 0 22 L 0 0 Z';
 var svg = $id('svg');
 var path = $id('path');

 // 实现点击 svg 路径发生变化。
 // 不过普通情况(无 CSS3 Transition 效果下),过渡很生硬
 // 但是貌似无论我给 svg 还是 path 亦或是两者都加: transition: all 0.5s ease-in-out
 // 都无法实现平滑过渡!
 // 是否 svg 不支持 CSS3 的 transition ??
 loginEvent(svg , 'click' , setPath , false ,false);
 function setPath(){
   var d = path.getAttribute('d');
   if (d === '' || d === d2) {
      path.setAttribute(d , d1);
   } else {
     path.setAttribute(d , d2);
   }
 }
阅读 7.2k
1 个回答

https://code.h5jun.com/mugi/1...

要让 CSS3 动画过渡支持路径过渡最重要的一点是要让两个过渡的路径保证锚点数一致,否则对浏览器无法计算出补间动画自然就无法帮忙过渡了。当然是用一些 JS 库也是可以做到计算不同锚点路径的补间动画的,具体可以参考我之前写的文章:https://imnerd.org/svg-animat...

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题