HTML5技术

[js高手之路] html5 canvas动画教程 - 实时获取鼠标的当前坐标 - ghostwu

字号+ 作者:H5之家 来源:H5之家 2017-09-30 18:00 我要评论( )

有了前面的canvas基础之后,现在开始就精彩了,后面写的canvas教程都是属于综合应用,前面已经写了常用的canvas基础知识,参考链接如下: [js高手之路] html5 canvas系列教程 - 认识canvas以及基本使用方法 [js高手之路] html5 canvas系列教程 - 掌握画直线图

有了前面的canvas基础之后,现在开始就精彩了,后面写的canvas教程都是属于综合应用,前面已经写了常用的canvas基础知识,参考链接如下:

[js高手之路] html5 canvas系列教程 - 认识canvas以及基本使用方法

[js高手之路] html5 canvas系列教程 - 掌握画直线图形的常用API

[js高手之路] html5 canvas系列教程 - 开始路径beginPath与关闭路径closePath详解

[js高手之路] html5 canvas系列教程 - arc绘制曲线图形(曲线,弧线,圆形)

[js高手之路] html5 canvas系列教程 - arcTo(弧度与二次,三次贝塞尔曲线以及在线工具)

[js高手之路] html5 canvas系列教程 - 线条样式(lineWidth,lineCap,lineJoin,setLineDash)

[js高手之路] html5 canvas系列教程 - 文本样式(strokeText,fillText,measureText,textAlign,textBaseline)

[js高手之路] html5 canvas系列教程 - 图片操作(drawImage,clip,createPattern)

[js高手之路] html5 canvas系列教程 - 状态详解(save与restore)

[js高手之路] html5 canvas系列教程 - 像素操作(反色,黑白,亮度,复古,蒙版,透明)

[js高手之路] html5 canvas系列教程 - 线形渐变,径向渐变与阴影设置

[js高手之路] html5新增的定时器requestAnimationFrame实战进度条

本文来做一个简单的实时获取鼠标坐标的功能,在canvas动画开发中,获取鼠标的坐标,键盘的按键等等,都是常用的操作,我们就慢慢得把他们封装成一个公共库。

一、事件的兼容:

1 function bindEvent(obj, event, fn) { obj.attachEvent('on' + event, function () { 4 fn.call(obj); 5 }); 6 } else { obj.addEventListener(event, fn, false); 9 } 10 }

上面兼容ie8以及修正this关键字在ie低版本的指向,下面兼容chrome和ff。其他更常用的封装可以参考我的javascript开源框架gdom

二、用立即表达式搭建一个基本的库

添加获取鼠标坐标的方法

1 ;(function (window) { 2 window.G = {}; 3 function bindEvent(obj, event, fn) { obj.attachEvent('on' + event, function () { 6 fn.call(obj); 7 }); 8 } else { obj.addEventListener(event, fn, false); 11 } 12 } 13 14 G.getPos = function( dom ){ 15 var oPos = { x : 0, y : 0 }; 16 bindEvent( dom, 'mousemove', function( ev ){ 17 var oEvent = ev || event, x, y; 18 if ( oEvent.pageX || oEvent.pageY ){ 19 x = oEvent.pageX; 20 y = oEvent.pageY; 21 }else { 22 x = oEvent.clientX + document.body.scrollLeft || document.documentElement.scrollLeft; 23 y = oEvent.clientX + document.body.scrollTop || document.documentElement.scrollTop; 24 } 25 x -= dom.offsetLeft; 26 y -= dom.offsetTop; 27 oPos.x = x; 28 oPos.y = y; 29 } ); 30 return oPos; 31 }; 32 33 })(window);

三、引入封装的js库,绑定canvas为监听对象,打印当前鼠标的坐标

鼠标的坐标,我这里画了2根线,便于观察.

1 <head> 2 <meta charset='utf-8' /> 3 <script> 4 ;(function (window) { 5 window.G = {}; 6 function bindEvent(obj, event, fn) { obj.attachEvent('on' + event, function () { 9 fn.call(obj); 10 }); 11 } else { obj.addEventListener(event, fn, false); 14 } 15 } 16 17 G.getPos = function( dom ){ 18 var oPos = { x : 0, y : 0 }; 19 bindEvent( dom, 'mousemove', function( ev ){ 20 var oEvent = ev || event, x, y; 21 if ( oEvent.pageX || oEvent.pageY ){ 22 x = oEvent.pageX; 23 y = oEvent.pageY; 24 }else { 25 x = oEvent.clientX + document.body.scrollLeft || document.documentElement.scrollLeft; 26 y = oEvent.clientX + document.body.scrollTop || document.documentElement.scrollTop; 27 } 28 x -= dom.offsetLeft; 29 y -= dom.offsetTop; 30 oPos.x = x; 31 oPos.y = y; 32 } ); 33 return oPos; 34 }; 35 36 })(window); 37 </script> 38 <style> 39 #canvas{ 40 border:1px dashed #aaa; 41 } 42 </style> 43 <script> 44 window.onload = function(){ 45 var oCanvas = document.querySelector( "#canvas" ), 46 oGc = oCanvas.getContext( '2d' ), 47 width = oCanvas.width, height = oCanvas.height, 48 oInfo = document.querySelector( "#info" ), 49 oPos = G.getPos( oCanvas ); 50 oCanvas.addEventListener( "mousemove", function(){ 51 52 oGc.clearRect( 0, 0, width, height ); 53 oGc.beginPath(); 54 oGc.moveTo( oPos.x, 0 ); 55 oGc.lineTo( oPos.x, height ); 56 oGc.moveTo( 0, oPos.y ); 57 oGc.lineTo( width, oPos.y ); 58 oGc.closePath(); 59 oGc.strokeStyle = '#09f'; 60 oGc.stroke(); 61 62 oInfo.innerHTML = '鼠标的当前坐标是:(' + oPos.x + ',' + oPos.y + ')'; 63 }, false ); 64 } 65 </script> 66 </head> 67 <body> 68 <canvas></canvas> 69 <div></div> 70 </body>

四、点击'run code'可以预览效果额


run code

 

 

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
  • [js高手之路] html5 canvas系列教程 - 状态详解(save与restore) - ghostwu

    [js高手之路] html5 canvas系列教程 - 状态详解(save与restore) - gh

    2017-09-30 15:00

  • 防止html5的video标签在iphone中自动全屏 - 潘大胖

    防止html5的video标签在iphone中自动全屏 - 潘大胖

    2017-09-30 14:00

  • [js高手之路] html5 canvas系列教程 - 开始路径beginPath与关闭路径closePath详解 -

    [js高手之路] html5 canvas系列教程 - 开始路径beginPath与关闭路径c

    2017-09-30 13:01

  • [js高手之路] html5 canvas系列教程 - arc绘制曲线图形(曲线,弧线,圆形) - ghostwu

    [js高手之路] html5 canvas系列教程 - arc绘制曲线图形(曲线,弧线,

    2017-09-30 13:00

网友点评