基于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 相关文章推荐
JavaScript 中的replace方法说明
Apr 13 Javascript
js+css在交互上的应用
Jul 18 Javascript
jquery实现的鼠标拖动排序Li或Table
May 04 Javascript
JavaScript包装对象使用详解
Jul 09 Javascript
使用AJAX实现Web页面进度条的实例分享
May 06 Javascript
jquery mobile界面数据刷新的实现方法
May 28 Javascript
AngularJS动态菜单操作指令
Apr 25 Javascript
封装运动框架实战左右与上下滑动的焦点轮播图(实例)
Oct 17 Javascript
vue+springmvc导出excel数据的实现代码
Jun 27 Javascript
JavaScript设计模式之单例模式原理与用法实例分析
Jul 26 Javascript
jQuery each和js forEach用法比较
Feb 27 jQuery
手把手教你从零开始react+antd搭建项目
Jun 03 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
新版mysql+apache+php Linux安装指南
2006/10/09 PHP
PHP的FTP学习(一)
2006/10/09 PHP
php ci框架验证码实例分析
2013/06/26 PHP
遭遇php的in_array低性能问题
2013/09/17 PHP
PHP封装分页函数实现文本分页和数字分页
2014/10/23 PHP
Symfony2使用第三方库Upload制作图片上传实例详解
2016/02/04 PHP
PHP实现图的邻接矩阵表示及几种简单遍历算法分析
2017/11/24 PHP
Yii2.0框架模型多表关联查询示例
2019/07/18 PHP
javascript 一些用法小结
2009/09/11 Javascript
扩展jquery实现客户端表格的分页、排序功能代码
2011/03/16 Javascript
javascript中style.left和offsetLeft的用法说明
2014/03/07 Javascript
JS制作手机端自适应缩放显示
2015/06/11 Javascript
AngularJS API之copy深拷贝详解及实例
2016/09/14 Javascript
angularjs利用directive实现移动端自定义软键盘的示例
2017/09/20 Javascript
node通过npm写一个cli命令行工具
2017/10/12 Javascript
微信小程序6位或多位验证码密码输入框功能的实现代码
2018/05/29 Javascript
vue侧边栏动态生成下级菜单的方法
2018/09/07 Javascript
Vue axios设置访问基础路径方法
2018/09/19 Javascript
[14:24]Optic Gaming vs PSG LGD BO3
2018/06/07 DOTA
使用XML库的方式,实现RPC通信的方法(推荐)
2017/06/14 Python
python实现画五角星和螺旋线的示例
2019/01/20 Python
Python建造者模式案例运行原理解析
2020/06/29 Python
基于Python+QT的gui程序开发实现
2020/07/03 Python
selenium+python自动化78-autoit参数化与批量上传功能的实现
2021/03/04 Python
实列教程 一款基于jquery和css3的响应式二级导航菜单
2014/11/13 HTML / CSS
css3的transform造成z-index无效解决方案
2014/12/04 HTML / CSS
使用 CSS3 中@media 实现网页自适应的示例代码
2020/03/24 HTML / CSS
香港迪士尼乐园酒店预订:Hong Kong Disneyland Hotels
2017/05/02 全球购物
美国知名珠宝首饰品牌:Gemvara
2017/10/06 全球购物
中国旅游网站:途牛旅游网
2019/09/29 全球购物
武汉世纪畅想数字传播有限公司.NET笔试题
2014/07/22 面试题
原料仓管员岗位职责
2014/04/12 职场文书
商务助理求职信范文
2014/04/20 职场文书
优秀毕业生找工作自荐信
2014/06/23 职场文书
建议书范文
2015/02/05 职场文书
导游词之南京汤山温泉
2019/11/26 职场文书