基于JavaScript获取鼠标位置的各种方法


Posted in Javascript onDecember 16, 2015

在一些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 相关文章推荐
前端开发的开始---基于面向对象的Ajax类
Sep 17 Javascript
基于jQuery的试卷自动排版系统实现代码
Jan 06 Javascript
jQuery实现contains方法不区分大小写的方法
Feb 13 Javascript
AngularJS学习笔记之TodoMVC的分析
Feb 22 Javascript
JavaScript简单实现鼠标移动切换图片的方法
Feb 23 Javascript
三种Node.js写文件的方式
Mar 08 Javascript
微信小程序 循环及嵌套循环的使用总结
Sep 26 Javascript
Scala解析Json字符串的实例详解
Oct 11 Javascript
JS实现的视频弹幕效果示例
Aug 17 Javascript
详解vue几种主动刷新的方法总结
Feb 19 Javascript
微信小程序之onLaunch与onload异步问题详解
Mar 28 Javascript
Js和VUE实现跑马灯效果
May 25 Javascript
javascript基于prototype实现类似OOP继承的方法
Dec 16 #Javascript
javascript数组克隆简单实现方法
Dec 16 #Javascript
Perl Substr()函数及函数的应用
Dec 16 #Javascript
javascript针对不确定函数的执行方法
Dec 16 #Javascript
深入浅析JavaScript字符串操作方法 slice、substr、substring及其IE兼容性
Dec 16 #Javascript
js如何判断输入字符串长度
Dec 16 #Javascript
常常会用到的截取字符串substr()、substring()、slice()方法详解
Dec 16 #Javascript
You might like
在PHP中使用灵巧的体系结构
2006/10/09 PHP
关于mysql 字段的那个点为是定界符
2007/01/15 PHP
phpmyadmin中配置文件现在需要绝密的短语密码的解决方法
2007/02/11 PHP
PHP将英文数字转换为阿拉伯数字实例讲解
2019/01/28 PHP
拖动一个HTML元素
2006/12/22 Javascript
jQuery 源码分析笔记(3) Deferred机制
2011/06/19 Javascript
jquery事件机制扩展插件 jquery鼠标右键事件。
2011/12/26 Javascript
JQuery实现简单验证码提示解决方案
2012/12/20 Javascript
jquery设置元素的readonly和disabled的写法
2013/09/22 Javascript
jquery删除数据记录时的弹出提示效果
2014/05/06 Javascript
百度UEditor编辑器如何关闭抓取远程图片功能
2015/03/03 Javascript
深入浅析javascript立即执行函数
2015/10/23 Javascript
jQuery实现标题有打字效果的焦点图代码
2015/11/16 Javascript
Vue.js中数组变动的检测详解
2016/10/12 Javascript
百度多文件异步上传控件webuploader基本用法解析
2016/11/07 Javascript
jQuery EasyUI Accordion可伸缩面板组件使用详解
2017/02/28 Javascript
Vue组件化开发思考
2018/02/02 Javascript
微信小程序文章详情页面实现代码
2018/09/10 Javascript
vue路由导航守卫和请求拦截以及基于node的token认证的方法
2019/04/07 Javascript
微信小程序-可移动菜单的实现过程详解
2019/06/24 Javascript
JavaScript 继承 封装 多态实现及原理详解
2019/07/29 Javascript
vue数据响应式原理知识点总结
2020/02/16 Javascript
vue ssr+koa2构建服务端渲染的示例代码
2020/03/23 Javascript
[01:04:30]Fnatic vs Mineski 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/18 DOTA
Python random模块常用方法
2014/11/03 Python
Python函数式编程指南(二):从函数开始
2015/06/24 Python
在scrapy中使用phantomJS实现异步爬取的方法
2018/12/17 Python
python 获取页面表格数据存放到csv中的方法
2018/12/26 Python
pandas去除重复列的实现方法
2019/01/29 Python
python简单实现AES加密和解密
2019/03/28 Python
关于初始种子自动选取的区域生长实例(python+opencv)
2020/01/16 Python
一款利用纯css3实现的win8加载动画的实例分析
2014/12/11 HTML / CSS
践行党的群众路线心得体会
2014/11/05 职场文书
离婚协议书怎么写的
2014/12/14 职场文书
详解Java实现设计模式之责任链模式
2021/06/23 Java/Android
微信小程序scroll-view不能左右滑动问题的解决方法
2021/07/09 Javascript