javascript - 我如何在悬停时设置 SVG <use> 元素的样式?

标签 javascript css svg snap.svg xlink

我是 SVG 的初学者。我正在尝试更改多个 <use> 的样式悬停在特定 <use> 上的元素元素与 css,但我不能,因为 <use>元素使用 Shadow DOM .

我有以下 <defs> :

<defs>
    <filter id="Sjax0b81q1" filterUnits="userSpaceOnUse">...</filter>
    <circle cx="0" cy="0" r="40" id="action-circle" style="cursor: move; fill: #fff;" filter="url('#Sjax0b81q1')" class="el action-el"></circle>
    <g id="condition-rhombus" style="cursor: move; fill: #fff;" class="el condition-el" transform="matrix(1,0,0,1,0,0)">
        <circle cx="0" cy="0" r="40" fill="none"></circle>
        <path d="M -35 0, L 0 -35, L 35 0, L 0 35 L -35 0" style="stroke-linecap: round; stroke: white;" filter="url('#Sjax0b81q1')" class="condition-rhombus"></path>
    </g>
    <g id="svg-plus-button">
        <circle cx="0" cy="40" r="10" id="svg-plus-circle" fill="none" style="fill-opacity: 1;" class="svg-plus-circle"></circle>
        <path d="M956.8,408.....408.5z" id="svg-plus-sign" fill="none" transform="matrix(0.008,0,0,0.008,-4,36)" style="pointer-events: none;" class="svg-plus-sign"></path>
    </g>
    <rect x="-20" y="-20" width="40" height="40" id="rect-active-layer" fill="none" style="pointer-events: visible;" class="rect-active-layer"></rect>
    <path d="M252.967.....2v1Z" id="api-svg" class="cls-1"></path>
</defs>

我有一组元素,其中包含多个 <use>元素:

<g id="action-group-2" class="external action-group" transform="matrix(1,0,0,1,420,180)">
    <g class="internal action-group">
        <rect x="-40" y="-40" width="80" height="80" fill="none"></rect>
    </g>
    <use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#action-circle"></use>
    <use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#svg-plus-button" id="useSjax0b81q1k"></use>
    <use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#rect-active-layer"></use>
    <use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#api-svg"></use>
</g>

例如,我需要更改 <path>填写 ID 为 #api-svg 的元素,当我将鼠标悬停在 #action-circle 上时.

我该怎么做?也许还有另一种方法可以在悬停时渲染和设置可重用元素的样式。

最佳答案

定义路径有fill="inherit" , 那么你应该能够设置 fill="whatever"<use> 上元素的样式,它将起作用。

use:hover {
  fill: red;
}
<svg>
  <defs>
    <circle id="test" fill="inherit" cy="10" r="10" />
  </defs>
  <use xlink:href="#test" transform="translate(10,0)" />
  <use xlink:href="#test" transform="translate(30,0)" />
  <use xlink:href="#test" transform="translate(50,0)" />
  <text y="40">Hover over the circles!</text>
</svg>

关于javascript - 我如何在悬停时设置 SVG <use> 元素的样式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47705403/

相关文章:

javascript - Chrome 扩展程序弹出窗口在错误的时间关闭

javascript - 在 Javascript 中对以下字符串进行子字符串化的最简单方法

html - 将 div 高度扩展到它的 child (iframe)

javascript - 在 div 的 span 中设置光标位置不起作用

jQuery 动画 SVG 元素

javascript - 使用 d3.js 删除 svg 文本元素

html - 绕旋转物体旋转

javascript - 自定义 aurelia 属性中的简单 DOM 操作

javascript - 如何使用 $scope out restangular 函数

html - 行跨度和对齐问题