基于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从Cookies里面取值的简单实现
Jun 30 Javascript
全面解析DOM操作和jQuery实现选项移动操作代码分享
Jun 07 Javascript
sea.js常用的api简易文档
Nov 15 Javascript
JQuery中Ajax的操作完整例子
Mar 07 Javascript
ECMAScript6 新特性范例大全
Mar 24 Javascript
JavaScript实现的商品抢购倒计时功能示例
Apr 17 Javascript
ES6中箭头函数的定义与调用方式详解
Jun 02 Javascript
vue中简单弹框dialog的实现方法
Feb 26 Javascript
Postman模拟发送带token的请求方法
Mar 31 Javascript
Node.js Koa2使用JWT进行鉴权的方法示例
Aug 17 Javascript
jQuery实现点击图标div循环放大缩小功能
Sep 30 jQuery
node中使用es6/7/8(支持性与性能)
Mar 28 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
玛琪朵 Macchiato
2021/03/03 咖啡文化
PHP 页面编码声明方法详解(header或meta)
2010/03/12 PHP
PHP原理之异常机制深入分析
2010/08/08 PHP
php5 apache 2.2 webservice 创建与配置(java)
2011/01/27 PHP
PHP array_multisort()函数的使用札记
2011/07/03 PHP
php递归获取目录内文件(包含子目录)封装类分享
2013/12/25 PHP
codeigniter上传图片不能正确识别图片类型问题解决方法
2014/07/25 PHP
Symfony2在Nginx下的配置方法图文教程
2016/02/04 PHP
PHP用函数嵌入网站访问量计数器
2017/10/27 PHP
jQuery 行级解析读取XML文件(附源码)
2009/10/12 Javascript
javascript的动态加载、缓存、更新以及复用(一)
2014/06/09 Javascript
JavaScript设计模式之单例模式实例
2014/09/24 Javascript
使用jQuery.wechat构建微信WEB应用
2014/10/09 Javascript
JS操作HTML自定义属性的方法
2015/02/10 Javascript
JS组件Form表单验证神器BootstrapValidator
2016/01/26 Javascript
Jquery鼠标放上去显示全名的实现方法
2017/02/06 Javascript
详解如何使用webpack打包多页jquery项目
2019/02/01 jQuery
Vue路由守卫及页面登录权限控制的设置方法(两种)
2020/03/31 Javascript
[09:13]DOTA2-DPC中国联赛 正赛 Ehome vs Magma 选手采访 1月19日
2021/03/11 DOTA
python获取android设备的GPS信息脚本分享
2015/03/06 Python
小议Python中自定义函数的可变参数的使用及注意点
2016/06/21 Python
python交互式图形编程实例(三)
2017/11/17 Python
使用 Python 玩转 GitHub 的贡献板(推荐)
2019/04/04 Python
Python使用import导入本地脚本及导入模块的技巧总结
2019/08/07 Python
Pandas 缺失数据处理的实现
2019/11/04 Python
Python3搭建http服务器的实现代码
2020/02/11 Python
使用PyQt5实现图片查看器的示例代码
2020/04/21 Python
python3访问字典里的值实例方法
2020/11/18 Python
让IE可以变相支持CSS3选择器
2010/01/21 HTML / CSS
CSS3 Flex 弹性布局实例代码详解
2018/11/01 HTML / CSS
UGG美国官网:购买UGG雪地靴、拖鞋和鞋子
2017/12/31 全球购物
税务职业生涯规划书范文
2014/09/16 职场文书
个人纪律作风整改措施思想汇报
2014/10/12 职场文书
教师批评与自我批评总结
2014/10/16 职场文书
群众路线教育实践活动学习心得体会
2014/10/30 职场文书
部队2014年终工作总结
2014/11/27 职场文书