基于JavaScript实现 获取鼠标点击位置坐标的方法


Posted in Javascript onApril 12, 2013

在一些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 相关文章推荐
新浪刚打开页面出来的全屏广告代码
Apr 02 Javascript
js+html5操作sqlite数据库的方法
Feb 02 Javascript
JavaScript资源预加载组件和滑屏组件的使用推荐
Mar 10 Javascript
jQuery文字轮播特效
Feb 12 Javascript
Angular2 父子组件数据通信实例
Jun 22 Javascript
Vue实现一个返回顶部backToTop组件
Jul 25 Javascript
javaScript手机号码校验工具类PhoneUtils详解
Dec 08 Javascript
解决vue build打包之后首页白屏的问题
Mar 06 Javascript
深入浅出理解JavaScript高级定时器原理与用法
Aug 02 Javascript
vue上传图片到oss的方法示例(图片带有删除功能)
Sep 27 Javascript
浅谈Node新版本13.2.0正式支持ES Modules特性
Nov 25 Javascript
Vue Object 的变化侦测实现代码
Apr 15 Javascript
用JavaScript获取DOM元素位置和尺寸大小的方法
Apr 12 #Javascript
深入理解JavaScript 闭包究竟是什么
Apr 12 #Javascript
关于JavaScript中string 的replace
Apr 12 #Javascript
关于JavaScript与HTML的交互事件
Apr 12 #Javascript
Js中setTimeout()和setInterval() 何时被调用执行的用法
Apr 12 #Javascript
js实现单一html页面两套css切换代码
Apr 11 #Javascript
获取内联和链接中的样式(js代码)
Apr 11 #Javascript
You might like
PHP使用GIFEncoder类生成gif动态滚动字幕
2014/07/01 PHP
ThinkPHP中I(),U(),$this->post()等函数用法
2014/11/22 PHP
PHP原生函数一定好吗?
2014/12/08 PHP
php查看网页源代码的方法
2015/03/13 PHP
php构造函数与析构函数
2016/04/23 PHP
实现PHP中session存储及删除变量
2018/10/15 PHP
PHP操作路由器实现方法示例
2019/04/27 PHP
Laravel 创建可以传递参数 Console服务的例子
2019/10/14 PHP
HTML页面如何象ASP一样接受参数
2007/02/07 Javascript
基于jQuery实现仿淘宝套餐选择插件
2015/03/04 Javascript
jquery+php随机生成红包金额数量代码分享
2015/08/27 Javascript
对Angular.js Controller如何进行单元测试
2016/10/25 Javascript
jQuery仿写百度百科的目录树
2017/01/03 Javascript
基于JavaScript实现的顺序查找算法示例
2017/04/14 Javascript
基于Bootstrap模态对话框只加载一次 remote 数据的解决方法
2017/07/09 Javascript
分享ES6的7个实用技巧
2018/01/18 Javascript
Node.js 实现简单的无侵入式缓存框架的方法
2019/07/21 Javascript
解决vue项目input输入框双向绑定数据不实时生效问题
2020/08/05 Javascript
用Python实现一个简单的线程池
2015/04/07 Python
Python实现数据库编程方法详解
2015/06/09 Python
python实现web方式logview的方法
2015/08/10 Python
Python内置模块ConfigParser实现配置读写功能的方法
2018/02/12 Python
Python读写csv文件流程及异常解决
2020/10/20 Python
AmazeUI中各种的导航式菜单与解决方法
2020/08/19 HTML / CSS
Urban Outfitters美国官网:美国生活方式品牌
2016/08/26 全球购物
芝加哥牛排公司:Chicago Steak Company
2018/10/31 全球购物
Erwin Müller穆勒家居瑞士官网:您整个家庭的邮购公司
2019/12/28 全球购物
教师实习的自我鉴定
2013/10/26 职场文书
医学专业毕业生个人求职信
2013/12/25 职场文书
社区十八大感言
2014/01/19 职场文书
大学生就业策划书范文
2014/04/04 职场文书
三字经教学反思
2014/04/26 职场文书
优质服务演讲稿
2014/05/14 职场文书
群众路线专项整治工作情况报告
2014/10/28 职场文书
群众路线教育实践活动方案
2014/10/31 职场文书
Node-Red实现MySQL数据库连接的方法
2021/08/07 MySQL