html5 如何将一个 SVG 变形或动画为另一个?

2023-12-29

我做了一些搜索,但我不得不承认,我对 SVG 没有任何经验,我见过很多现代库,例如 Raphael、PaperJS、KineticJS、EaselJS,但我不知道什么适合这里的目标,也许甚至 CSS 关键帧也能做到这一点。

对于这个问题的指出将不胜感激。

Goal
在浏览器上,我想使用过渡类型将 svg1 动画化为 svg2ease-out

约束条件

  • 任何 javascript 库(如果需要的话)
  • 应该能够将每个元素连接到具有相同 ID 的其他元素
  • 变形形状、路径、填充*、描边*、cx、cy、rc、ry
  • 应该可以在当前的 Firefox 和 Chrome 上运行,如果有 IE 10 就更好了
  • 应该适用于 iPhone 5、Nexus 4 和 7 等新手机
  • 即使在手机上也有不错的性能
  • 如果它呈现为无所谓<svg> or <canvas>

svg1:

<svg width="640" height="480" xmlns="http://www.w3.org/2000/svg">
 <!-- Created with SVG-edit - http://svg-edit.googlecode.com/ -->
 <defs>
  <linearGradient id="svg_6">
   <stop stop-color="#828236" offset="0"/>
   <stop stop-color="#7d7dc9" offset="0.99219"/>
  </linearGradient>
  <linearGradient id="svg_7" x1="0" y1="0" x2="1" y2="1">
   <stop stop-color="#828236" offset="0"/>
   <stop stop-color="#7d7dc9" offset="0.99219"/>
  </linearGradient>
  <linearGradient y2="1" x2="1" y1="0" x1="0" id="svg_1">
   <stop offset="0" stop-color="#828236"/>
   <stop offset="0.99219" stop-color="#7d7dc9"/>
  </linearGradient>
 </defs>
 <g>
  <title>Layer 1</title>
  <ellipse ry="145" rx="116" id="svg_2" cy="201" cx="317" fill-opacity="0.36" stroke-linecap="null" stroke-linejoin="null" stroke-dasharray="null" stroke-width="5" stroke="#000000" fill="url(#svg_7)"/>
  <ellipse ry="21" rx="10" id="svg_5" cy="137" cx="274" stroke-linecap="null" stroke-linejoin="null" stroke-dasharray="null" stroke-width="5" stroke="#000000" fill="#0cd60c"/>
  <ellipse ry="31" rx="17" id="svg_9" cy="114" cx="346" stroke-linecap="null" stroke-linejoin="null" stroke-dasharray="null" stroke-width="5" stroke="#000000" fill="#0cd60c"/>
  <path id="svg_14" d="m235,239c55.66666,-1.33333 133.33334,-71.66667 167,-4l-167,4z" stroke-linecap="null" stroke-linejoin="null" stroke-dasharray="null" stroke-width="5" stroke="#000000" fill="none"/>
 </g>
</svg>

svg2:

<svg width="640" height="480" xmlns="http://www.w3.org/2000/svg">
 <!-- Created with SVG-edit - http://svg-edit.googlecode.com/ -->
 <defs>
  <linearGradient id="svg_6">
   <stop offset="0" stop-color="#828236"/>
   <stop offset="0.99219" stop-color="#7d7dc9"/>
  </linearGradient>
  <linearGradient y2="1" x2="1" y1="0" x1="0" id="svg_7">
   <stop offset="0" stop-color="#828236"/>
   <stop offset="0.99219" stop-color="#7d7dc9"/>
  </linearGradient>
  <linearGradient id="svg_1" x1="0" y1="0" x2="1" y2="1">
   <stop stop-color="#828236" offset="0"/>
   <stop stop-color="#7d7dc9" offset="0.99219"/>
  </linearGradient>
 </defs>
 <g>
  <title>Layer 1</title>
  <ellipse id="svg_2" fill="url(#svg_7)" stroke="#000000" stroke-width="5" stroke-dasharray="null" stroke-linejoin="null" stroke-linecap="null" fill-opacity="0.36" cx="317" cy="201" rx="116" ry="145"/>
  <ellipse id="svg_5" stroke="#000000" fill="#0cd60c" stroke-width="5" stroke-dasharray="null" stroke-linejoin="null" stroke-linecap="null" cx="277.5" cy="132.5" rx="13.5" ry="25.5"/>
  <ellipse id="svg_9" stroke="#000000" fill="#0cd60c" stroke-width="5" stroke-dasharray="null" stroke-linejoin="null" stroke-linecap="null" cx="349.5" cy="110" rx="20.5" ry="35"/>
  <path id="svg_14" fill="none" stroke="#000000" stroke-width="5" stroke-dasharray="null" stroke-linejoin="null" stroke-linecap="null" d="m235,240c21.66666,81.66669 114.33334,96.33331 167,-4l-167,4z" />
 </g>
</svg>

ps你可以在这里想象 http://svg-edit.googlecode.com/svn/branches/2.6/editor/svg-editor.html,只需将代码粘贴到该区域即可。

我没有代码可以展示,我不想一开始就出错。我的直觉告诉我,最好的解决方案有 50% 的机会不涉及对这些节点进行一一比较!


据我所知你只想改变路径

这是一个很好的教程:SVG 基础知识/SVG 动画和脚本 https://web.archive.org/web/20171226214422/http://commons.oreilly.com/wiki/index.php/SVG_Essentials/Animating_and_Scripting_SVG

SVG 路径的 W3C 规范:w3.org/TR/SVG/paths https://www.w3.org/TR/SVG/paths.html

W3C 动画规范:w3.org/TR/SVG/animate https://www.w3.org/TR/SVG/animate.html

这是一个例子:carto.net/svg/samples/path_morphing https://web.archive.org/web/20161028120809/https://www.carto.net/svg/samples/path_morphing.shtml

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

html5 如何将一个 SVG 变形或动画为另一个? 的相关文章

随机推荐

  • 使用 Notepad++ 查找双括号的正则表达式

    我试图找到在另一个句子中具有左括号和右括号的句子 例如 text more 我尝试了类似以下的内容 至少匹配前两个 但这是不对的 我认为最好将 之类的东西与惰性量词匹配 并且它应该适用于文本中的任何内容 即使它像 html 代码一样被分成几
  • Spark 写入 S3 存储选项

    我正在将 Spark 数据帧保存到 S3 存储桶 保存文件的默认存储类型是STANDARD 我需要它是 STANDARD IA 有什么选择可以实现这一目标 我查看了 Spark 源代码 发现 Spark DataFrameWriter 中没
  • form_for 通过 2 个链接提交,当我回到控制器时如何判断使用了哪个链接?

    我将一个表单放在一起 但出于设计原因 该表单必须通过链接提交 我找到了如何执行该操作 link to function Next gt gt this up form submit 这样就可以了 我可以创建很多链接 这没有问题 但是我不知道
  • IIS 中使用 Localhost 401.3 错误的 ASP 页没有权限

    我刚刚安装了 IIS 这样我就可以在浏览器中查看 asp 文件 但是当我在浏览器中输入地址时 http localhost index asp http localhost index asp我收到一个错误 该错误表明 HTTP 错误 40
  • Linux 中最好的 C++ 开发环境

    我对 Eclipse 和 Qt Creator 有一些经验 对他们的调试器有些失望 对他们的编辑器则不太满意 在 Windows 上 我喜欢使用 Visual Studio 进行调试 使用 SlickEdit 进行编辑 Linux 上也可以
  • 从 mule esb 使用 .NET ASMX Web 服务会抛出 CXF 异常:401 Unauthorized

    我在另一台服务器上有一个 NET ASMX Web 服务 并且在另一台服务器上安装了 mule 独立 CE 3 4 我有一个非常简单的流程 需要调用这个 NET Web 服务并传递两个字符串参数
  • Numpy isnan() 在浮点数数组上失败(来自 pandas dataframe apply)

    我有一个浮点数组 一些正常数字 一些nan 它们是从 pandas 数据帧上的应用中产生的 由于某种原因 numpy isnan 在这个数组上失败 但是如下所示 每个元素都是浮点数 numpy isnan 在每个元素上正确运行 变量的类型绝
  • 如何获取Windows系统中的剩余电池寿命?

    我需要获取 Windows 系统中的剩余电池寿命 我该怎么做 我猜你说的是笔记本电脑 标准 Java SE API 中不存在这样的 API 此信息仅在操作系统平台本机 API 中可用 你至少需要JNI https docs oracle c
  • iOS - 理解 UIPanGesture 上的velocityInView

    我正在使用 UIPanGesture 返回velocityInView 根据我的收集 它应该每秒返回点数 我得到的是数亿的数字和很多零 我不会在模拟器中快速移动鼠标 我认为 预先感谢您提供的任何帮助 建议 编辑 请求的代码 显示 呼叫 vo
  • PHP 数字格式

    我有这个字符串 000000000000100 并需要将其转换为 1 00 所以 规则是 将数字除以 100 并使用逗号作为小数分隔符 去掉前导零 保留两位小数 来自PHP 手册页面number format http php net ma
  • 为什么 std::cout << main << std::endl 打印 1? [复制]

    这个问题在这里已经有答案了 include
  • 添加服务引用和添加 Web 引用?

    我正在尝试添加对网络服务的网络引用 http jira atlassian com rpc soap jirasoapservice v2 wsdl http jira atlassian com rpc soap jirasoapserv
  • Kubectl获取节点返回“服务器没有资源类型“节点””

    我安装了 Kubernetes 并执行了 kubeadm init 并从工作线程加入 但是当我运行 kubectl getnodes 时它给出以下响应 服务器没有资源类型 节点 这里可能有什么问题 在 var log messages 中看
  • Linq to XML 简单从节点语句获取属性

    这是代码片段 XDocument themes XDocument Load HttpContext Current Server MapPath Models Themes xml string result var childType
  • 在给定文本中查找 PHP 中特定文本的模式[重复]

    这个问题在这里已经有答案了 我很难找到特定的对象preg match all图案 我有一条文字 很多数据 但我只想找到一个特定的 就像我有一串文本 sadasdasd website https bitcoin org tatic clou
  • C++:如何在 Windows 的“开始”菜单中创建快捷方式

    我想知道如何获取 Windows 上开始菜单文件夹的路径 然后创建可能包含非 ASCII 字符的路径的快捷方式 这是解决方案 它使用 Qt 但也可以不使用 然后只需使用std wstring代替QString 为了连接路径和文件名 您将不得
  • 确定 SQLite 中查询的执行时间

    我正在创建一个用于分析和生成查询的程序 我很好奇 SQLite 中当前是否存在一种方法 以便我可以查询处理查询所需的时间 我无法以任何方式修改我的安装 因此此方法需要开箱即用 我正在用 python 编写我的工具 尽管我想我可以使用计时器类
  • 如何在Delphis MessageDlg中忽略计时器事件

    我在 Delphi 中设置了一个全局异常处理程序 在某些严重的异常情况下 会显示一条错误消息 后跟 Halt 显示错误消息时 Delphi 正在处理消息队列 处理计时器事件 这会导致进一步的错误 我想要的是显示一个不处理计时器事件的错误对话
  • 在进行一些 python 分析后,Django(?)在处理大型数据集时速度非常慢

    我正在将我的旧 PHP 脚本与更新 更精美的 Django 版本和 PHP 脚本进行比较 完全脱离 HTML 并且所有功能都运行得更快 速度快得多 以至于 Django 肯定出了问题 首先 一些背景信息 我有一个页面可以输出销售数据报告 数
  • html5 如何将一个 SVG 变形或动画为另一个?

    我做了一些搜索 但我不得不承认 我对 SVG 没有任何经验 我见过很多现代库 例如 Raphael PaperJS KineticJS EaselJS 但我不知道什么适合这里的目标 也许甚至 CSS 关键帧也能做到这一点 对于这个问题的指出