[js高手之路] html5 canvas動畫教程 - 實時獲取鼠標的當前座標

有了前面的canvas基礎以後,如今開始就精彩了,後面寫的canvas教程都是屬於綜合應用,前面已經寫了經常使用的canvas基礎知識,參考連接以下:javascript

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

[js高手之路] html5 canvas系列教程 - 掌握畫直線圖形的經常使用APIhtml5

[js高手之路] html5 canvas系列教程 - 開始路徑beginPath與關閉路徑closePath詳解java

[js高手之路] html5 canvas系列教程 - arc繪製曲線圖形(曲線,弧線,圓形)git

[js高手之路] html5 canvas系列教程 - arcTo(弧度與二次,三次貝塞爾曲線以及在線工具)github

[js高手之路] html5 canvas系列教程 - 線條樣式(lineWidth,lineCap,lineJoin,setLineDash)chrome

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

[js高手之路] html5 canvas系列教程 - 圖片操做(drawImage,clip,createPattern)框架

[js高手之路] html5 canvas系列教程 - 狀態詳解(save與restore)dom

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

[js高手之路] html5 canvas系列教程 - 線形漸變,徑向漸變與陰影設置

[js高手之路] html5新增的定時器requestAnimationFrame實戰進度條

本文來作一個簡單的實時獲取鼠標座標的功能,在canvas動畫開發中,獲取鼠標的座標,鍵盤的按鍵等等,都是經常使用的操做,咱們就慢慢得把他們封裝成一個公共庫。

1、事件的兼容:

複製代碼
 1 function bindEvent(obj, event, fn) {
 2         if (obj.attachEvent) { //ie
 3             obj.attachEvent('on' + event, function () {
 4                 fn.call(obj);
 5             });
 6         } else {
 7             //chrome&ff
 8             obj.addEventListener(event, fn, false);
 9         }
10     }
複製代碼

上面兼容ie8以及修正this關鍵字在ie低版本的指向,下面兼容chrome和ff。其餘更經常使用的封裝能夠參考個人javascript開源框架gdom

2、用當即表達式搭建一個基本的庫

添加獲取鼠標座標的方法

複製代碼
 1 ;(function (window) {
 2     window.G = {};
 3     function bindEvent(obj, event, fn) {
 4         if (obj.attachEvent) { //ie
 5             obj.attachEvent('on' + event, function () {
 6                 fn.call(obj);
 7             });
 8         } else {
 9             //chrome&ff
10             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);
複製代碼

3、引入封裝的js庫,綁定canvas爲監聽對象,打印當前鼠標的座標

鼠標的座標,我這裏畫了2根線,便於觀察.

複製代碼
 1 <head>
 2 <meta charset='utf-8' />
 3 <script>
 4 ;(function (window) {
 5     window.G = {};
 6     function bindEvent(obj, event, fn) {
 7         if (obj.attachEvent) { //ie
 8             obj.attachEvent('on' + event, function () {
 9                 fn.call(obj);
10             });
11         } else {
12             //chrome&ff
13             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 id="canvas" width="500" height="400"></canvas>
69 <div id="info"></div>
70 </body>
複製代碼

4、點擊'run code'能夠預覽效果額


 

做者:ghostwu, 出處: http://www.cnblogs.com/ghostwu 博客大多數文章均屬原創,歡迎轉載,但未經做者贊成必須保留此段聲明,且在文章頁面明顯位置給出原文鏈接,不然保留追究法律責任的權利
相關文章
相關標籤/搜索