javascript – 将浏览器单击事件`x`和`y`坐标转换为缩放的Snap svg元素上的坐标
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了javascript – 将浏览器单击事件`x`和`y`坐标转换为缩放的Snap svg元素上的坐标,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2544字,纯文字阅读大概需要4分钟。
内容图文
![javascript – 将浏览器单击事件`x`和`y`坐标转换为缩放的Snap svg元素上的坐标](/upload/InfoBanner/zyjiaocheng/773/8e9dd77f865b40d3a3f8775baa075a91.jpg)
我需要在用户点击的位置向snap渲染的svg添加一段文本.
因为SVG使用100%宽度缩放并使用viewBox属性,所以我需要将浏览器的click事件提供的x和y坐标转换为缩放svg上的x和y坐标.
我设法通过使用这段代码来完成这项工作:
var $canvas = $('svg#myscaledsvg');
var snap = new Snap($canvas[0]);
snap.mousedown(function(event) {
var offset = $canvas.offset();
var matrix = snap.transform().diffMatrix.invert();
var x = matrix.x(event.pageX - offset.left, event.pageY - offset.top);
var y = matrix.y(event.pageX - offset.left, event.pageY - offset.top)
// below function call actually renders the text element to the given x and y coords
addSomeText(x, y);
});
现在,我理解为什么我需要减去偏移量.我不明白的是snap.transform().diffMatrix.invert()实际上是什么.
有人可以告诉我为什么这样有效吗?我从快照文档中得不到多少,整体看起来相当稀疏.
解决方法:
我在这种情况下猜测,你可以将diffMatrix交换为globalMatrix,它仍然可以工作吗?
Snap存储3个矩阵以响应transform()方法. localMatrix,diffMatrix和globalMatrix.
localMatrix是元素本身存在的变换
globalMatrix是viewPort到正在应用的元素的矩阵
diffMatrix是它们之间的区别.
对于globalMatrix,当它传递给这个本机方法时,可能值得查看getCTM.
对于localMatrix,请查看元素本身的任何变换(可能没有svg元素本身,因为它不支持变换).
因此,当您查看浏览器时,视图可能会被放大,平移等,有一个viewBox.需要将鼠标的坐标从此坐标空间转换为元素所在的坐标.这就是globalMatrix的反转,从鼠标转换.所以我假设diffMatrix和globalMatrix(getCTM)在这种情况下可能意味着相同(因为它是一个没有应用变换的svg元素).
如果这不是真的有意义,可能值得做一些额外的svg坐标空间教程,因为它可能非常有用.
Edit: I'm adding a bit more info to try and help below...
jsfiddle我已经完成了,有一个使用与OP相似的代码的例子.
jsfiddle 2类似但反应灵敏,在控制台日志中查看矩阵刻度会有所不同
SVG基本上按4缩放,因此放大了以下内容……
height="800" width="800" viewBox="0 0 200 200"
要么
height="100%" width="100%" viewBox="0 0 200 200"
在25,25处有一个圆圈,点击小提琴中的圆圈.
用户/浏览器事件空间中的鼠标事件将围绕大约100,100(有一些偏移需要考虑,因此可能108,108左右取决于).
因此,如果比例为4,我们需要将该100,100转换为该比例,否则它将出现在屏幕外.
如果我们将在svg上显示的所有内容都将被缩放4,我们只需要使用值的1/4来显示正确的坐标,这可能是一种有用的简单方式来查看它.
我们怎么做?我们反转比例(或任何变换).我们真正想要的是0.25的比例,将100,100转换为25,25,因此它出现在屏幕上的正确位置,因为所有内容都被放大(因为所有内容都会被svg参数缩放4).
是的,localMatrix对svg元素本身并没有多大意义(但它也不是问题).如果它是一个对它或其他元素进行转换的组,那将是有意义的.
还值得注意的是Snap将参数x,y传递给mousedown func,所以你可以使用它,而不是event.pageX / pageY.
内容总结
以上是互联网集市为您收集整理的javascript – 将浏览器单击事件`x`和`y`坐标转换为缩放的Snap svg元素上的坐标全部内容,希望文章能够帮你解决javascript – 将浏览器单击事件`x`和`y`坐标转换为缩放的Snap svg元素上的坐标所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。