http://www.lampbrother.net
演示HTML5 Canvas鼠标事件,获取Canvas对象上的鼠标坐标,演示键盘事件
通过键盘控制Canvas上对象移动。
Canvas对象支持所有的JavaScript的鼠标事件,包括鼠标点击(MouseClick), 鼠标按下
(Mouse Down), 鼠标抬起(Mouse Up),鼠标移动( Mouse Move) 对Canvas添加鼠标事件方式有两种,一种方式是通过API来完成:
// mouse event
canvas.addEventListener(\,doMouseDown,false); canvas.addEventListener('mousemove', doMouseMove,false); canvas.addEventListener('mouseup', doMouseUp, false); 另外一种方式在JavaScript中称为反模式: canvas.onmousedown = function(e){ }
canvas.onmouseup = function(e){ }
canvas.onmousemove = function(e){
http://www.lampbrother.net
}
获取鼠标在Canvas对象上坐标:
由于Canvas上鼠标事件中不能直接获取鼠标在Canvas的坐标,所获取的都是基于整个
屏幕的坐标。所以通过鼠标事件e.pageX与e.pageY来获取鼠标位置,然后通过
Canvas. getBoundingClientRect()来获取Canvas对象相对屏幕的相对位置,通过计算
得到鼠标在Canvas的坐标,代码如下:
function getPointOnCanvas(canvas, x, y) { var bbox =canvas.getBoundingClientRect(); return { x: x- bbox.left *(canvas.width / bbox.width), y:y - bbox.top * (canvas.height / bbox.height) }; }
键盘事件:
HTML5 Canvas本身不支持键盘事件监听与获取,常用的有两种方法来解决这个问题:
http://www.lampbrother.net
一:通过windows对象来实现Canvas键盘事件监听与处理
// key event - use window as object
window.addEventListener('keydown', doKeyDown,true);
二:通过在Canvas对象上添加其它支持键盘事件的DOM元素实现键盘事件支持
// key event - use DOM element asobject
canvas.addEventListener('keydown', doKeyDown,true); canvas.focus();
其中tabindex为HTML5 DOM元素,支持键盘事件。 演示,一个可以根据键盘上下左右移动的矩形块:
http://www.lampbrother.net
一个完整的鼠标与键盘事件演示代码如下:
[javascript] view plain copy
1. var tempContext = null; // global variable 2d context 2. var started = false; 3. var mText_canvas = null; 4. var x = 0, y =0; 5. window.add
6. window.onload = function() {
7. var canvas = document.getElementById(\); 8. console.log(canvas.parentNode.clientWidth); 9. canvas.width = canvas.parentNode.clientWidth; 10. canvas.height = canvas.parentNode.clientHeight;
http://www.lampbrother.net
11.
12. if (!canvas.getContext) {
13. console.log(\
browser.\);
14. return; 15. } 16.
17. // get 2D context of canvas and draw rectangel 18. tempContext = canvas.getContext(\); 19. tempContext.fillStyle=\; 20. x = canvas.width/2; 21. y = canvas.height/2;
22. tempContext.fillRect(x, y, 80, 40); 23.
24. // key event - use DOM element as object
25. canvas.addEventListener('keydown', doKeyDown, true); 26. canvas.focus();
27. // key event - use window as object
28. window.addEventListener('keydown', doKeyDown, true); 29.
30. // mouse event
31. canvas.addEventListener(\, doMouseDown, false); 32. canvas.addEventListener('mousemove', doMouseMove, false); 33. canvas.addEventListener('mouseup', doMouseUp, false); 34. } 35.
36. function getPointOnCanvas(canvas, x, y) {
37. var bbox = canvas.getBoundingClientRect();
38. return { x: x - bbox.left * (canvas.width / bbox.width), 39. y: y - bbox.top * (canvas.height / bbox.height) 40. }; 41. } 42.
43. function doKeyDown(e) {
44. var keyID = e.keyCode ? e.keyCode :e.which;
45. if(keyID === 38 || keyID === 87) { // up arrow and W 46. clearCanvas(); 47. y = y - 10;
48. tempContext.fillRect(x, y, 80, 40); 49. e.preventDefault(); 50. }
51. if(keyID === 39 || keyID === 68) { // right arrow and D 52. clearCanvas(); 53. x = x + 10;