html - 如何使用 html、svg 创建可点击的三 Angular 形网格?

标签 html css svg

我已经像这样创建了一个三 Angular 形网格:

    svg {
      margin-left: 0px;
      margin-right: -60px;
      padding: 0;
    }
<div data-bind="foreach: Grid">
  <div data-bind="foreach: $data.rowData">
    <!-- ko if: $data.owner() === 0 && ($data.pos[0] + $data.pos[1])%2 === 0-->
    <svg height="103.92" width="120">
      <polygon class="" points="60,0 0,103.92 120,103.92" style="fill:grey;" data-bind="click: $root.test.bind($data, $data)" />
    </svg>
    <!-- /ko -->
    <!-- ko if: $data.owner() === 0 && ($data.pos[0] + $data.pos[1])%2 === 1-->
    <svg height="103.92" width="120">
      <polygon class="" points="0,0 120,0 60,103.92" style="fill:grey;" data-bind="click: $root.test.bind($data, $data)" />
    </svg>
    <!-- /ko -->
  </div>
</div>

我的问题是只有三 Angular 形的左半部分是可点击的。我认为这是由于 svg 元素的(仍然是矩形的)形状。但我不知道如何解决这个问题。有没有办法让每个三 Angular 形在其整个区域都可以点击?

最佳答案

目前,所有单独的 SVG 都相互重叠,任何错过三 Angular 形的点击都将被父级吞没 <svg>元素。

最干净的解决方案是将所有多边形放在一个大 SVG 中。但是,使用 pointer-events 可以解决您的问题。属性(property)。

设置pointer-events="none"在你的 <svg>元素,以便点击将通过它们。但是您还需要设置一个明确的 pointer-events="fill"在你的多边形上,否则它们将从它们的父 SVG 继承“无”。

var output = document.getElementById("output");
    
document.getElementById("red").addEventListener("click", function(e) {
  output.textContent = "red";
});

document.getElementById("green").addEventListener("click", function(e) {
  output.textContent = "green";
});
svg {
    position: absolute;
    top: 0;
    left: 0;
    pointer-events: none;
}

polygon {
    pointer-events: fill;
}

#output {
  margin-top: 120px;
}
<svg width="100px" height="100px">
    <polygon points="0,0,100,0,100,100" fill="red" id="red"/>
</svg>

<svg width="100px" height="100px">
    <polygon points="0,0,100,100,0,100" fill="green" id="green"/>
</svg>

<div id="output"></div>

关于html - 如何使用 html、svg 创建可点击的三 Angular 形网格?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34001691/

相关文章:

html - 在 bootstrap 中布局 div

jquery - 鼠标移开后 HTML 子菜单不会保持打开状态

css - 在 HTML 中隐藏字符?

javascript - 使用 jQuery 动态添加表并在其中动态添加行

html - 是否可以使 Font Awesome 图标大于 'fa-5x' ?

html - bootstrap 3.3.4 导航栏上的全宽输入组

jquery - 绝对位置元素内的固定位置元素

java - 如何使用 Batik 获取坐标处的 SVG 节点

javascript - 绑定(bind)到 SVG 组元素但在子元素上触发并在另一个元素上完成的单击事件的行为是什么?

css - 如何验证 SVG 文件是否损坏