基于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 相关文章推荐
一个tab标签切换效果代码
Mar 27 Javascript
对字符串进行HTML编码和解码的JavaScript函数
Feb 01 Javascript
JavaScript 读取元素的CSS信息的代码
Feb 07 Javascript
js模仿hover的具体实现代码
Dec 30 Javascript
基于JQuery实现滚动到页面底端时自动加载更多信息
Jan 31 Javascript
用js实现放大镜的效果的简单实例
May 23 Javascript
ES6中参数的默认值语法介绍
May 03 Javascript
基于vue+canvas的excel-like组件实例详解
Nov 28 Javascript
JS实现的RC4加密算法示例
Aug 16 Javascript
微信小程序模板template简单用法示例
Dec 04 Javascript
微信小程序npm引入vant-weapp的踩坑记录
Aug 01 Javascript
在vue中使用echars实现上浮与下钻效果
Nov 08 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
CI框架开发新浪微博登录接口源码完整版
2014/05/28 PHP
php操作mongoDB实例分析
2014/12/29 PHP
PHP时间日期增减操作示例【date strtotime实现加一天、加一月等操作】
2018/12/21 PHP
jQuery 使用手册(五)
2009/09/23 Javascript
鼠标移到导航当前位置的LI变色处于选中状态
2013/08/23 Javascript
推荐10 款 SVG 动画的 JavaScript 库
2015/03/24 Javascript
react native仿微信PopupWindow效果的实例代码
2017/08/07 Javascript
使用ionic(选项卡栏tab) icon(图标) ionic上拉菜单(ActionSheet) 实现通讯录界面切换实例代码
2017/10/20 Javascript
微信小程序wx.previewImage预览图片实例详解
2017/12/07 Javascript
微信小程序之批量上传并压缩图片的实例代码
2018/07/05 Javascript
对angularJs中controller控制器scope父子集作用域的实例讲解
2018/10/08 Javascript
vuex 解决报错this.$store.commit is not a function的方法
2018/12/17 Javascript
用element的upload组件实现多图片上传和压缩的示例代码
2019/02/12 Javascript
小程序的上传文件接口的注意要点解析
2019/09/17 Javascript
Vuex实现数据共享的方法
2019/12/20 Javascript
[50:58]2018DOTA2亚洲邀请赛 4.1 小组赛 B组 Mineski vs EG
2018/04/03 DOTA
Python入门教程之if语句的用法
2015/05/14 Python
Python爬虫设置代理IP(图文)
2018/12/23 Python
pytorch在fintune时将sequential中的层输出方法,以vgg为例
2019/08/20 Python
Python3操作Excel文件(读写)的简单实例
2019/09/02 Python
使用apiDoc实现python接口文档编写
2019/11/19 Python
Python命令行click参数用法解析
2019/12/19 Python
Django ModelForm操作及验证方式
2020/03/30 Python
有趣的Python图片制作之如何用QQ好友头像拼接出里昂
2020/04/22 Python
中外合拍动画首获奥斯卡提名,“上海出品”《飞奔去月球》能否拿下最终大奖?
2021/03/16 国漫
CSS3 3D立方体效果示例-transform也不过如此
2016/12/05 HTML / CSS
玩具反斗城美国官网:Toys"R"Us
2016/09/17 全球购物
人力资源专业推荐信
2013/11/29 职场文书
装修施工安全责任书
2014/07/24 职场文书
交警失职检讨书
2015/01/26 职场文书
医德医风个人总结
2015/02/28 职场文书
巴黎圣母院观后感
2015/06/10 职场文书
法定代表人免职证明
2015/06/24 职场文书
2016年教师节特级教师获奖感言
2015/12/09 职场文书
民警忠诚教育心得体会
2016/01/23 职场文书
2019年英语版感谢信(8篇)
2019/09/29 职场文书