通过Panzoom变换放大时,获取画布单击坐标
Get canvas click coordinates when zoomed in via transform by Panzoom
我使用Panzoom在画布上缩放和平移一些点。
这些点是可单击的,并且在未缩放画布(通过Panzoom)时效果良好。
未缩放时的缩放因子为1,200%缩放时为2等。
我制作了这个函数来计算平移时的坐标,这样你就可以平移并单击它,坐标将始终是相对的。缩放时不起作用。。
function getCanvasCoords(x,y){
var matrix = $panzoom.panzoom("getMatrix");
var calc_x = x-matrix[4];
var calc_y = y-matrix[5];
return {x:calc_x,y:calc_y};
}
请在此处尝试工作示例:http://jsfiddle.net/hugef0c7/
单击黄色正方形以获得单击的坐标。然后放大并再次单击它;现在由于缩放,坐标不同了。
有什么方法可以计算缩放时单击的坐标吗?
我试过用缩放因子乘以/除以点击点,但这没有多大帮助。。
第一步是校正坐标的偏移量,使其相对于画布。您可以通过简单地将画布的绝对位置减去该函数中的客户端坐标来实现这一点:
$(document).mouseup(function(e) {
// get canvas rectangle with absolute position of element
var rect = myCanvas.getBoundingClientRect();
// subtract position from the global coordinates
var coords = getCanvasCoords(e.clientX - rect.left,
e.clientY - rect.top);
...
现在,您所需要做的就是反转缩放因子(1 / factor
)以返回到预期坐标,并使用矩阵中的比例值(a
和d
,或索引项中的0和3):
function getCanvasCoords(x,y){
var matrix = $panzoom.panzoom("getMatrix");
return {
x: x * (1 / matrix[0]), // multiply with inverse zoom factor
y: y * (1 / matrix[3])
};
}
这应该能胜任工作。
改良小提琴
希望这能有所帮助!
相关文章:
- react testUtils模拟点击单选按钮而不触发onchange
- Javascript:单击单选按钮时显示图像
- 在另一个可观察量完成后触发第二个表单提交单击
- 单击单选按钮时选中所有复选框
- 内联JavaScript启用/禁用点击单选按钮上的选择和文本框
- 由于正在加载modernizr,表单在单击时未提交
- 您如何控制在填写表单时单击下一步时 iOS/Android 将关注哪个字段
- 单击单选按钮禁用另一个单选按钮
- 如何在刷新jsp页面后保持单选按钮选中点击单选按钮
- 单击单选按钮时不会禁用下拉菜单
- 在表单中单击“提交”按钮时,请关注空字段
- 单击单选按钮,添加/删除表单元素的类
- fadeIn在悬停时工作,但在单击/单击时不工作
- 多步骤表单,单击未按预期执行
- 单击单选按钮值更改
- 单击单选按钮时禁用
- 单击单选按钮时递增/递减 jQuery
- 尝试使用 JavascriptExecutor 使用 Selenium Webdriver 单击单选按钮时出错
- 如何强制用户在提交表单之前单击链接
- 在jquery或javascript或angular中单击单选按钮或复选框后返回呼叫