qq_42609387 2021-12-30 11:40 采纳率: 50%
浏览 78
已结题

svg animateMotion动画本身的bug,该怎么解决?

svg animateMotion做路径动画时,如果给动画元素初始的x,y坐标,这个元素就不会按照给定路径做运动,看下图说明:

img

img

react代码如下:
 const getPathLen = (d) => {
  try {
    const path = document.createElementNS('http://www.w3.org/2000/svg', 'path');
    path.setAttribute('d', d);
    const pathLen = path?.getTotalLength();
    const point = path?.getPointAtLength(pathLen / 2);
    return { point, pathLen };
  } catch (e) {
    return { point: null };
  }
};

const ModalChart = () => {
  const data = [
    {
      path: 'M0,0 C100,15 200,200 600,20',
      dur: 4,
      begin: 1,
      pathId:' id-a',
      text: '1',
      stroke: 'red',
      strokeWidth: 1,
      x:0,
      y:0
    },
    {
      path: 'M600,20 C700,600 800,700 800,40',
      dur: 5,
      begin: 5,
      pathId: ' id-b',
      text: '2',
      stroke: 'yellow',
      strokeWidth: 1,
      x:600,
      y:20
    },
    {
      path: 'M800,40 Q400,400 250,300',
      dur: 5,
      begin: 10,
      pathId:' id-c',
      text: '3',
      stroke: 'skyblue',
      strokeWidth: 1,
      x:800,
      y:40
    },
  ];

  return (
    <div>
      <svg width="100%" height="100%" >
        {data.map((item, index) => {
          const len = getPathLen(item.path)?.pathLen;
          return (
            <g key={index}>
              <path
                d={item.path}
                id={item.pathId}
                stroke="black"
                strokeWidth={item.strokeWidth}
                fill="none"
              />
              <text  fontSize={30}>
                {item.text}
                <animateMotion begin={`${item.begin}s`} dur={`${item.dur}s`}  className={'aaa'}>
                  <mpath href={`#${item.pathId}`} />
                </animateMotion>
              </text>
              <path
                d={item.path}
                stroke={item.stroke}
                strokeWidth={3}
                fill="none"
                strokeDashoffset={len}
                strokeDasharray={`${len},${len}`}
              >
                <animate
                  attributeName="stroke-dashoffset"
                  values={`${len};0`}
                  begin={`${item.begin}s`}
                  dur={`${item.dur}s`}
                  repeatCount="1"
                />
              </path>
            </g>
          );
        })}
      </svg>
    </div>
  );
};
export default ModalChart;

有没有人能够解答下?
  • 写回答

2条回答 默认 最新

  • 仰望星空的代码 博客专家认证 2021-12-30 12:26
    关注
    获得1.25元问题酬金

    给了初始坐标,看看运动后2的坐标

    评论

报告相同问题?

问题事件

  • 系统已结题 1月7日
  • 修改了问题 12月30日
  • 修改了问题 12月30日
  • 修改了问题 12月30日
  • 展开全部

悬赏问题

  • ¥15 BP神经网络控制倒立摆
  • ¥20 要这个数学建模编程的代码 并且能完整允许出来结果 完整的过程和数据的结果
  • ¥15 html5+css和javascript有人可以帮吗?图片要怎么插入代码里面啊
  • ¥30 Unity接入微信SDK 无法开启摄像头
  • ¥20 有偿 写代码 要用特定的软件anaconda 里的jvpyter 用python3写
  • ¥20 cad图纸,chx-3六轴码垛机器人
  • ¥15 移动摄像头专网需要解vlan
  • ¥20 access多表提取相同字段数据并合并
  • ¥20 基于MSP430f5529的MPU6050驱动,求出欧拉角
  • ¥20 Java-Oj-桌布的计算