基于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 相关文章推荐
html组件不可输入(只读)同时任何组件都有效
Apr 01 Javascript
JavaScript实现俄罗斯方块游戏过程分析及源码分享
Mar 23 Javascript
jQuery增加自定义函数的方法
Jul 18 Javascript
JavaScript添加随滚动条滚动窗体的方法
Feb 23 Javascript
深入解析jQuery中Deferred的deferred.promise()方法
May 03 Javascript
浅析JavaScript中的对象类型Object
May 26 Javascript
vue分页组件table-pagebar使用实例解析
Nov 15 Javascript
angularjs利用directive实现移动端自定义软键盘的示例
Sep 20 Javascript
vue中本地静态图片路径写法
Mar 06 Javascript
详解用vue2.x版本+adminLTE开源框架搭建后台应用模版
Mar 15 Javascript
基于vue-cli3和element实现登陆页面
Nov 13 Javascript
html实现随机点名器的示例代码
Apr 02 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
解析dedeCMS验证码的实现代码
2013/06/07 PHP
Yaf框架封装的MySQL数据库操作示例
2019/03/06 PHP
laravel配置Redis多个库的实现方法
2019/04/10 PHP
PHP中的自动加载操作实现方法详解
2019/08/06 PHP
window.location.hash 使用说明
2010/11/08 Javascript
js 函数调用模式小结
2011/12/26 Javascript
用javascript为页面添加天气显示实现思路及代码
2013/12/02 Javascript
jQuery选择id属性带有点符号元素的方法
2015/03/17 Javascript
jquery不常用方法汇总
2015/07/26 Javascript
JavaScript设置、获取、清除单值和多值cookie的方法
2015/11/17 Javascript
Bootstrap开发实战之响应式轮播图
2016/06/02 Javascript
javascript之Boolean类型对象
2016/06/07 Javascript
JavaScript中无法通过div.style.left获取值的解决方法
2017/02/19 Javascript
完美实现js选项卡切换效果(二)
2017/03/08 Javascript
Bootstrap响应式导航由768px变成992px的实现代码
2017/06/15 Javascript
AngularJS常见过滤器用法实例总结
2017/07/06 Javascript
JavaScript遍历数组的三种方法map、forEach与filter实例详解
2019/02/27 Javascript
Vue编写可显示周和月模式的日历 Vue自定义日历内容的显示
2019/06/26 Javascript
微信小程序 腾讯地图SDK 获取当前地址实现解析
2019/08/12 Javascript
vue中使用vee-validator完成表单校验方案
2019/11/01 Javascript
浅析Python基础-流程控制
2016/03/18 Python
Linux RedHat下安装Python2.7开发环境
2017/05/20 Python
python多进程控制学习小结
2018/10/31 Python
Django中使用Celery的方法示例
2018/11/29 Python
python批量合成bilibili的m4s缓存文件为MP4格式 ver2.5
2020/12/01 Python
英国和爱尔兰最大的地毯零售商:Kukoon
2018/12/17 全球购物
最好的商品表达自己:Cafepress
2019/09/04 全球购物
销售人员自我评价
2014/02/01 职场文书
中职生自荐信范文
2014/06/15 职场文书
党在我心中演讲稿
2014/09/02 职场文书
二手车交易协议书标准版
2014/11/16 职场文书
红色革命电影观后感
2015/06/18 职场文书
《假如》教学反思
2016/02/17 职场文书
动画《朋友游戏》公开佐藤友生绘制的开播纪念绘
2022/04/06 日漫
Java 多态分析
2022/04/26 Java/Android
Linux中一对多配置日志服务器的详细步骤
2022/07/23 Servers