基于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 相关文章推荐
js实现在网页上简单显示时间的方法
Mar 02 Javascript
JavaScript中switch语句的用法详解
Jun 03 Javascript
jQuery原型属性和原型方法详解
Jul 07 Javascript
深入学习JavaScript中的Rest参数和参数默认值
Jul 28 Javascript
jquery性能优化高级技巧
Aug 24 Javascript
JavaScript30 一个月纯 JS 挑战中文指南(英文全集)
Jul 23 Javascript
一步步教会你微信小程序的登录鉴权
Apr 09 Javascript
微信小程序之多列表的显示和隐藏功能【附源码】
Aug 06 Javascript
vuex 中插件的编写案例解析
Jun 10 Javascript
vue遍历对象中的数组取值示例
Nov 07 Javascript
vue结合el-upload实现腾讯云视频上传功能
Jul 01 Javascript
JavaScript文档对象模型DOM
Nov 20 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变量引用的面试题
2010/08/08 PHP
Yii框架参数化查询中IN查询只能查询一个的解决方法
2017/05/20 PHP
PHP实现模拟http请求的方法分析
2017/12/20 PHP
让input框实现类似百度的搜索提示(基于jquery事件监听)
2014/01/31 Javascript
js获取input长度并根据页面宽度设置其大小及居中对齐
2014/08/22 Javascript
javascript获取当前的时间戳的方法汇总
2015/07/26 Javascript
ajax分页效果(bootstrap模态框)
2017/01/23 Javascript
vuejs指令详解
2017/02/07 Javascript
JS获取浮动(float)元素的style.left值为空的快速解决办法
2017/02/19 Javascript
基于JS实现仿京东搜索栏随滑动透明度渐变效果
2017/07/10 Javascript
Easyui使用Dialog行内按钮布局的实例
2017/07/27 Javascript
微信小程序多列选择器range-key使用详解
2020/03/30 Javascript
vue组件实现文字居中对齐的方法
2017/08/23 Javascript
Angular2 组件间通过@Input @Output通讯示例
2017/08/24 Javascript
微信小程序promsie.all和promise顺序执行
2017/10/27 Javascript
在React 组件中使用Echarts的示例代码
2017/11/08 Javascript
jQuery实现点击旋转,再点击恢复初始状态动画效果示例
2018/12/11 jQuery
JS前端知识点总结之内置对象,日期对象和定时器相关操作
2019/07/05 Javascript
element-ui tree结构实现增删改自定义功能代码
2020/08/31 Javascript
使用python调用浏览器并打开一个网址的例子
2014/06/05 Python
解决python super()调用多重继承函数的问题
2019/06/26 Python
Python编写带选项的命令行程序方法
2019/08/13 Python
DataFrame.to_excel多次写入不同Sheet的实例
2019/12/02 Python
使用Django的JsonResponse返回数据的实现
2021/01/15 Python
在html5的Canvas上绘制椭圆的几种方法总结
2013/01/07 HTML / CSS
曼联官方网上商店:Manchester United Direct
2017/07/28 全球购物
Kneipp克奈圃美国官网:德国百年精油配方的传承
2018/02/07 全球购物
支教自我鉴定
2014/01/18 职场文书
合作意向书模板
2014/03/31 职场文书
小学校长先进事迹材料
2014/05/13 职场文书
2016教师学习党章心得体会
2016/01/15 职场文书
python获取淘宝服务器时间的代码示例
2021/04/22 Python
Python自动化爬取天眼查数据的实现
2021/06/15 Python
MySQL 亿级数据导入导出及迁移笔记
2021/06/18 MySQL
动态规划之使用备忘录来改进Javascript函数
2022/04/07 Javascript
Python Matplotlib绘制两个Y轴图像
2022/04/13 Python