基于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 相关文章推荐
javascript中的正则表达式使用指南
Mar 01 Javascript
浅谈$(document)和$(window)的区别
Jul 15 Javascript
jquery+CSS3实现淘宝移动网页菜单效果
Aug 31 Javascript
详解jQuery事件
Jan 13 Javascript
javascript算法之二叉搜索树的示例代码
Sep 12 Javascript
vue实现验证码按钮倒计时功能
Apr 10 Javascript
关于TypeScript模块导入的那些事
Jun 12 Javascript
vue项目中使用lib-flexible解决移动端适配的问题解决
Aug 23 Javascript
深入理解js A*寻路算法原理与具体实现过程
Dec 13 Javascript
教你如何用Node实现API的转发(某音乐)
Sep 20 Javascript
element-ui 文件上传修改文件名的方法示例
Nov 05 Javascript
koa2的中间件功能及应用示例
Mar 05 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笔记之:初探PHPcms模块开发介绍
2013/04/26 PHP
分享8个最佳的代码片段在线测试网站
2013/06/29 PHP
基于php中使用excel的简单介绍
2013/08/02 PHP
详解WordPress中用于更新和获取用户选项数据的PHP函数
2016/03/08 PHP
php基于自定义函数记录log日志方法
2017/07/21 PHP
Laravel使用支付宝进行支付的示例代码
2017/08/16 PHP
PHP实现递归的三种方法
2020/07/04 PHP
js跨域和ajax 跨域问题的实现思路
2009/09/05 Javascript
JavaScript 字符串与数组转换函数[不用split与join]
2009/12/13 Javascript
JavaScript中使用构造器创建对象无需new的情况说明
2012/03/01 Javascript
JS修改css样式style浅谈
2013/05/06 Javascript
jQuery Mobile的loading对话框显示/隐藏方法分享
2013/11/26 Javascript
教你如何使用node.js制作代理服务器
2014/11/26 Javascript
jQuery获取标签文本内容和html内容的方法
2015/03/27 Javascript
详解JavaScript逻辑Not运算符
2015/12/04 Javascript
JavaScript简单实现弹出拖拽窗口(一)
2016/06/17 Javascript
Angular.js去除页面中显示的空行方法示例
2017/03/30 Javascript
详解React中合并单元格的正确写法
2019/01/08 Javascript
深入了解JavaScript 的 WebAssembly
2019/06/15 Javascript
Vuejs通过拖动改变元素宽度实现自适应
2020/09/02 Javascript
快速解决element的autofocus失效问题
2020/09/08 Javascript
Python 模拟员工信息数据库操作的实例
2017/10/23 Python
python中Switch/Case实现的示例代码
2017/11/09 Python
python数字图像处理之骨架提取与分水岭算法
2018/04/27 Python
python 给DataFrame增加index行名和columns列名的实现方法
2018/06/08 Python
python3安装speech语音模块的方法
2018/12/24 Python
用Anaconda安装本地python包的方法及路径问题(图文)
2019/07/16 Python
详解程序意外中断自动重启shell脚本(以Python为例)
2019/07/26 Python
Python使用pyyaml模块处理yaml数据
2020/04/14 Python
详解移动端HTML5页面端去掉input输入框的白色背景和边框(兼容Android和ios)
2016/12/15 HTML / CSS
业务主管岗位职责
2013/11/20 职场文书
八一建军节感言
2014/02/28 职场文书
大班亲子运动会方案
2014/06/10 职场文书
2014超市收银员工作总结
2014/11/13 职场文书
企业财务经理岗位职责
2015/04/08 职场文书
MySQL中rank() over、dense_rank() over、row_number() over用法介绍
2022/03/23 MySQL