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 相关文章推荐
JS+XML 省份和城市之间的联动实现代码
Oct 14 Javascript
input 输入框内的输入事件详细分析
Mar 17 Javascript
js 实现打印网页中定义的部分内容的代码
Apr 01 Javascript
JavaScript中的迭代器和生成器详解
Oct 29 Javascript
深入探寻javascript定时器
Jan 02 Javascript
JS两个数组比较,删除重复值的巧妙方法(推荐)
Jun 03 Javascript
使用BootStrap实现用户登录界面UI
Aug 10 Javascript
JS对象是否拥有某属性如何判断
Feb 03 Javascript
Angular实现跨域(搜索框的下拉列表)
Feb 16 Javascript
ECMAScript6--解构
Mar 30 Javascript
vue使用element-ui的el-input监听不了回车事件的解决方法
Jan 12 Javascript
JS左右无缝轮播功能完整实例
May 16 Javascript
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
Zend Framework实现多文件上传功能实例
2016/03/21 PHP
做网页的一些技巧
2007/02/01 Javascript
jquery1.4后 jqDrag 拖动 不可用
2010/02/06 Javascript
jquery 插件开发 extjs中的extend用法小结
2013/01/04 Javascript
一个JS的日期格式化算法示例
2013/07/31 Javascript
js设置文本框中焦点位置在最后的示例代码(简单实用)
2014/03/04 Javascript
JavaScript日期时间格式化函数分享
2014/05/05 Javascript
JS表单验证方法实例小结【电话、身份证号、Email、中文、特殊字符、身份证号等】
2017/02/14 Javascript
从vue基础开始创建一个简单的增删改查的实例代码(推荐)
2018/02/11 Javascript
ES6 更易于继承的类语法的使用
2019/02/11 Javascript
微信小程序wxml列表渲染原理解析
2019/11/27 Javascript
[53:15]Newbee vs Pain 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
[49:35]KG vs SECRET 2019国际邀请赛小组赛 BO2 第一场 8.16
2019/08/19 DOTA
Python(Tornado)模拟登录小米抢手机
2013/11/12 Python
Python统计列表中的重复项出现的次数的方法
2014/08/18 Python
python通过get,post方式发送http请求和接收http响应的方法
2015/05/26 Python
Python中list查询及所需时间计算操作示例
2018/06/21 Python
Python使用一行代码获取上个月是几月
2018/08/30 Python
记录Python脚本的运行日志的方法
2019/06/05 Python
简单了解django orm中介模型
2019/07/30 Python
python 队列基本定义与使用方法【初始化、赋值、判断等】
2019/10/24 Python
python实现串口通信的示例代码
2020/02/10 Python
python实现提取COCO,VOC数据集中特定的类
2020/03/10 Python
详解HTML5中ol标签的用法
2015/09/08 HTML / CSS
英国现代、当代和设计师家具店:Furntastic
2020/07/18 全球购物
Nike俄罗斯官方网站:Nike RU
2021/03/05 全球购物
酒店总经理职务说明书
2014/02/26 职场文书
2014年教研活动总结范文
2014/04/26 职场文书
考试保密承诺书
2014/08/30 职场文书
乡镇四风对照检查材料
2014/08/31 职场文书
工作失误检讨书(3篇)
2014/10/11 职场文书
2014旅游局党组书记党建工作汇报材料
2014/11/02 职场文书
2015年世界环境日演讲稿
2015/03/18 职场文书
企业安全隐患排查治理制度
2015/08/05 职场文书
Python中requests做接口测试的方法
2021/05/30 Python
Redis 的查询很快的原因解析及Redis 如何保证查询的高效
2022/03/16 Redis