Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/css/39.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/5.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 如何使用鼠标操作围绕固定点旋转HTML画布对象?_Javascript_Css_Html - Fatal编程技术网

Javascript 如何使用鼠标操作围绕固定点旋转HTML画布对象?

Javascript 如何使用鼠标操作围绕固定点旋转HTML画布对象?,javascript,css,html,Javascript,Css,Html,例如,它可用于手动调整时钟指针的应用中。我猜这可能涉及到移动针(使针的端点成为旋转的中心),然后旋转它,然后再次移动针 但是由于指针一直在侦听鼠标事件,因此将捕获第一个鼠标事件。结果是针最终被平移,而根本不旋转。鼠标事件也无法调试 有什么想法或代码片段可以参考吗?使用Javascript或CSS对两者进行精细旋转。在您的示例中,您需要计算钟面中心(黑点)与当前鼠标位置(红点)之间相对于Y轴的角度(如果您想象指南针,则以北为基数) 如果我正确地记住了我的trig,您可以使用以下公式计算: var

例如,它可用于手动调整时钟指针的应用中。我猜这可能涉及到移动针(使针的端点成为旋转的中心),然后旋转它,然后再次移动针

但是由于指针一直在侦听鼠标事件,因此将捕获第一个鼠标事件。结果是针最终被平移,而根本不旋转。鼠标事件也无法调试


有什么想法或代码片段可以参考吗?使用Javascript或CSS对两者进行精细旋转。

在您的示例中,您需要计算钟面中心(黑点)与当前鼠标位置(红点)之间相对于Y轴的角度(如果您想象指南针,则以北为基数)

如果我正确地记住了我的trig,您可以使用以下公式计算:

var angle = Math.atan2(y2 - y1, x2 - x1) * 180 / Math.PI;

// alter the angle to be relative to Y axis instead of X
angle += 90;
if(angle < 0) { angle = 360 + angle; }
var angle=Math.atan2(y2-y1,x2-x1)*180/Math.PI;
//将角度更改为相对于Y轴而不是X轴
角度+=90;
如果(角度<0){angle=360+angle;}
在公式中,x和y是两点的坐标,其中一点您将知道(它是钟面的中心),另一点您可以从鼠标移动事件中获得

一旦确定了角度,就可以简单地平移到圆的中心,按计算的数量旋转画布,然后绘制手

更新:我创建了一个JSFIDLE来说明角度计算:


在您的示例中,您需要计算钟面中心(黑点)与当前鼠标位置(红点)之间相对于Y轴的角度(如果您想象的是指南针,则为基数北)

如果我正确地记住了我的trig,您可以使用以下公式计算:

var angle = Math.atan2(y2 - y1, x2 - x1) * 180 / Math.PI;

// alter the angle to be relative to Y axis instead of X
angle += 90;
if(angle < 0) { angle = 360 + angle; }
var angle=Math.atan2(y2-y1,x2-x1)*180/Math.PI;
//将角度更改为相对于Y轴而不是X轴
角度+=90;
如果(角度<0){angle=360+angle;}
在公式中,x和y是两点的坐标,其中一点您将知道(它是钟面的中心),另一点您可以从鼠标移动事件中获得

一旦确定了角度,就可以简单地平移到圆的中心,按计算的数量旋转画布,然后绘制手

更新:我创建了一个JSFIDLE来说明角度计算:


您能告诉我们您是怎么做的吗?farmine是由其他人的代码修改而来的。。。我还不熟悉javascript n HTML5,你能告诉我们你是怎么做的吗?farmine是从别人的代码中修改过来的。。。我还不熟悉javascript n HTML5,我将您的代码复制到一个文件中,但当我将其加载到浏览器中时,结果却是空的。它在错误控制台中显示“canvas为null”。尝试将脚本标记移动到页面底部。当代码运行时,canvas元素在技术上还不存在。我明白了。。。我封装了一些初始化代码,改为在“body”的onload过程中启动。顺便说一句,你的解决方案真的帮了我很大的忙!比我在网上找到的代码简单得多,更容易理解(这也不是我想要的)。谢谢我把你的代码复制到了一个文件中,但当我把它加载到浏览器中时,结果却是空的。它在错误控制台中显示“canvas为null”。尝试将脚本标记移动到页面底部。当代码运行时,canvas元素在技术上还不存在。我明白了。。。我封装了一些初始化代码,改为在“body”的onload过程中启动。顺便说一句,你的解决方案真的帮了我很大的忙!比我在网上找到的代码简单得多,更容易理解(这也不是我想要的)。谢谢