当前位置: 首页 > 知识库问答 >
问题:

svg - 如何在SVG中实现点击不同Tab时高亮对应线条?

都阳辉
2024-05-17

想实现这样一个需求,点击不同的tab时,高亮对应的线,目前使用svg写的,但是三角形的颜色没办法跟随线去控制。
image.png

尝试了使用currentColor,但是并没有达到期望值。
demo是使用hover代替点击事件,原以为marker-end之后,三角会属于当前路径的子集,所以想着给三角一个currentColor,但是实际尝试下来发现无法达到预期。于是代码由一个三角形改成了三个,目前只能通过单独去修改对应的路径才能实现需求。

期望可以使用一个三角形,鼠标经过不同线时,高亮对应线条及其尾部三角形。

代码段

共有1个答案

梅耘豪
2024-05-17

要实现点击不同Tab时高亮对应线条及其尾部三角形,你可以利用SVG的CSS样式和JavaScript事件处理。下面是一个简化的解决方案:

  1. 为每个线条和对应的三角形设置唯一的类或ID
  2. 使用CSS定义高亮状态
  3. 使用JavaScript监听点击事件,并应用或移除高亮状态

CSS样式

定义一个类(例如highlight),用于设置高亮状态的样式。

.highlight {  stroke: red; /* 假设你想要的高亮颜色 */  fill: red; /* 假设你想要的高亮颜色 */}

SVG结构

确保你的SVG线条和三角形都有唯一的类或ID,这样可以通过CSS和JavaScript单独选中它们。

<svg width="400" height="200" xmlns="http://www.w3.org/2000/svg">  <line class="line" id="line1" x1="50" y1="50" x2="200" y2="50" stroke="black" stroke-width="3" marker-end="url(#triangle)" />  <line class="line" id="line2" x1="50" y1="100" x2="200" y2="100" stroke="black" stroke-width="3" marker-end="url(#triangle)" />  <!-- 更多的线条... -->  <defs>    <marker id="triangle" viewBox="0 -5 10 10" refX="10" refY="0" markerWidth="6" markerHeight="6" orient="auto">      <path d="M 0 -5 L 10 0 L 0 5 z" fill="black" />    </marker>  </defs></svg>

JavaScript事件处理

使用JavaScript监听每个线条的点击事件,并添加或移除highlight类。

// 获取所有的线条元素const lines = document.querySelectorAll('.line');// 为每个线条添加点击事件监听器lines.forEach(function(line) {  line.addEventListener('click', function() {    // 移除所有线条的高亮状态    lines.forEach(function(otherLine) {      otherLine.classList.remove('highlight');    });        // 为被点击的线条添加高亮状态    this.classList.add('highlight');        // 假设三角形使用相同的颜色,不需要额外处理    // 如果需要单独控制三角形,你可能需要修改三角形的颜色或者引用  });});

注意事项

  • 如果三角形是通过marker-end添加的,并且你想要三角形颜色和线条颜色一致,那么你可能需要为每个线条定义不同的marker,并在点击时修改markerfill属性。
  • 上述代码示例假设三角形颜色和线条颜色一致,且不需要单独控制。如果需要单独控制三角形颜色,你可能需要为每个三角形定义一个单独的样式,并在点击事件处理程序中更新它。
  • 请确保在修改CSS或SVG结构时,你的选择器和逻辑与你的具体实现相匹配。

根据你的具体需求,你可能需要对上述代码进行适当的调整。如果需要更详细的指导,请提供更多的SVG结构和代码示例。

 类似资料:
  • 本文向大家介绍如何在HTML5 SVG中画一条线?,包括了如何在HTML5 SVG中画一条线?的使用技巧和注意事项,需要的朋友参考一下 SVG代表可伸缩矢量图形,是一种用于描述XML中的2D图形和图形应用程序的语言,然后由SVG查看器呈现XML。大多数网络浏览器可以显示SVG,就像显示PNG,GIF和JPG一样。 要在HTML SVG中绘制一条线,请使用SVG <line>元素。 示例 您可以尝试

  • svg图标是可点击的。 示例代码: 错误: 没有这样的元素:无法定位元素:{“方法”:“xpath”,“选择器”:“/*[@id=“SearchForm”]/div[1]/span/div[1]/div[2]/svg/path”}

  • SVG 曲线 - <polyline> 实例 1 <polyline> 元素是用于创建任何只有直线的形状:Sorry, your browser does not support inline SVG. 下面是SVG代码:<svg xmlns="http://www.w3.org/2000/svg" version="1.1"> <polyline points="20,20 40,25 60,4

  • SVG 直线 - <line> <line> 元素是用来创建一个直线: 下面是SVG代码: <svg xmlns="http://www.w3.org/2000/svg" version="1.1">   <line x1="0" y1="0" x2="200" y2="200"   style="stroke:rgb(255,0,0);stroke-width:2"/> </svg> 对于Ope

  • 给饼图添加点击事件,点击对应区块放大,再次点击正常,这种交互如何实现呢?

  • 我有一个图标svg喜欢: 它显示很好,但我想在某些情况下改变颜色(如悬停或选择) 我用过: 它不会改变颜色。任何帮助都将不胜感激。