在SVG中悬停虚线的事件

时间:2018-02-01 04:20:05

标签: javascript css svg

当用户将鼠标悬停在虚线的实体部分上时,带有stroke-dasharray的行(或路径)的SVG似乎只会触发CSS和JS悬停事件:https://codepen.io/anon/pen/YeXoZy

是否有一种简单的方法可以在线路的实体或不可见部分悬停时触发JS和CSS事件?

我目前的计划是在同一路径后绘制第二条不可见线,并用它来检测鼠标事件。 https://codepen.io/anon/pen/BYNgRR这似乎很苛刻,我希望我能找到更清洁的方式。

2 个答案:

答案 0 :(得分:2)

我不确定如果没有第二个"检测器"如果没有JS,那么至少可以采用不那么重的方式。

切换线的顺序,然后像往常一样使用悬停选择器作为虚线,然后在检测器线的选择器中使用+来更改紧随其后的线的属性:< / p>

https://codepen.io/RyanGoree/pen/LQVKBV

答案 1 :(得分:1)

使用rect代替line并将SVG transformspatterns一起使用,可以稍微解决这个问题。

可以在this CodePen看到一个例子。

enter image description here

它基本上起泡到:

<svg height="210" width="500">
    <defs>
        <pattern id="pattern1"
                width="10" height="10"
                patternUnits="userSpaceOnUse"
                patternTransform="rotate(0 60 60)">
        <line stroke="green" stroke-width="12px" y2="10"/>
        </pattern>
        <pattern id="pattern2"
                width="10" height="10"
                patternUnits="userSpaceOnUse"
                patternTransform="rotate(0 60 60)">
        <line stroke="red" stroke-width="12px" y2="10" stroke="transparent"/>
        </pattern>
    </defs>
    <g transform="rotate(45 60 60)">
        <rect x="0" y="0" width="500" height="5"/>
    </g>
</svg>

以下CSS:

rect {
    fill: url(#pattern1)
}
    rect:hover {
    fill: url(#pattern2)
}