我已经创建了一个三角形网格,如下所示:
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>
我的问题是只有三角形的左半部分是可点击的。我认为这是由于 svg 元素的(仍然是矩形)形状造成的。但我不知道如何解决这个问题。有没有办法让每个三角形在其整个区域都可点击?
目前,所有单独的 SVG 都相互重叠,任何错过三角形的点击都将被父级吞没<svg>
元素。
最干净的解决方案是将所有多边形放入一个大的 SVG 中。但是,还有另一种方法可以解决您的问题,使用pointer-events
财产。
Set 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>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)