基于JavaScript获取鼠标位置的各种方法


Posted in Javascript onDecember 16, 2015

在一些DOM操作中我们经常会跟元素的位置打交道,鼠标交互式一个经常用到的方面,令人失望的是不同的浏览器下会有不同的结果甚至是有的浏览器下没结果,这篇文章就上鼠标点击位置坐标获取做一些简单的总结,没特殊声明代码在IE8,FireFox,Chrome下进行测试兼容

鼠标点击位置坐标

相对于屏幕

如果是涉及到鼠标点击确定位置相对比较简单,获取到鼠标点击事件后,事件screenX,screenY获取的是点击位置相对于屏幕的左边距与上边距,不考虑iframe因素,不同浏览器下表现的还算一致。

function getMousePos(event) {
      var e = event || window.event;
      return {'x':e.screenX,'y':screenY}
    }

相对浏览器窗口

简单代码即可实现,然而这是还不够,因为绝大多数情况下我们希望获取鼠标点击位置相对于浏览器窗口的坐标,event的clientX,clientY属性分别表示鼠标点击位置相对于文档的左边距,上边距。于是类似的我们写出了这样的代码

function getMousePos(event) {
      var e = event || window.event;
      return {'x':e.clientX,'y':clientY}
    }

相对文档

简单测试也没什么问题,但是clientX与clientY获取的是相对于当前屏幕的坐标,忽略页面滚动因素,这在很多条件下很有用,但当我们需要考虑页面滚动,也就是相对于文档(body元素)的坐标时怎么办呢?加上滚动的位移就可以了,下边我们试试怎么计算页面滚动的位移。

其实在Firefox下问题会简单很多,因为Firefox支持属性pageX,与pageY属性,这两个属性已经把页面滚动计算在内了。

在Chrome可以通过document.body.scrollLeft,document.body.scrollTop计算出页面滚动位移,而在IE下可以通过document.documentElement.scrollLeft ,document.documentElement.scrollTop

function getMousePos(event) {
      var e = event || window.event;
      var scrollX = document.documentElement.scrollLeft || document.body.scrollLeft;
      var scrollY = document.documentElement.scrollTop || document.body.scrollTop;
      var x = e.pageX || e.clientX + scrollX;
      var y = e.pageY || e.clientY + scrollY;
      //alert('x: ' + x + '\ny: ' + y);
      return { 'x': x, 'y': y };
    }

以上内容是小编给大家介绍的基于JavaScript获取鼠标位置的各种方法,希望大家喜欢。

Javascript 相关文章推荐
js 禁用浏览器的后退功能的简单方法
Dec 10 Javascript
jquery 学习笔记 传智博客佟老师附详细注释
Sep 12 Javascript
javascript 时间比较实现代码
Oct 28 Javascript
IE6/7/8/9不支持exec的简写方式
May 25 Javascript
js实现三张图(文)片一起切换的banner焦点图
Aug 25 Javascript
javascript实现checkbox复选框实例代码
Jan 10 Javascript
Javascript基础回顾之(三) js面向对象
Jan 31 Javascript
jQuery实现的弹幕效果完整实例
Sep 06 jQuery
基于Require.js使用方法(总结)
Oct 26 Javascript
小程序点赞收藏功能的实现代码示例
Sep 07 Javascript
在 Vue 中使用 JSX 及使用它的原因浅析
Feb 10 Javascript
javascript实现贪吃蛇小练习
Jul 05 Javascript
javascript基于prototype实现类似OOP继承的方法
Dec 16 #Javascript
javascript数组克隆简单实现方法
Dec 16 #Javascript
Perl Substr()函数及函数的应用
Dec 16 #Javascript
javascript针对不确定函数的执行方法
Dec 16 #Javascript
深入浅析JavaScript字符串操作方法 slice、substr、substring及其IE兼容性
Dec 16 #Javascript
js如何判断输入字符串长度
Dec 16 #Javascript
常常会用到的截取字符串substr()、substring()、slice()方法详解
Dec 16 #Javascript
You might like
smarty基础之拼接字符串的详解
2013/06/18 PHP
PHP中new static()与new self()的区别异同分析
2014/08/22 PHP
php邮件发送的两种方式
2020/04/28 PHP
php mysql_list_dbs()函数用法示例
2017/03/29 PHP
Expandable "Detail" Table Rows
2007/08/29 Javascript
jquery的颜色选择插件实例代码
2008/10/02 Javascript
加速IE的Javascript document输出的方法
2010/12/02 Javascript
时间戳转换为时间 年月日时间的JS函数
2013/08/19 Javascript
JS限制文本框只能输入数字和字母方法
2015/02/28 Javascript
jQuery实现冻结表格行和列
2015/04/29 Javascript
jQuery EasyUI 菜单与按钮之创建简单的菜单和链接按钮
2015/11/18 Javascript
JS获取屏幕高度的简单实现代码
2016/05/24 Javascript
jQuery移动端图片上传组件
2016/06/12 Javascript
简单的jQuery拖拽排序效果的实现(增强动态)
2017/02/09 Javascript
JavaScript数据结构中串的表示与应用实例
2017/04/12 Javascript
JavaScript实现图片切换效果
2017/08/12 Javascript
jQuery实现用户信息表格的添加和删除功能
2017/09/12 jQuery
jQuery 实现左右两侧菜单添加、移除功能
2018/01/02 jQuery
jQuery动态添加li标签并添加属性和绑定事件方法
2018/02/24 jQuery
在vue中使用vue-echarts-v3的实例代码
2018/09/13 Javascript
如何在vue中使用百度地图添加自定义覆盖物(水波纹)
2020/11/03 Javascript
vue 实现element-ui中的加载中状态
2020/11/11 Javascript
[48:22]VGJ.S vs VG 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
[01:59]游戏“zheng”当时试玩会
2019/08/21 DOTA
python 显示数组全部元素的方法
2018/04/19 Python
python smtplib模块自动收发邮件功能(二)
2018/05/22 Python
Python装饰器知识点补充
2018/05/28 Python
Python 中字符串拼接的多种方法
2018/07/30 Python
python实现点击按钮修改数据的方法
2019/07/17 Python
python中for循环把字符串或者字典添加到列表的方法
2019/07/20 Python
HTML5 解决苹果手机不能自动播放音乐问题
2017/12/27 HTML / CSS
美国零售商店:Blue&Cream
2017/04/07 全球购物
英国网上自行车商店:Tredz Bikes
2019/10/29 全球购物
派出所正风肃纪剖析材料
2014/10/10 职场文书
党员年度个人总结
2015/02/14 职场文书
MySQL为id选择合适的数据类型
2021/06/07 MySQL