因为现在常用主流浏览器对W3C准的不完全遵守,导致了书写js脚本经常要专注兼容问题,这也是现在js框架流行的一个原因。而鼠标位置相对于document对象的获取更是其中的代表,那真是诸侯割剧,群雄逐鹿,相当的混乱呀。
     据俺查资料所知,能用的得到鼠标的属性有如下六大对:
  

1 clientX,clientY
2 layerX,layerY
3 offsetX,offsetY
4 pageX,pageY
5 screenX,screenY
6 x,y


     如果说没得用令人头疼,那么有太多可用,那个又不好用就令人恼火了。但对于我等要靠coding来养家糊口的,没困难要上,有困难睁着通红的双眼也要上。
     开始分析之前,必须明确要获取的鼠标坐标是相对于document的,因为,js编程都是操作dom对象,所以得到document才有意义。下面开始分析解决之道。


     首先,最好的情况下,老版本的Netscape提供了pageX和pageY这一对属性,并且得到的x,y坐标刚好是相对于document而言。所以对于这类情况,代码如此:

1  if(!e) var e = window.Event;
2  var x = e.pageX;
3  var y = e.pageY;


     现在考虑不太理想的情况,对于不提供pageX和pageY的浏览器。它们大多支持clientX/Y属性,但都是相对于window的坐标值。所以要取得适合自己用的坐标还需要处理:

1   if(!e) var e = window.Event;
2   var x = e.clientX + document.documentElement.scrollLeft;
3   var y = e.clientY + document.documentElement.scrollTop;

 

    综合两种情况,可以写一个兼容大多数主流浏览器的方法得到鼠标坐标:

 

1  if(!e) var e = window.Event;
2   var x = e.pageX ||(e.clientX?e.clientX+document.documentElement.scrollLeft:0);
3   var y = e.pageY ||(e.clientY?e.clientY+document.documentElement.scrollTop:0);

   

  

posted on 2008-09-03 11:26  Evilbaniry  阅读(1834)  评论(4)    收藏  举报