RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 1226470
Accepted
Monkey Mutant
Monkey Mutant
Asked:2022-01-02 23:25:24 +0000 UTC2022-01-02 23:25:24 +0000 UTC 2022-01-02 23:25:24 +0000 UTC

能达到同样的效果吗?

  • 772

有一个离题的 SVG 问题 =>如何按顺序对 UIBezier 线进行动画处理

当然这个可以在smil上实现

这就是我所做的

<svg viewBox="0 0 500 150" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
  <defs>
    <marker id="dot" viewBox="0 0 10 10" refX="5" refY="5" markerWidth="5" markerHeight="5">
      <circle cx="5" cy="5" r="5" fill="#fff" stroke="red" stroke-width="1" />
    </marker>
  </defs>
  <path d="" fill="none" stroke="#000" stroke-width="1.2" marker-start="url(#dot)" marker-mid="url(#dot)" marker-end="url(#dot)">
    <animate attributeName="d" begin="0s" dur="4s" attributeType="XML" values="
    M20,120 50,130 120,120 180,100 220,130 300,120 340,125 410,90 490,140;
    M20,120 50,50 120,120 180,100 220,130 300,120 340,125 410,90 490,140;
    M20,120 50,50 120,120 180,20 220,130 300,120 340,125 410,90 490,140;
    M20,120 50,50 120,40 180,20 220,130 300,120 340,125 410,90 490,140;
    M20,120 50,50 120,40 180,20 220,50 300,120 340,125 410,90 490,140;
    M20,120 50,50 120,40 180,20 220,50 300,70 340,125 410,90 490,140;
    M20,120 50,50 120,40 180,20 220,50 300,70 340,55 410,90 490,140;
    M20,120 50,50 120,40 180,20 220,50 300,70 340,55 410,90 490,30;
    M20,120 50,50 120,40 180,20 220,50 300,70 340,55 410,40 490,30;
    M20,120 50,50 120,40 180,20 220,50 300,70 340,85 410,40 490,30;
    M20,120 50,130 120,120 180,100 220,130 300,120 340,125 410,90 490,140;" repeatCount="indefinite" keyTimes="0; 0.1; 0.15; 0.27; 0.30; 0.40; 0.45; 0.80; 0.90; 0.97; 1"/>
  </path>
</svg>

但正如你从他们的动画图片中看到的那样,存在某种抖动

在此处输入图像描述

是否可以使用 SVG 动画 - smil 来实现这种行为?

javascript
  • 1 1 个回答
  • 10 Views

1 个回答

  • Voted
  1. Best Answer
    UModeL
    2022-01-03T05:20:40Z2022-01-03T05:20:40Z

    以相等的间隔为点设置动画看起来像这样:

    <svg viewBox="0 0 600 278" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
      <defs>
        <marker id="dot" viewBox="0 0 20 20" refX="10" refY="10" markerWidth="10" markerHeight="10">
          <circle cx="10" cy="10" r="3" fill="#fff" stroke="#485d7e" stroke-width="2" />
        </marker>
      </defs>
      <path d="" fill="none" stroke="#485d7e" stroke-width="3" marker-start="url(#dot)" marker-mid="url(#dot)" marker-end="url(#dot)">
        <animate attributeName="d" begin="0s" dur="2s" repeatCount="indefinite" attributeType="XML" 
                 values="
        M19,250 70,250 121,250 171,250 222,250 273,250 323,250 374,250 424,250 475,250 526,250 576,250;
        M19,185 70,250 121,250 171,250 222,250 273,250 323,250 374,250 424,250 475,250 526,250 576,250;
        M19,202 70,14  121,250 171,250 222,250 273,250 323,250 374,250 424,250 475,250 526,250 576,250;
        M19,198 70,76  121,212 171,250 222,250 273,250 323,250 374,250 424,250 475,250 526,250 576,250;
        M19,199 70,60  121,222 171,181 222,250 273,250 323,250 374,250 424,250 475,250 526,250 576,250;
        M19,199 70,64  121,219 171,199 222,67  273,250 323,250 374,250 424,250 475,250 526,250 576,250;
        M19,199 70,64  121,220 171,195 222,115 273,67  323,250 374,250 424,250 475,250 526,250 576,250;
        M19,199 70,64  121,220 171,196 222,103 273,115 323,179 374,250 424,250 475,250 526,250 576,250;
        M19,199 70,64  121,220 171,196 222,106 273,103 323,198 374,218 424,250 475,250 526,250 576,250;
        M19,199 70,64  121,220 171,196 222,106 273,106 323,193 374,227 424,247 475,250 526,250 576,250;
        M19,199 70,64  121,220 171,196 222,106 273,106 323,194 374,224 424,248 475,43  526,250 576,250;
        M19,199 70,64  121,220 171,196 222,106 273,106 323,194 374,225 424,248 475,98  526,94  576,250;
        M19,199 70,64  121,220 171,196 222,106 273,106 323,194 374,225 424,248 475,83  526,135 576,209;
        M19,199 70,64  121,220 171,196 222,106 273,106 323,194 374,225 424,248 475,87  526,124 576,220;
        M19,199 70,64  121,220 171,196 222,106 273,106 323,194 374,225 424,248 475,87  526,127 576,217;
        M19,199 70,64  121,220 171,196 222,106 273,106 323,194 374,225 424,248 475,87  526,127 576,218;" 
                 keyTimes="
        0; 0.066; 0.133; 0.2; 0.266; 0.333; 0.4; 0.466; 0.533; 0.6; 0.666; 0.733; 0.8; 0.866; 0.933; 1"
        />
      </path>
    </svg>

    我认为反弹是最简单的脚本:

    document.querySelector('div.calc').addEventListener('input', function(ev) {
      p1.value = Math.round(+pe.value - (+pb.value - +pe.value) / 3.72);
      p2.value = Math.round(+pe.value + (+pb.value - +pe.value) / 15.5);
      p3.value = Math.round(+pe.value - (+pb.value - +pe.value) / 46.5);
    });
    .calc { display: flex; flex-flow: column nowrap; width: 400px; }
    <div class="calc">
      <label>Исходная точка <input id="pb" type="number" max=250 value=250></label>
      <label>Точка отскока 1 <input id="p1" type="number" value=0 readonly></label>
      <label>Точка отскока 2 <input id="p2" type="number" value=0 readonly></label>
      <label>Точка отскока 3 <input id="p3" type="number" value=0 readonly></label>
      <label>Конечная точка <input id="pe" type="number" max=250 value=100></label>
    </div>

    当然,基于此,您可以自动计算坐标和时间,并且只传输最终值的数组。这已经是一个完整的插件,但这样的任务不是问题;-)

    • 4

相关问题

  • 第二个 Instagram 按钮的 CSS 属性

  • 由于模糊,内容不可见

  • 弹出队列。消息显示不正确

  • 是否可以在 for 循环中插入提示?

  • 如何将 JSON 请求中的信息输出到数据表 Vuetify vue.js?

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    表格填充不起作用

    • 2 个回答
  • Marko Smith

    提示 50/50,有两个,其中一个是正确的

    • 1 个回答
  • Marko Smith

    在 PyQt5 中停止进程

    • 1 个回答
  • Marko Smith

    我的脚本不工作

    • 1 个回答
  • Marko Smith

    在文本文件中写入和读取列表

    • 2 个回答
  • Marko Smith

    如何像屏幕截图中那样并排排列这些块?

    • 1 个回答
  • Marko Smith

    确定文本文件中每一行的字符数

    • 2 个回答
  • Marko Smith

    将接口对象传递给 JAVA 构造函数

    • 1 个回答
  • Marko Smith

    正确更新数据库中的数据

    • 1 个回答
  • Marko Smith

    Python解析不是css

    • 1 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5