Sam*_*man 0 javascript jquery svg click dom-events
此HTML包含SVG:
<div class="container">
<div class="spacer"></div>
<svg>
<g id="polygonGroup" transform="translate(80, 50)">
<polygon points="-60,-10 -35,-30 -10,-10 -10,30 -60,30"></polygon>
<polygon points="10,-10 35,-30 60,-10 60,30 10,30"></polygon>
<polygon class="origin" points="-4,0 0,4 4,0 0,-4"></polygon>
</g>
<g id="textGroup" transform="translate(80, 50)">
<text x="-35" y="10">Text</text>
<text x="35" y="10">Text</text>
</g>
</svg>
</div>
Run Code Online (Sandbox Code Playgroud)
这个简单的jQuery click事件处理程序:
function clicked(event) {
console.log(event.offsetX, event.offsetY);
}
$('svg').click(clicked);
Run Code Online (Sandbox Code Playgroud)
如此处所示:https : //jsfiddle.net/1ht0L8y6/6/在不同的浏览器中具有不同的行为:
Chrome:无论我在SVG内的哪个位置单击,坐标都基于SVG元素的左上角。这是我想要的行为。
Firefox:坐标基于我所处元素的左上角,这些元素可能是SVG,多边形或文本。
IE和Edge:
<g>组的原点及其translate偏移(即黑菱形)。负坐标可以通过这种方式实现,这与Chrome或Firefox不同。什么是可靠的跨浏览器方式来获取点击的坐标?
我已经在您的代码中添加了一个功能来检测SVG中的鼠标位置。
let svg = document.querySelector('svg')
function clicked(event) {
let m = oMousePosSVG(event);
console.log(m.x,m.y);
}
svg.addEventListener("click", clicked)
function oMousePosSVG(e) {
var p = svg.createSVGPoint();
p.x = e.clientX;
p.y = e.clientY;
var ctm = svg.getScreenCTM().inverse();
var p = p.matrixTransform(ctm);
return p;
}Run Code Online (Sandbox Code Playgroud)
svg{border:1px solid}Run Code Online (Sandbox Code Playgroud)
<div class="container">
<div class="spacer"></div>
<svg>
<g id="polygonGroup" transform="translate(80, 50)">
<polygon points="-60,-10 -35,-30 -10,-10 -10,30 -60,30"></polygon>
<polygon points="10,-10 35,-30 60,-10 60,30 10,30"></polygon>
<polygon class="origin" points="-4,0 0,4 4,0 0,-4"></polygon>
</g>
<g id="textGroup" transform="translate(80, 50)" fill="red">
<text x="-35" y="10">Text</text>
<text x="35" y="10">Text</text>
</g>
</svg>
</div>Run Code Online (Sandbox Code Playgroud)
要阅读有关SVG中鼠标检测的更多信息,我推荐这本书:将SVG与CSS3和HTML5结合使用:用于Web设计的矢量图形
希望对您有所帮助。
| 归档时间: |
|
| 查看次数: |
438 次 |
| 最近记录: |