鼠标在窗口中的坐标转换到 canvas 中的坐标
鼠标在窗口中的坐标转换到 canvas 中的坐标
由于需要用到isPointInPath函数,所以必须得将鼠标在窗口中的坐标位置转换到canvas画布中的坐标,今天发现网上这种非常常见的写法其实是错误的!
代码如下:
1.function windowTocanvas(canvas, x, y) {
2.  var bbox = canvas.getBoundingClientRect();
3.  return {
4.    x: x - bbox.left * (canvas.width / bbox.width),
5.    y: y - bbox.top * (canvas.height / bbox.height)
6.  };
7.}
什么时候会发生错误呢? 
 看下面的LiveScript代码
1.canvas = document.querySelector \canvas
2.ctx    = canvas.getContext \2d
3.dpr    = window.devicePixelRatio || 1
4.width  = parseInt canvas.style.width
5.height = parseInt canvas.style.height
6.canvas.width  = width  * dpr
7.canvas.height = height * dpr
8.ctx.scale dpr, dpr
当用到window.devicePixelRatio的时候,会出现鼠标命明明击中了path,却出现isPointInPath却报false的情况。
真正的window2canvas写法应该如下:
1.window2canvas = (e) ->
2.  rect = canvas.getBoundingClientRect!
3.  x = (e.clientX - rect.left) * canvas.width / rect.width
4.  y = (e.clientY - rect.top ) * canvas.height / rect.height
5.  {x, y}
鼠标在窗口中的坐标转换到 canvas 中的坐标的更多相关文章
- Canvas中鼠标获取元素并拖动技术
		
Silverlight拖动,需要Canvas. Canvas管网定义: 定义一个区域,在该区域中可以使用相对于该区域的坐标显式定位子元素. XAML <Canvas ...> oneOrM ...
 - 我在tmux中最不可少的配置: 用鼠标切换窗口/调节分屏大小
		
前两天在给另外一个团队帮忙时,看他们在Rails日志.代码文件.git文件系统里面来回穿梭,觉得他们太累了,于是就介绍了 tmux 给他们用.但只讲了一点基本的开窗口.分屏,没给讲太多技巧,因为一下子 ...
 - Duilib 实现右下角弹出像QQ新闻窗口,3秒后窗口透明度渐变最后关闭,若在渐变过程中鼠标放到窗口上,窗口恢复最初状态(二)
		
效果: 1.定义两个个定时器ID #define ID_TIMER_DISPLAY_DELAY 30 #define ID_TIMER_DISPLAY_CLOSE 40 2.添加一个成员函数和成员变量 ...
 - 获取鼠标在 canvas 中的位置
		
一般情况 一般情况下,如果需要在 canvas 中获取鼠标指针坐标,可以通过监听鼠标的 mousemove(如果只需单击时的坐标,可以用 click)事件. 当事件被触发时,我们可以获取鼠标相对于 v ...
 - (转)ARCGIS中坐标转换及地理坐标、投影坐标的定义
		
原文地址:http://blog.sina.com.cn/s/blog_663d9a1f01017cyz.html 1.动态投影(ArcMap) 所谓动态投影指,ArcMap中的Data 的空间参考或 ...
 - WPF在Canvas中绘图实现折线统计图
		
最近在WPF中做一个需要实现统计的功能,其中需要用到统计图,之前也没有接触过,度娘上大多都是各种收费或者免费的第三方控件,不想用第三方控件那就自己画一个吧. 在园子还找到一篇文章,思路来自这篇文章,文 ...
 - C# 调用windows api 操作鼠标、键盘、窗体合集...更新中
		
鼠标操作window窗体合集...更新中 1.根据句柄查找窗体 引自http://www.2cto.com/kf/201410/343342.html 使用SPY++工具获取窗体 首先打开spy+ ...
 - Canvas中图片翻转的应用
		
很多时候拿到的素材都是单方向的,需要将其手动翻转来达到需求,比如下面这张图片: 它是朝右边方向的,但还需要一张朝左边方向的,于是不得不打开PS将其翻转然后做成雪碧图.如果只是一张图片还好说,但通常情况 ...
 - WPF 程序鼠标在窗口之外的时候,控件拿到的鼠标位置在哪里?
		
原文:WPF 程序鼠标在窗口之外的时候,控件拿到的鼠标位置在哪里? 在 WPF 程序中,我们有 Mouse.GetPosition(IInputElement relativeTo) 方法可以拿到鼠标 ...
 
随机推荐
- django之母版的继承
			
模板继承示例 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UT ...
 - BZOJ 3712: [PA2014]Fiolki 倍增+想法
			
3712: [PA2014]Fiolki Time Limit: 30 Sec Memory Limit: 128 MBSubmit: 437 Solved: 115[Submit][Status ...
 - checkbox绑定v-for的数据
			
简述自己遇到的问题,觉得合适就拿去用 我在使用v-for遍历checked复选框数据的时候,数据分为两部分,一个主活动,主活动下面有多个子活动 我实体类的设计是里面加个list放子活动, 页面循环需要 ...
 - 【转】树莓派3代3.5寸触摸屏驱动的安装(通过ssh安装)
			
这是用到的配件的树莓派3代 烧录好系统后,启动的树莓派,我的树莓派已经在一开始通过路由器和局域网,登陆了ssh,设置好了开机就能自动连接到电脑的360wifi,所以无论到哪 里,只要自己的笔记本电脑还 ...
 - Idea01 Idea2018中集成Tomcat9导致OutPut乱码
			
版本和平台 idea2018.3 tomcat9 jdk1.8 windows7 64位 output乱码 经过测试,项目编码格式设置为utf-8,在main方法中输出中文正常. 而iedea集成to ...
 - 主成分分析法(PCA)答疑
			
问:为什么要去均值? 1.我认为归一化的表述并不太准确,按统计的一般说法,叫标准化.数据的标准化过程是减去均值并除以标准差.而归一化仅包含除以标准差的意思或者类似做法.2.做标准化的原因是:减去均值等 ...
 - Linux学习日记:第二天
			
今天学习vi编辑命令: root@ubuntu:vi hello.java 使用到的命令: 插入命令: a 和 i:在当前光标前或后插入文本(A 和 I 分别在当前行行末或行首插入文本): o 和 ...
 - RabbitMQ 学习资料
			
https://www.rabbitmq.com/getstarted.html http://www.cnblogs.com/luxiaoxun/p/3918054.html http://back ...
 - 使用jsp读取某个目录下的所有文件名,并保存在json文件中
			
<%@page import="java.io.File"%> <%@page import="java.io.FileWriter"%> ...
 - Missing letters-freecodecamp算法题目
			
Missing letters 1.要求 从传递进来的字母序列中找到缺失的字母并返回它. 如果所有字母都在序列中,返回 undefined. 2.思路 设定缺失变量miss 在for循环遍历字符串的各 ...