鼠标位置(跨浏览器)

一、鼠标事件属性

1.clientX,clientY

    相对于可见视点(visual viewport)的鼠标位置,即当前浏览器显示区域(窗口)的位置,点击客户端矿口的左上角时 clientX 和 clientY 都为0,即使用户拖动了水平或垂直滚动条

document.onclick=function(e){
                var event=e||window.event;
                console.log(event.clientX+","+ event.clientY);
}

2.screenX,screenY

  相对于用户屏幕的鼠标位置,一定比clientX和clientY大

document.onclick=function(e){
                var event=e||window.event;
                console.log(event.clientX+","+ event.clientY);
                console.log(event.screenX+","+ event.screenY);
}

3.offsetX,offsetY

  相对于事件target的鼠标位置,这个属性各个浏览器的实现不一致,注意,指的是target,而不是currentTarget

4.pageX,pageY

  相对于html文档的位置,>=clientX/clientY

5.layerX,layerY

  相对于最近的被 positioned 的祖先元素,如果没有被 positioned 的祖先元素,就相对于html文档(类似于pageX, pageY)

二、标准化

1.计算pageX和pageY

IE8 以下不支持这两个属性。如果你使用jQuery时,它会自动为你标准化这两个属性。如果你使用的不是jQuery的标准事件,而是原生事件对象,你可以使用jQuery.event.fix函数来标准事件对象。例如:

document.body.onclick = function(e) {
    e = e || window.event;
    e = jQuery.event.fix(e);
    console.log([e.pageX, e.pageY]);
};

在没有jQuery的情况下,可以通过将 pageX 和 pageY 与 scrollLeft 和 scrollTop 相加来计算 clientX 和 clientY

document.body.onclick = function(e) {
    e = e || window.event;

    var pageX = e.pageX;
    var pageY = e.pageY;
    if (pageX === undefined) {
        pageX = e.clientX + document.body.scrollLeft + document.documentElement.scrollLeft;
        pageY = e.clientY + document.body.scrollTop + document.documentElement.scrollTop;
    }

    console.log([pageX, pageY]);
};

2.计算offsetX,offsetY

根据W3C工作草案,offsetX 和 offsetY 应该相对于事件的 target 元素的内边距边缘。只用 IE 符合此标准,Webkit 相对的是边框边缘,Opera 相对的是内容边缘,而 FireFox 不支持该属性

通过 Element.getBoundingClientRect 函数,我们能够很容易的实现 Webkit 的标准-相对于边框边缘:

document.body.onclick = function(e) {
    e = e || window.event;

    var target = e.target || e.srcElement,
        rect = target.getBoundingClientRect(),
        offsetX = e.clientX - rect.left,
        offsetY = e.clientY - rect.top;

    console.log([offsetX, offsetY]);
};

如果要实现W3C草案,只需要减去边框目标元素的边框大小即可:

document.body.onclick = function(e) {
    e = e || window.event;

    var target = e.target || e.srcElement,
        style = target.currentStyle || window.getComputedStyle(target, null),
        borderLeftWidth = parseInt(style[‘borderLeftWidth‘], 10),
        borderTopWidth = parseInt(style[‘borderTopWidth‘], 10),
        rect = target.getBoundingClientRect(),
        offsetX = e.clientX - borderLeftWidth - rect.left,
        offsetY = e.clientY - borderTopWidth - rect.top;

    console.log([offsetX, offsetY]);
};
时间: 2024-10-10 01:53:15

鼠标位置(跨浏览器)的相关文章

js获取浏览器宽高、网页宽高、屏幕宽高、鼠标位置等(带图片说明)

网页可见区域宽: document.body.clientWidth;网页可见区域高: document.body.clientHeight;(点击查看大图) 网页可见区域宽: document.body.offsetWidth (包括边线的宽);网页可见区域高: document.body.offsetHeight (包括边线的宽);(点击查看大图)有没有发现,offsetWidth和clientWidth的区别,offsetWidt是连滚动条一起包含在内的. 网页正文全文宽: documen

跨浏览器获取窗口位置

IE.Safari.Opera.Chrome都提供了 screenLeft 和 screenTop属性分别表示窗口相对于屏幕左边和上边的位置. Firefox.Safari.Chrome在 screenX 和 screenY 中提供相同的窗口信息. Opera支持 screenX 和 screenY 属性,但与 screenLeft 和 screenTop 属性并不对应,故不要在Opera中使用 screenX 和 screenY . 使用以下代码可以跨浏览器获取窗口位置: 1 var left

跨浏览器用javascript获取窗口的位置和大小

跨浏览器获取位置 var leftX = typeof window.screenLeft == 'number' ? window.screenLeft : window.screenX; var topY = typeof window.screenTop == 'number' ? window.screenTop : window.screenY; firefox浏览器不支持screenLeft和scrennTop,但是支持screenX和screenY:ie浏览器支持screenLef

使用ZeroClipboard解决跨浏览器复制到剪贴板的问题

Zero Clipboard的实现原理 Zero Clipboard 利用透明的Flash让其漂浮在复制按钮之上,这样其实点击的不是按钮而是 Flash ,这样将需要的内容传入Flash,再通过Flash的复制功能把传入的内容复制到剪贴板. Zero Clipboard的安装方法 首先需要下载 Zero Clipboard的压缩包,解压后把文件夹中两个文件:ZeroClipboard.js 和 ZeroClipboard.swf 放入到你的项目中. 然后把在你要使用复制功能的页面中引入Zero

js事件对象--DOM中的事件对象/IE中的事件对象/跨浏览器的事件对象

事件对象    在触发DOM上的某个事件时,会产生一个事件对象event,这个对象中包含着所有与事件有关的信息.包括导致事件的元素.事件的类型,以及其他与特定事件相关的信息.例如,鼠标操作导致的事件对象中,会包含鼠标位置的信息,而键盘操作导致的事件对象中,会包含与按下的键有关的信息.所有浏览器对象都支持event对象,但支持方式不同. DOM中的事件对象 兼容DOM的浏览器会将一个event对象传入到事件处理程序中.无论指定事件处理程序时使用什么方法(DOM0级或DOM2级),都会传入event

jQuery一步一步实现跨浏览器的可编辑表格,支持IE、Firefox、Safari、

脚 本 之 家 www.jb51.net 脚本云 专题 素材下载 电子书 软件下载 源码下载 服务器常用软件 a5交易 首页 网页制作 脚本专栏 脚本下载 网络编程 数据库 CMS教程 电子书籍 平面设计 媒体动画 操作系统 网站运营 网络安全 YUI.Ext相关 prototype jquery dojo json lib_js js面向对象 extjs Mootools Seajs 其它 特色栏目: vbscript 正则表达式 javascript 批处理 服务器软件 素材下载 低价出售流

鼠标位置属性总结

鼠标位置 序号 鼠标位置属性 属性描述 浏览器支持情况 备注 IE Chrome Safari  Firefox Opera 1 event.x 以浏览器窗口可见部分的左上角为坐标原点(不含滚动条) √ √ √  X √   2 event.y 以浏览器窗口可见部分的左上角为坐标原点(不含滚动条) √ √ √  X √   3 event.clientX 以浏览器窗口可见部分的左上角为坐标原点(不含滚动条) √ √ √  √ √   4 event.clientY 以浏览器窗口可见部分的左上角为

js跨浏览器事件处理程序

<!DOCTYPE html> <html> <head> <meta charset="utf-8"/> </head> <body> <div id="myDiv"> aaaaaaaaaaaaaaaaaaa </div> <ul id="myMenu" style="position:absolute;visibility:hidd

跨浏览器的网页右键菜单的简单实现

本文主要叙述怎样实现右键菜单,以及跨浏览器的右键菜单的实现. 一般在网页页面按下鼠标右键(这个是在windows平台下,而在MAC中则是CTRL+点击),会显示默认的菜单,要显示自定义的右键菜单,则需要取消默认的浏览器行为,显示自定义的菜单.我们先来看一个事件:contextmenu事件,即上下文菜单事件,在windows95首先引入了上下文菜单的概念.不久这个概念逐步被引入web领域,通过这个事件可以解决取消默认菜单的显示,从而显示自定义的菜单,这个事件是冒泡的,即可以通过document来处