`
Yangjinghuan
  • 浏览: 48103 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

javascript 获取鼠标(光标)的坐标位置 兼容IE/Firefox等浏览器

阅读更多
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7"/>
<meta name="auther" content="fq" />
<title>获取鼠标坐标</title>
</head>


<body>
<script type="text/javascript">

//用 javascript 获取当页面上鼠标(光标)位置在许多情况下都会用到,比如拖放,悬停提示(tooltip) 等等。当然,这里我们依然要面对浏览器的兼容问题,在不同的浏览器下,对这些相关的属性处理方式也不同,本文详细介绍了浏览器在处理这些属性时的差异和最终的解决方法

function mousePosition(ev){
     if(ev.pageX || ev.pageY){
      return {x:ev.pageX, y:ev.pageY};
      }
      return {
       x:ev.clientX + document.body.scrollLeft - document.body.clientLeft,
       y:ev.clientY + document.body.scrollTop  - document.body.clientTop
       };
}


//由于这个需求我们经常用到,所以我们将这段代码独立成一篇文章,供新手查询。
使用方式:

function mouseMove(ev){
    ev = ev || window.event;
    var mousePos = mousePosition(ev);
    document.getElementById('xxx').value = mousePos.x;
  document.getElementById('yyy').value = mousePos.y;
}
document.onmousemove = mouseMove;
</script>
X:<input id="xxx" type="text" />  Y:<input id="yyy" type="text" />
</body>
</html>



说明:

我们首先要声明一个  evnet 对象,无论移动、点击、按键等,都会激活一个 evnet ,在 Internet Explorer 里,  event 是全局变量,会被存储在 window.event 里. 在 firefox 或者其他浏览器,event 会被相应的函数获取.当我们将mouseMove函数赋值于document.onmousemove,mouseMove 会获取鼠标移动事件。

为了让 ev 在所有浏览器下获取了 event 事件,在Firefox下"||window.event"将不起作用,因为ev已经有了赋值。在 MSIE 中 ev 为空,所以得到 window.event 。

因为在这篇文章中我们需要多次获取鼠标位置,所以我们设计了一个 mousePosition 函数,它包含一个参数 : event 。

因为我们要在 MSIE 和其他浏览器下运行,Firefox 和其他浏览器用 event.pageX 和 event.pageY 来表示鼠标相对于文档的位置,如果你有一个 500*500 的窗口并且你的鼠标在绝对中间,那么 pageX 和 pageY  的值都是 250,如果你向下滚动  500, 那么 pageY 将变成 750。

MSIE 正好相反,它使用 event.clientX 和 event.clientY 表示鼠标相当于窗口的位置,而不是文档。在同样的例子中,如果你向下滚动500,clientY 依然是 250,因此,我们需要添加 scrollLeft 和 scrollTop 这两个相对于文档的属性。最后,MSIE 中文档并不是从 0,0 开始,而是通常有一个小的边框(通常是 2 象素),边框的大小定义在  document.body.clientLeft 和 clientTop 中,我们也把这些加进去。

很幸运,我们现在已经用 mousePosition 函数解决了坐标问题,不需为此费心了。
分享到:
评论

相关推荐

    js获得指定控件输入光标的坐标兼容IE,Chrome,火狐等多种主流浏览器

    为了兼容IE、Chrome、火狐等主流浏览器,我们可以通过JavaScript获取输入框中光标的位置。这需要利用不同浏览器各自支持的DOM属性或方法。在这个示例中,使用了IE的document.selection方法来获取光标的坐标,而对于...

    兼容FF/IE跟随鼠标的层的效果

    ### 兼容FF/IE跟随鼠标的层的效果 在早期的网页开发中,实现一个能够跟随鼠标移动的层是一项常用的技术。这样的效果可以用于多种场景,比如浮动菜单、提示框等。本文将详细介绍如何实现一个既能在Internet Explorer...

    javascript获取鼠标点击元素对象(示例代码)

    4. 根据不同的浏览器,例如旧版本的Internet Explorer (IE)和Firefox (FF),获取鼠标点击元素对象的方法可能有所不同。在IE中可以直接使用`document.elementFromPoint`,而FF需要在事件对象里添加元素对象才可以读取...

    用DIV完美模拟createPopup 弹出窗口(脚本之家修正版),支持Firefox,ie,chrome

    这里介绍的是通过CSS和JavaScript来模拟`createPopup`的方法,确保在Firefox、IE和Chrome等主流浏览器中都能正常工作。 首先,我们需要在HTML中定义一个`DIV`元素,用于创建弹出窗口。在给定的代码中,`...

    jQuery.event兼容各浏览器的event详细解析

    在IE浏览器中,`pageX`和`pageY`是通过`event.clientX`和`event.clientY`加上页面滚动距离得到的,而在Firefox浏览器中,`pageX`和`pageY`直接提供了正确的坐标。jQuery通过封装,简化了跨浏览器的坐标获取操作。 7...

    javascript与CSS复习(三)

    这两个函数使用了兼容性处理,针对Firefox(和其他非IE浏览器)的`e.pageX` 和 `e.pageY` 以及Internet Explorer的`e.clientX` 和 `e.clientY`。对于IE,还需要加上`document.body.scrollLeft` 和 `document.body....

    Javascript中最常用的55个经典技巧 .txt

    - **说明**:某些浏览器(如Firefox)会将此属性作为书签图标的来源。 #### 技巧7:禁用输入法 - **代码示例**: ```html ``` - **说明**:通过CSS样式`ime-mode: disabled`可以禁用输入框中的输入法。 #### ...

    jQuery Zoomer 图片局部放大插件.zip

    5. **兼容性**:由于基于jQuery,该插件支持大部分现代浏览器,包括Chrome、Firefox、Safari、Edge等。 集成jQuery Zoomer到你的项目中,你需要遵循以下步骤: 1. **引入jQuery**:首先确保你的页面已经引入了...

    使用JavaScript的菜单和子菜单

    然而,需要注意的是,`window.createpopup`是IE浏览器特有的,对于其他浏览器(如Firefox、Chrome等),我们需要采用不同的方法,如使用CSS和JavaScript来模拟类似的效果。CSS可以用于定义菜单项的样式和定位,而...

    js 可拖动列表实现代码

    - 对于Firefox浏览器(FF),可以通过设置CSS属性`-moz-user-select: none;`来禁止选中。 - 对于其他浏览器,可以通过设置元素的`onselectstart`事件为`function(){return false}`来实现。 文档还展示了相关的HTML...

    MagnifyingGlassEffect:图片放大镜效果 Magnifying Glass Effect

    9. **兼容性测试**:由于浏览器之间的差异,需要确保代码在主流浏览器(如Chrome、Firefox、Safari、Edge等)上都能正常工作,必要时使用polyfills或者调整代码以兼容旧版本的浏览器。 通过以上技术,...

    python中的句柄操作的方法示例

    driver = webdriver.Firefox() driver.get("http://www.example.com") # 获取当前窗口句柄 current_windows = driver.current_window_handle # 打开新窗口并切换 driver.find_element_by_link_text("Open Link")....

Global site tag (gtag.js) - Google Analytics