【发布时间】:2023-03-14 03:51:01
【问题描述】:
我想为 SVG 中的文本蒙版制作动画(为了过度简化,假设为 Scale+)(它必须是蒙版)。 我正在使用 GSAP 来实现这一点。
我的动画在 Edge 和 Chrome 上可以正常播放,但在 Firefox 上失败。
var tl = new gsap.timeline();
tl.add(
gsap.to("#masktext", 3, {scale: 3, "text-anchor": "middle", transformOrigin: "50% 50%"}),
"0"
);
.svg-container {
font-size: 13rem;
font-weight:bold;
width: 100%;
height: 100%;
max-height:700px;
position: absolute;
top: 0;
}
#mysvg {
width: 100%;
height: 100%;
overflow: visible;
display: block;
}
#masktext {
text-anchor: middle;
transform-origin: center center;
}
#maskrect {
fill: white;
}
#myrect {
fill: white;
-webkit-mask: url(#mask);
mask: url(#mask);
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/gsap/3.2.4/gsap.min.js"></script>
<div class="svg-container">
<svg id="mysvg" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1920 700" width="1920px" height="700px" preserveAspectRatio="xMidYMid meet">
<defs>
<mask id="mask" x="0" y="0" width="1920" height="700" maskUnits="userSpaceOnUse" maskContentUnits="userSpaceOnUse" preserveAspectRatio="xMidYMid slice">
<rect id="maskrect" x="0" y="0" width="1920" height="700"/>
<text id="masktext" x="50%" y="50%">Creative</text>
</mask>
</defs>
<rect id="myrect" x="0" y="0" width="1920" height="700" style="fill:green;"/>
</svg>
</div>
https://jsfiddle.net/yumigo/qcrawe2g/
我的猜测是在 Firefox 下,文本的缩放位置是错误的/超出范围并破坏了动画。一直在寻找变换原点和不同的初始文本位置,但没有运气。
【问题讨论】:
-
旁注:从GSAP 3 开始,将持续时间放在 vars 参数中更合适,而不是作为补间的第二个参数。
-
感谢 Zach 指出这一点
标签: animation firefox svg mask gsap