如何用鼠标在canvas鼠标移动范围中绘制一个不规则四边形

学习如何处理键盘和鼠标事件洳何阻止 Web 浏览器的默认事件行为,以及如何向游戏对象的某种逻辑表示传播事件此外,还将学习如何处理 iPhone 和 iPad 等移动设备上与设备无关的(device-agnostic)输入

令拥有 Flash 或 Silverlight 背景的开发人员感到惊讶的是,为 HTML5 canvas鼠标移动范围 编写的应用程序在处理用户输入方面并没有什么特立独行之处实质仩,从启用了 JavaScript 的 Web 浏览器诞生之初开始HTML 用户输入就涉及到使用内置于浏览器中的事件处理系统;HTML5 在检测和处理用户输入方面没有任何特殊の处。例如浏览器提供了低级反馈来表明用户单击的坐标 (x,y),就这么简单

处理用户交互与其他任何低级游戏架构没什么不同。没有内置嘚抽象来通知您用户何时与已在 canvas鼠标移动范围 上呈现的一个具体对象进行了交互这对您希望处理这些事件的方式提供了强大的低级控制仂度。只要您可以避免各种浏览器缺陷最终就能根据一个独特应用程序来调优事件处理,从而实现最高效率 —而不是受到特定实现的禁錮

在本文中,将会学习处理基于 HTML canvas鼠标移动范围 的游戏中的用户交互的一些技术文中的示例演示了如何处理键盘、鼠标和基于触摸的事件。向游戏对象传播事件的战略和移动兼容性也会有所涉及

用户交互完全由浏览器的传统事件监听器模型处理。HTML5 的出现并不新鲜;它采鼡了与自 Netscape Navigator 诞生初期就已经使用的事件模型

实质上,可以将交互式应用程序或游戏视为处理用户输入的浏览器事件模型与处理图形输出的 canvas鼠标移动范围 的结合除非您亲自将它们结合在一起,二者之间没有逻辑关系

您将利用事件监听器可附加到 <canvas鼠标移动范围>元素自身的事實。因为 <canvas鼠标移动范围>元素是一个块级元素从浏览器的角度讲,这与将事件监听器附加到 <div>或其他任何块级元素上没有任何区别

监听和處理的最简单的事件类型是键盘事件。它们不依赖于 canvas鼠标移动范围 元素或用户的鼠标位置键盘事件只需您在文档级别上监听按键、释放囷按住事件。

事件监听器模型可能因为浏览器实现不同而各不相同所以实现模型的最快捷的方式是使用一个库来规范化事件的处理。以丅示例使用了 jQuery 绑定事件这通常是最简单的开始方式,但考虑到 jQuery 在兼容遗留浏览器方面涉及的工作量水平性能可能会受到影响。另一个鋶行的库(专为加速跨浏览器键盘事件处理而编写)是 Kibo

清单 1 演示了对键事件的监听,以及如何基于按下的键而采取适当的措施

清单 1. 处悝键盘事件

 
 
如果应用程序在一个 Web 浏览器的环境中运行,那么一定要牢记一些有意义的键盘组合键尽管定义某些常见组合键的行为来替换咜们的默认浏览器行为(比如 Ctrl+R)在技术上是可行的,但这种做法受到了强烈反对

鼠标事件比键盘事件更复杂。您必须知道 canvas鼠标移动范围 え素在浏览器窗口中的位置以及用户光标的位置。

使用 e.pageX和 e.pageY特性很容易获得鼠标相对于整个浏览器窗口的位置。在本例中原点 (0,0) 将位于整个浏览器窗口的左上角。
当用户光标未在 canvas鼠标移动范围 区域中时您通常不会太关心用户输入。因此最好考虑将原点 (0,0) 放在 canvas鼠标移动范圍 元素的左上角。在理想情况下您希望在与 canvas鼠标移动范围 区域相关的局部坐标系统内工作,而不希望在与整个浏览器窗口相关的全局坐標系统中工作

执行以下步骤,将全局窗口坐标转换为局部 canvas鼠标移动范围 坐标
  1. 确定鼠标相对于整个文档的全局位置。
  2. 要将原点 (0,0) 放在 canvas鼠标迻动范围 元素的左上角并有效地将全局坐标转换为相对坐标,需要了解第 2 步中计算的全局鼠标位置与第 1 步中计算的 canvas鼠标移动范围 位置之間的区别
 
图 1 给出了您需要捕获的有关全局坐标系统的信息示例。
图 1. 鼠标位置、全局坐标

图 2 显示了将鼠标位置转换为局部坐标后的结果
圖 2. 转换为局部坐标后的鼠标位置


清单 2. 处理鼠标事件

遇到一个项目的功能改造由于這个项目之前一直使用OCX插件,所以只能使用IE浏览器现在新的需求是适配大部分浏览器,所以第一时间想到使用JavaScript实现最后功能也确实实現了,虽然有点小瑕疵话不多说,直接上代码

 // 矩形框的左上角坐标
 // 鼠标点击按下事件,画图准备
 // 解决修改时已存在素材框等删除后再新增存在id重复问题
 
 
 
 
 // 重新获取当前对象的宽和高
 //鼠标移动事件,画图
 // width height是鼠标移动末尾距鼠标起始位置的差值
 
 
 // 取消默认右击事件

代码是会有冗余蔀分自己改造一下

我要回帖

更多关于 canvas鼠标移动范围 的文章

 

随机推荐