【问题标题】:How to rotate SVG inside mask?如何在蒙版内旋转 SVG?
【发布时间】:2019-06-30 16:51:37
【问题描述】:

我有一个 SVG 蒙版,我想旋转里面的元素。但是,当我尝试时,看起来整个蒙版都在旋转。

我尝试了SO post,但小提琴不起作用(图像不再显示)。 原来是这样的

发生了什么

我想要发生的事情

我只想旋转“液体”元素,但不知何故,液体元素以错误的方式旋转。

这是 SVG(带有遮罩元素):

<svg width="200px" height="200px" viewBox="0 0 200 200">
    <defs>
        <rect id="path-1" x="75" y="65" width="50" height="100" rx="5"></rect>
    </defs>
    <g id="bottle" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
        <rect id="bottle-lid" stroke="#916548" stroke-width="5" x="82.5" y="52.5" width="35" height="15" rx="5"></rect>
        <rect id="bottle-holder" stroke="#916548" stroke-width="5" x="117.5" y="55.5" width="30" height="7" rx="3.5"></rect>
        <mask id="mask-2" fill="white">
            <use xlink:href="#path-1"></use>
        </mask>
        <g id="Mask"></g>
        <rect id="bottle-liquid" fill="#3498DB" mask="url(#mask-2)" x="40" y="80" width="120" height="120"></rect>
        <rect id="bottle-outline" stroke="#916548" stroke-width="5" mask="url(#mask-2)" x="77.5" y="67.5" width="45" height="95" rx="5"></rect>
    </g>
</svg>

这是 JS(我使用的是 GSAP 库)

const liquid = document.querySelector("#bottle-liquid")

const tl = new TimelineMax()

tl.to(liquid, 1, {
  rotation: 20
})

如何仅旋转蒙版 SVG 中的某个元素?

【问题讨论】:

    标签: javascript svg rotation


    【解决方案1】:

    我对您的 SVG 进行了一些更改,最重要的是:我已将瓶子液体放入 g 元素中,并将蒙版应用于 g 元素并将变换应用于瓶子液体。我希望它有所帮助。

    <svg width="200px" height="200px" viewBox="0 0 200 200">
        <defs>
            <rect id="path-1" x="75" y="65" width="50" height="100" rx="5"></rect>
          
          
            <mask id="mask-2" fill="white">
                <use xlink:href="#bottle-outline"></use>
            </mask>
          
        </defs>
        <g id="bottle" stroke-width="5" stroke="#916548" fill="none" fill-rule="evenodd">
            <rect id="bottle-lid"  x="82.5" y="52.5" width="35" height="15" rx="5"></rect>
            <rect id="bottle-holder"  x="117.5" y="55.5" width="30" height="7" rx="3.5"></rect>
            <g mask="url(#mask-2)">
            <rect id="bottle-liquid" stroke="none" fill="#3498DB"  x="40" y="80" width="120" height="120" transform="rotate(20 100 140)"></rect>
            </g>
            <rect id="bottle-outline" x="77.5" y="67.5" width="45" height="95" rx="5"></rect>
        </g>
    </svg>

    【讨论】:

      猜你喜欢
      • 2016-10-24
      • 1970-01-01
      • 2022-08-07
      • 1970-01-01
      • 2012-12-26
      • 1970-01-01
      • 2021-12-01
      • 2019-05-12
      • 1970-01-01
      相关资源
      最近更新 更多