css - svg 正在反向播放,底部减少
问题描述
我很困惑,我搜索了一天但没有成功。我有一个完整的 Vuejs 项目,我尝试 Svg 很简单而且很有趣,但我不明白为什么在播放动画时要调整图像大小。
我的大问题是 svg 的底部调整大小并变小我不知道为什么? https://codepen.io/deeluxe/pen/VwvdgrN
<svg class="svg-wave" preserveAspectRatio="none" viewBox="0 0 1440 932">
<path class="polymorph" d="M485.168 37.924C264.292 -30.76 69.6908 9.30565 0 37.924V932H1442V105.029C1336.46 77.3975 1129.89 162.266 1019.35 160.785C908.815 159.305 761.264 123.779 485.168 37.924Z" fill="url(#paint0_linear)"/>
<defs>
<linearGradient id="paint0_linear" x1="775.269" y1="112.006" x2="722.687" y2="680.065" gradientUnits="userSpaceOnUse">
<stop stop-color="#05CDDA"/>
<stop offset="1" stop-color="#034E53"/>
</linearGradient>
</defs>
如果我尝试一个简单的仪表,我会得到它是反向播放的!
https://codepen.io/deeluxe/pen/mdeKvYe
<svg class="svg-wave" preserveAspectRatio="xMaxYMin meet" width="240" height="561" viewBox="0 0 240 561" fill="none" xmlns="http://www.w3.org/2000/svg">
<path class="polymorph" d="M239.5 0.5H0.5V560.5H239.5V0.5Z" fill="#EC0000"/>
</svg>
anime({
targets: '.polymorph',
d: [
{ value: 'M239.5 0H0.5V118.5H239.5V0Z'},
],
easing: 'linear',
duration: 8000,
loop: true
});
我用 Figma 复制 svg。如果有人可以修复两个代码之一,我可能会理解发生了什么:/
谢谢 !
解决方案
如果我理解您的要求,那么第一个示例的问题只是目标路径不是您想要的。
在d
value 里面有一个部分说V895
. 这绘制到点 895。但是您viewBox
的高度为 932,因此底部有 37 个像素作为间隙。
将其与具有 的原始路径进行对比,一直V932
绘制到底部。
我不完全确定您要做什么或您是如何在这种情况下结束的,但是更改V895
为V932
目标值d
应该可以防止蓝色区域的底部向上蔓延。
我真的不明白你为第二个例子描述了什么问题。如果它正在反向播放,那么您肯定只需要切换两条路径吗?
更新:
首先,我推荐 MDN SVG 指南。这是绘制基本形状的极好介绍:
https://developer.mozilla.org/en-US/docs/Web/SVG/Tutorial
对于您的最新示例,半像素会发生一些奇怪的事情。就其本身而言,使用半像素没有任何问题,但它在开始路径和结束路径之间并不一致。
这是您可以达到预期效果的一种方法。
首先让我们绘制初始矩形。你可以<rect>
用来画一个矩形,但我会坚持使用<path>
,因为它是你一直在使用的。
首先,我将光标移动到图像的左下角。那就是M0 300
。然后我会沿着底部画水平线,H652
。然后在右手边,V0
。然后沿着顶部,H0
。最后,使用 aZ
将其加入到开头。请注意,大写字母的坐标都是绝对的,而不是相对的。所以当我写这样的东西时V0
,意味着'垂直移动直到 y 为 0'。您可以使用小写字母执行类似的操作,然后数字将相对于当前光标位置。
完成的路径是:
<path class="polymorph" d="M0 300H652V0H0Z" fill="black"/>
您可以插入额外的空格以使其更易于阅读,M0 300 H652 V0 H0 Z
.
对于目标路径,它非常相似,只是我们需要更改V0
. 我们不希望黑色矩形一直延伸到顶部(顶部为 0)。在您的示例中,矩形的最终高度为 44,因此我将坚持使用它。鉴于我们有 300 的高度,这viewBox
意味着我们需要.V256
300 - 44
所以这给出了:
{ value: 'M0 300H652V256H0Z'}
为了解决这些问题,我建议关闭动画。而是尝试在静态 HTML 中绘制目标路径。一旦你画出了正确的东西,你就可以继续尝试为它制作动画。
推荐阅读
- ios - 分配的 IP 恰好相同时的网络状态更改通知
- json - Postgresql - 对匹配键求和 JSON 行
- zsh - ZSH 补全分隔符
- ruby-on-rails - 使用 cancancan gem 后无法用图像保存对象
- javascript - AJAX 回调看不到 jQuery 插件的方法
- javascript - 如何将数据与 React native 和多对多 firebase firestore 集合关系结合起来?
- angular - 在两个组件Angular 7之间共享数据
- c# - 尝试添加到数据库:集合已修改;枚举操作可能无法执行?
- java - 如何在 Java 中读取两个点运算符?
- c - 如何使用函数按字典顺序排列拆分命令行参数?