粗茶淡饭


Rome was not built in a day. 生气是拿别人的错误来惩罚自己
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

Javascript在Firefox下获取鼠标位置

Posted on 2009-09-11 18:16  茶^_^米  阅读(755)  评论(0编辑  收藏  举报

来源:http://huangj.in/design/mouse-position-js/

由于Firefox和IE等浏览器之间对JS解释的方式不一样,Firefox下面获取鼠标位置不能够直接使用clientX来获取。网上说的一般都是触发mousemove事件才行。我这里有两段代码,思路都一样,就是风格不同。

 

第一段代码是利用全局变量来获取实时鼠标的位置。

 

 

  1. var xPos; 
  2. var yPos; 
  3. window.document.onmousemove(function(evt){ 
  4.     evt=evt || window.event; 
  5.     if(evt.pageX){ 
  6.         xPos=evt.pageX; 
  7.         yPos=evt.pageY; 
  8.     } else { 
  9.         xPos=evt.clientX+document.body.scrollLeft-document.body.clientLeft; 
  10.         yPos=evt.clientY+document.body.scrollTop-document.body.clientTop; 
  11.     } 
  12. }); 

 

 

因为IE和Firefox对clientX的解析不一样,IE认为clientX是鼠标相对整个页面左上角的位置,而Firefox认为是相对当前所见页面左上角的位置。而这段代码最终返回的结果是整个页面左上角的位置。这段代码的缺陷是,xPos和yPos是实时变动的。

 

第二段代码是通过函数获取当前时刻的鼠标坐标值

 

 

  1. document.onmousemove = mouseMove;  
  2.  
  3. function mouseMove(ev){  
  4.     ev           = ev || window.event;  
  5.     var mousePos = mouseCoords(ev);  
  6. }  
  7.  
  8. function mouseCoords(ev){  
  9.     if(ev.pageX || ev.pageY){  
  10.         return {x:ev.pageX, y:ev.pageY};  
  11.     }  
  12.     return {  
  13.         x:ev.clientX + document.body.scrollLeft - document.body.clientLeft,  
  14.         y:ev.clientY + document.body.scrollTop  - document.body.clientTop  
  15.     };  
  16. }  

 

 

这段代码的来源是这里,这个网站还提供了一些简单的样例给我们玩耍。这个函数和刚才的函数理论是一致的,先触发mousemove事件,然后获取了事件之后,分别判断浏览器类型。这段代码的优点是,不适用全局变量,并且可以随用随拿,只要调用这个函数,就能够获取鼠标坐标。

 

这两段代码,个人偏好于后者,现在先把这段代码记下来,这段代码应该是会经常被使用到的。