Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/423.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 获取单击css调整大小后画布中的实际单击位置_Javascript_Jquery_Html_Css_Canvas - Fatal编程技术网

Javascript 获取单击css调整大小后画布中的实际单击位置

Javascript 获取单击css调整大小后画布中的实际单击位置,javascript,jquery,html,css,canvas,Javascript,Jquery,Html,Css,Canvas,首先,假设我有以下画布:。然后,我需要用width:100%调整它的大小;高度:自动以适合我的响应容器。现在,让我们假设我的画布的宽度是800。问题是每次我尝试获取点击事件的位置(x,y)时,我都会得到相对于实际鼠标位置的坐标 为了清楚起见,如果我单击画布的底部边缘,而不是获取位置(400200),我将获得(800400) 我已经在网上搜索了一个解决方案,但我找不到我的具体问题,jQuery和vanilla javascript似乎都没有解决这个问题的简单方法。我想到的唯一解决方案是在DOM中设

首先,假设我有以下画布:
。然后,我需要用
width:100%调整它的大小;高度:自动以适合我的响应容器。现在,让我们假设我的画布的宽度是800。问题是每次我尝试获取点击事件的位置(x,y)时,我都会得到相对于实际鼠标位置的坐标

为了清楚起见,如果我单击画布的底部边缘,而不是获取位置(400200),我将获得(800400)


我已经在网上搜索了一个解决方案,但我找不到我的具体问题,jQuery和vanilla javascript似乎都没有解决这个问题的简单方法。我想到的唯一解决方案是在DOM中设置的实际画布尺寸与缩放后的宽度和高度之间使用一种数学关系,但是我真的不知道怎么做。

一种方法是在画布元素上使用
offsetLeft
offsetTop
属性将鼠标坐标转换到画布。它的工作原理如下:

function(clickEvent) {
   var canvas = document.getElementById("can")
   var transformedClickX = clickEvent.pageX - canvas.offsetLeft;
   var transformedClickY = clickEvent.pageY - canvas.offsetTop;

   ...
}

一种方法是在画布元素上使用
offsetLeft
offsetTop
属性将鼠标坐标转换为画布。它的工作原理如下:

function(clickEvent) {
   var canvas = document.getElementById("can")
   var transformedClickX = clickEvent.pageX - canvas.offsetLeft;
   var transformedClickY = clickEvent.pageY - canvas.offsetTop;

   ...
}

这就是我得到的行为:这现在成为一个缩放问题。这有点复杂,但你可以参考这个问题:这就是我得到的行为:这现在变成了一个缩放问题。这有点复杂,但您可以参考这个问题:调整画布元素大小的唯一推荐方法是设置其
宽度
高度
属性,不要使用CSS!它可能是一个实时绘图应用程序的副本。我需要所有用户都能看到整个图形,不管屏幕大小。然后决定画布的宽度,并在所有屏幕上都使用它:您可以使用
oveflow:auto
将画布插入div中,以便屏幕大小较小的用户可以滚动到其中。调整画布元素大小的唯一推荐方法是设置其大小
width
height
属性不使用CSS!它可能是一个实时绘图应用程序的副本。我需要所有用户都能看到整个图形,不管屏幕大小。然后决定画布的宽度,并在所有屏幕上都使用它:您可以使用
oveflow:auto
将画布插入div中,以便屏幕尺寸较小的用户可以滚动到其中。