代码之家  ›  专栏  ›  技术社区  ›  NicholasJohn16

跟随SVG运动路径时的偏移量

  •  0
  • NicholasJohn16  · 技术社区  · 7 年前

    我刚刚开始使用svg和anime.js。我正试图重现 svg motion path 在文档中找到了我自己的资产。不过,我没有使用div来跟踪路径,而是使用另一条路径。

    我有一条简单的s形路径和一条圆形路径。我遇到的问题是,当圆绕着路径中的弯曲处旋转时,它有某种偏移。

    <svg width="256" height="112" viewBox="0 0 256 112">
        <path class="path" fill="none" stroke="#000" d="M0.500,64.500 L48.500,64.500 C48.500,64.500 64.500,64.500 64.500,48.500 C64.500,32.500 48.500,32.500 48.500,32.500 L40.500,32.500 C40.500,32.500 24.500,32.500 24.500,16.500 C24.500,0.500 40.500,0.500 40.500,0.500 L88.500,0.500 "/>
        <path class="circle" fill="none" stroke="#000" d="M16.000,8.000 C16.000,8.000 16.000,-0.000 8.000,-0.000 C-0.000,-0.000 -0.000,8.000 -0.000,8.000 C-0.000,8.000 -0.000,16.000 8.000,16.000 C16.000,16.000 16.000,8.000 16.000,8.000 Z" style="position: absolute;"/>
    </svg>
    
    var path = anime.path('.path');
    
    anime({
      targets: '.circle',
        translateX: path('x'),
        translateY: path('y'),
      duration: 4000,
      loop: true,
      easing: 'linear'
    });
    

    我看过这个例子,想弄清楚为什么会这样。我已经添加了绝对定位,就像它在使用,但它仍然有偏移,我不知道为什么。我也尝试过将路径和圆分离为单独的svg,但这似乎也不起作用。

    有谁能向我解释这是为什么以及如何解决它?我希望圆圈沿着中间的路径移动。谢谢。

    密码笔: RJXabe

    1 回复  |  直到 7 年前
        1
  •  1
  •   Paul LeBeau    7 年前

    问题是,像这样的运动路径动画通过重新定位圆使其跟随路径来工作。它只需将圆移动一个与特定时间点的路径的x,y坐标相对应的量即可。

    但是,由于您的圆是向下绘制的,并且位于svg原点(0,0)的右侧(即左上角),因此它将被放置在路径上该点的下方和右侧。

    有几种解决办法。这里有几个:

    一。重新定位(重绘)圆,使其位于原点的中心

    <path class="circle" fill="none" stroke="#000" d="M8.000,0.000
          C8.000,0.000 8.000,-8.000 0.000,-8.000 C-8.000,-8.000 -8.000,0.000 -8.000,0.000 
          C-8.000,0.000 -8.000,8.000 0.000,8.000 C8.000,8.000 8.000,0.000 8.000,0.000 Z"/>
    

    https://codepen.io/PaulLeBeau/pen/eKqKRW

    2.重新定位(用变换)圆,使它以原点为中心

    <g class="circle">
      <path ... transform="translate(-8,-8)"/>
    </g>
    

    我们需要在这里建立一个小组, transform 我们添加的内容不会被anime.js应用的转换覆盖。

    https://codepen.io/PaulLeBeau/pen/eKqKBv