基于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 相关文章推荐
jQuery 入门讲解1
Apr 15 Javascript
js自动生成对象的属性示例代码
Oct 28 Javascript
javascript生成随机颜色示例代码
May 05 Javascript
JavaScript学习笔记之数组求和方法
Mar 23 Javascript
深入理解事件冒泡(Bubble)和事件捕捉(capture)
May 28 Javascript
详解JavaScript模块化开发
Dec 04 Javascript
jQuery实现文字自动横移
Jan 08 Javascript
原生js 封装get ,post, delete 请求的实例
Aug 11 Javascript
vue cli3.0 引入eslint 结合vscode使用
May 27 Javascript
jQuery实现简易QQ聊天框
Feb 10 jQuery
浅谈vue使用axios的回调函数中this不指向vue实例,为undefined
Sep 21 Javascript
微信小程序实现可拖动悬浮图标(包括按钮角标的实现)
Dec 29 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程序员编程注意事项
2008/04/10 PHP
php 删除cookie和浏览器重定向
2009/03/16 PHP
Linux下创建nginx脚本-start、stop、reload…
2014/08/03 PHP
从零开始学YII2框架(五)快速生成代码工具 Gii 的使用
2014/08/20 PHP
基于jquery的inputlimiter 实现字数限制功能
2010/05/30 Javascript
javascript中input中readonly和disabled区别介绍
2012/10/23 Javascript
兼容IE和FF的图片上传前预览js代码
2013/05/28 Javascript
js修改input的type属性问题探讨
2013/10/12 Javascript
js对字符的验证方法汇总
2015/02/04 Javascript
js获取元素的外链样式的简单实现方法
2016/06/06 Javascript
jQuery实现手机版页面翻页效果的简单实例
2016/10/05 Javascript
微信小程序 使用picker封装省市区三级联动实例代码
2016/10/28 Javascript
使用Browserify来实现CommonJS的浏览器加载方法
2017/05/14 Javascript
mongoose设置unique不生效问题的解决及如何移除unique的限制
2017/11/07 Javascript
使用async、enterproxy控制并发数量的方法详解
2018/01/02 Javascript
JS实现的抛物线运动效果示例
2018/01/30 Javascript
Angular5.0 子组件通过service传递值给父组件的方法
2018/07/13 Javascript
Vuex 在Vue 组件中获得Vuex 状态state的方法
2018/08/27 Javascript
jQuery实现购物车全功能
2021/01/11 jQuery
详解Vue3.0 + TypeScript + Vite初体验
2021/02/22 Vue.js
深入理解Python中的super()方法
2017/11/20 Python
PyCharm+Qt Designer+PyUIC安装配置教程详解
2019/06/13 Python
Python Print实现在输出中插入变量的例子
2019/12/25 Python
Python 数据分析之逐块读取文本的实现
2020/12/14 Python
通过python-pptx模块操作ppt文件的方法
2020/12/26 Python
HTML5中的网络存储实现方式
2020/04/28 HTML / CSS
圣彼得堡鲜花配送:Semicvetic
2020/09/15 全球购物
竞选班长自荐书范文
2014/03/09 职场文书
库房保管员岗位职责
2014/04/07 职场文书
3分钟演讲稿
2014/04/30 职场文书
人大调研汇报材料
2014/08/14 职场文书
运动会主持人开幕词
2016/03/04 职场文书
python实现图片九宫格分割的示例
2021/04/25 Python
jupyter notebook保存文件默认路径更改方法汇总(亲测可以)
2021/06/09 Python
详细聊聊浏览器是如何看闭包的
2021/11/11 Javascript
JS函数式编程实现XDM一
2022/06/16 Javascript