js获取鼠标位置实例详解


Posted in Javascript onDecember 09, 2015

本文实例讲述了js获取鼠标位置的方法。分享给大家供大家参考,具体如下:

用 javascript 获取当前页面上鼠标(光标)位置在许多情况下都会用到,比如拖放,悬停提示(tooltip) 等等。当然,这里我们依然要面对浏览器的兼容问题,在不同的浏览器下,对这些相关的属性处理方式也不同,这里详细介绍了浏览器在处理这些属性时的差异和最终的解决方法。

Javascript代码如下:

<script type="text/javascript">
// 说明:获取鼠标位置
// 整理:http://www.codebit.cn
// 来源:http://www.webreference.com
function mousePosition(ev){
if(ev.pageX || ev.pageY){
return {x:ev.pageX, y:ev.pageY};
}
return {
x:ev.clientX + document.body.scrollLeft - document.body.clientLeft,
y:ev.clientY + document.body.scrollTop - document.body.clientTop
};
}
</script>

使用方式:

document.onmousemove = mouseMove;
function mouseMove(ev){
 ev = ev || window.event;
 var mousePos = mousePosition(ev);
}

关于代码的详细说明如下:

我们首先要声明一个 evnet 对象,无论移动、点击、按键等,都会激活一个 evnet ,在 Internet Explorer 里, event 是全局变量,会被存储在 window.event 里. 在 firefox 或者其他浏览器,event 会被相应的函数获取.当我们将mouseMove函数赋值于document.onmousemove,mouseMove 会获取鼠标移动事件。

为了让 ev 在所有浏览器下获取了 event 事件,在Firefox下"||window.event"将不起作用,因为ev已经有了赋值。在 MSIE 中 ev 为空,所以得到 window.event 。

因为在这篇文章中我们需要多次获取鼠标位置,所以我们设计了一个 mousePosition 函数,它包含一个参数 : event 。

因为我们要在 MSIE 和其他浏览器下运行,Firefox 和其他浏览器用 event.pageX 和 event.pageY 来表示鼠标相对于文档的位置,如果你有一个 500*500 的窗口并且你的鼠标在绝对中间,那么 pageX 和 pageY 的值都是 250,如果你向下滚动 500, 那么 pageY 将变成 750。

MSIE 正好相反,它使用 event.clientX 和 event.clientY 表示鼠标相当于窗口的位置,而不是文档。在同样的例子中,如果你向下滚动500,clientY 依然是 250,因此,我们需要添加 scrollLeft 和 scrollTop 这两个相对于文档的属性。最后,MSIE 中文档并不是从 0,0 开始,而是通常有一个小的边框(通常是 2 象素),边框的大小定义在 document.body.clientLeft 和 clientTop 中,我们也把这些加进去。

完成代码:

<script type="text/javascript">
// 说明:获取鼠标位置
// 整理:http://www.codebit.cn
// 来源:http://www.webreference.com
function mousePosition(ev){
   if(ev.pageX || ev.pageY){
     return {x:ev.pageX, y:ev.pageY};
   }
   return {
     x:ev.clientX + document.body.scrollLeft - document.body.clientLeft,
     y:ev.clientY + document.body.scrollTop - document.body.clientTop
   };
}
document.onmousemove = mouseMove;
function mouseMove(ev){
 ev = ev || window.event;
 var mousePos = mousePosition(ev);
   document.getElementByIdx('mouseXPosition').value = mousePos.x;
   document.getElementByIdx('mouseYPosition').value = mousePos.y;
}
</script>

希望本文所述对大家JavaScript程序设计有所帮助。

Javascript 相关文章推荐
由document.body和document.documentElement想到的
Apr 13 Javascript
浅说js变量
May 25 Javascript
JavaScript获取表格(table)当前行的值、删除行、增加行
Jul 03 Javascript
如何解决ligerUI布局时Center中的Tab高度大小
Nov 24 Javascript
理解Javascript文件动态加载
Jan 29 Javascript
Bootstrap基本样式学习笔记之表格(2)
Dec 07 Javascript
jQuery实现最简单实用的分秒倒计时
Feb 05 Javascript
微信小程序实战之上拉(分页加载)效果(2)
Apr 17 Javascript
bootstrap多层模态框滚动条消失的问题
Jul 21 Javascript
Angular 作用域scope的具体使用
Dec 11 Javascript
Node.js静态服务器的实现方法
Feb 28 Javascript
jQuery实现数字华容道小游戏(实例代码)
Jan 16 jQuery
JavaScript常用基础知识强化学习
Dec 09 #Javascript
AngularJS实现元素显示和隐藏的几个案例
Dec 09 #Javascript
谈谈AngularJs中的隐藏和显示
Dec 09 #Javascript
jquery插件ajaxupload实现文件上传操作
Dec 09 #Javascript
js实现卡片式项目管理界面UI设计效果
Dec 08 #Javascript
javascript如何写热点图
Dec 08 #Javascript
jQuery基于ajax()使用serialize()提交form数据的方法
Dec 08 #Javascript
You might like
Get或Post提交值的非法数据处理
2006/10/09 PHP
PHP var_dump遍历对象属性的函数与应用代码
2010/06/04 PHP
PHP attributes()函数讲解
2019/02/03 PHP
慎用 somefunction.prototype 分析
2009/06/02 Javascript
IE iframe的onload方法分析小结
2010/01/07 Javascript
js获取元素在浏览器中的绝对位置
2010/07/24 Javascript
javascript一个无懈可击的实例化XMLHttpRequest的方法
2010/10/13 Javascript
js与jquery中获取当前鼠标的x、y坐标位置的代码
2011/05/23 Javascript
学习JavaScript正则表达式
2015/11/13 Javascript
轻松实现javascript图片轮播特效
2016/01/13 Javascript
Highcharts 多个Y轴动态刷新数据的实现代码
2016/05/28 Javascript
jquery实现输入框实时输入触发事件代码
2016/12/21 Javascript
AngularJS创建一个上传照片的指令实例代码
2018/02/24 Javascript
简述JS浏览器的三种弹窗
2018/07/15 Javascript
Vue中Axios从远程/后台读取数据
2019/01/21 Javascript
JS设置自定义快捷键并实现图片上下左右移动
2019/10/17 Javascript
JavaScript Reflect Metadata实现详解
2019/12/12 Javascript
200行自定义python异步非阻塞Web框架
2017/03/15 Python
python实现微信远程控制电脑
2018/02/22 Python
Python使用wget实现下载网络文件功能示例
2018/05/31 Python
python实现点对点聊天程序
2018/07/28 Python
python+PyQT实现系统桌面时钟
2020/06/16 Python
Python学习笔记之pandas索引列、过滤、分组、求和功能示例
2019/06/03 Python
详解python深浅拷贝区别
2019/06/24 Python
Python识别验证码的实现示例
2020/09/30 Python
Python 远程开关机的方法
2020/11/18 Python
python 使用OpenCV进行简单的人像分割与合成
2021/02/02 Python
简历自荐信
2013/12/02 职场文书
模具设计与制造专业推荐信
2014/02/16 职场文书
房产委托公证书
2014/04/08 职场文书
行政管理专业求职信
2014/07/06 职场文书
领导欢迎词范文
2015/01/26 职场文书
货款欠条范本
2015/07/03 职场文书
幼儿园教师暑期培训心得体会
2016/01/09 职场文书
怎样写好演讲稿题目?
2019/08/21 职场文书
曾国藩励志经典名言37句,蕴含哲理
2019/10/14 职场文书