基于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+css使DIV始终居于屏幕中间 左下 左上 右上 右下的代码集合
Mar 10 Javascript
jQuery实现简单隔行变色的方法
Feb 20 Javascript
js创建jsonArray传输至后台及后台全面解析
Apr 11 Javascript
如何用JavaScript实现动态修改CSS样式表
May 20 Javascript
JavaScript中instanceof运算符的使用示例
Jun 08 Javascript
JS中append字符串包含onclick无效传递参数失败的解决方案
Dec 26 Javascript
layui.js实现的表单验证功能示例
Nov 15 Javascript
浅谈MUI框架中加载外部网页或服务器数据的方法
Jan 31 Javascript
webpack本地开发环境无法用IP访问的解决方法
Mar 20 Javascript
小程序实现单选多选功能
Nov 04 Javascript
JS实现电商商品展示放大镜特效
Jan 07 Javascript
vue实现在线学生录入系统
May 30 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中的UNICODE 编码与解码
2013/06/29 PHP
ThinkPHP调用百度翻译类实现在线翻译
2014/06/26 PHP
php实现scws中文分词搜索的方法
2015/12/25 PHP
Linux基于php-fpm模式的lamp搭建phpmyadmin的方法
2018/10/25 PHP
Ajax+Jpgraph实现的动态折线图功能示例
2019/02/11 PHP
php利用array_search与array_column实现二维数组查找
2019/07/08 PHP
jQuery MD5加密实现代码
2010/03/15 Javascript
可在线编辑网页文字效果代码(单击)
2013/03/02 Javascript
Javascript中 关于prototype属性实现继承的原理图
2013/04/16 Javascript
用JS在浏览器中创建下载文件
2014/03/05 Javascript
jQuery过滤选择器:not()方法使用介绍
2014/04/20 Javascript
jQuery+easyui中的combobox实现下拉框特效
2015/02/27 Javascript
AngularJS教程之环境设置
2016/08/16 Javascript
分享一个精简的vue.js 图片lazyload插件实例
2017/03/13 Javascript
Linux CentOS系统下安装node.js与express的方法
2017/04/01 Javascript
解决修复npm安装全局模块权限的问题
2018/05/17 Javascript
解决vue的变量在settimeout内部效果失效的问题
2018/08/30 Javascript
Vue实现点击箭头上下移动效果
2020/06/11 Javascript
Python中模拟enum枚举类型的5种方法分享
2014/11/22 Python
python中实现迭代器(iterator)的方法示例
2017/01/19 Python
Python实现将SQLite中的数据直接输出为CVS的方法示例
2017/07/13 Python
python中利用队列asyncio.Queue进行通讯详解
2017/09/10 Python
Django使用paginator插件实现翻页功能的实例
2018/10/24 Python
浅谈pytorch grad_fn以及权重梯度不更新的问题
2019/08/20 Python
如何在sublime编辑器中安装python
2020/05/20 Python
python 5个实用的技巧
2020/09/27 Python
使用CSS3美化HTML表单的技巧演示
2016/05/17 HTML / CSS
卫生巾广告词
2014/03/18 职场文书
新闻专业毕业生英文求职信
2014/03/19 职场文书
房屋租赁协议书范本
2014/04/10 职场文书
幼儿园教师演讲稿
2014/05/06 职场文书
2014年节能工作总结
2014/12/18 职场文书
小学家庭教育心得体会
2016/01/14 职场文书
通过T-SQL语句创建游标与实现数据库加解密功能
2022/03/16 SQL Server
排查Tomcat进程假死的问题
2022/05/06 Servers
Python使用Beautiful Soup(BS4)库解析HTML和XML
2022/06/05 Python