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 相关文章推荐
一个刚完成的layout(拖动流畅,不受iframe影响)
Aug 17 Javascript
jQuery .tmpl(), .template()学习资料小结
Jul 18 Javascript
Javascript 异步加载详解(浏览器在javascript的加载方式)
May 20 Javascript
js函数获取html中className所在的内容并去除标签
Sep 08 Javascript
js全屏显示显示代码的三种方法
Nov 11 Javascript
textarea焦点的用法实现获取焦点清空失去焦点提示效果
May 19 Javascript
js 弹出对话框(遮罩)透明,可拖动的简单实例
Jul 11 Javascript
微信小程序与php 实现微信支付的简单实例
Jun 23 Javascript
Angular.js自动化测试之protractor详解
Jul 07 Javascript
node使用Koa2搭建web项目的方法
Oct 17 Javascript
vue之浏览器存储方法封装实例
Mar 15 Javascript
js for终止循环 跳出多层循环
Oct 04 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
PHP6 中可能会出现的新特性预览
2014/04/04 PHP
destoon实现会员商铺中指定会员或会员组投放广告的方法
2014/08/21 PHP
PHP快速生成各种信息提示框的方法
2016/02/03 PHP
php获取数据库结果集方法(推荐)
2017/06/01 PHP
JavaScript方法和技巧大全
2006/12/27 Javascript
HTA版JSMin(省略修饰语若干)基于javascript语言编写
2009/12/24 Javascript
jQuery学习笔记(2)--用jquery实现各种模态提示框代码及项目构架
2013/04/08 Javascript
angularjs中的单元测试实例
2014/12/06 Javascript
jQuery中:disabled选择器用法实例
2015/01/04 Javascript
javascript的switch用法注意事项分析
2015/02/02 Javascript
js实现点击图片改变页面背景图的方法
2015/02/28 Javascript
Bootstrap媒体对象的实现
2016/05/01 Javascript
一步一步封装自己的HtmlHelper组件BootstrapHelper(三)
2016/09/14 Javascript
JS实现匀速与减速缓慢运动的动画效果封装示例
2018/08/27 Javascript
vue引入axios同源跨域问题
2018/09/27 Javascript
layui的面包屑或者表单不显示的解决方法
2019/09/05 Javascript
使用Layui搭建后台管理界面的操作方法
2019/09/20 Javascript
Vue中qs插件的使用详解
2020/02/07 Javascript
OpenLayers3实现鼠标移动显示坐标
2020/09/25 Javascript
ES6学习教程之Promise用法详解
2020/11/22 Javascript
[02:25]DOTA2英雄基础教程 虚空假面
2014/01/02 DOTA
[39:00]Optic vs VP 2018国际邀请赛淘汰赛BO3 第三场 8.24
2018/08/25 DOTA
[01:38]完美世界DOTA2联赛(PWL)宣传片:第一站
2020/10/26 DOTA
[52:03]DOTA2-DPC中国联赛 正赛 Ehome vs iG BO3 第三场 1月31日
2021/03/11 DOTA
python 自动提交和抓取网页
2009/07/13 Python
跟老齐学Python之从格式化表达式到方法
2014/09/28 Python
TensorFlow实现Batch Normalization
2018/03/08 Python
Python对切片命名的实现方法
2018/10/16 Python
python栈的基本定义与使用方法示例【初始化、赋值、入栈、出栈等】
2019/10/24 Python
Python 3.8 新功能大揭秘【新手必学】
2020/02/05 Python
英国Lookfantastic中文网站:护肤品美妆美发购物(英国直邮)
2020/04/27 全球购物
总经理职责
2013/12/22 职场文书
《蓝色的树叶》教学反思
2014/02/24 职场文书
捐资助学倡议书
2014/04/15 职场文书
在HTML5 localStorage中存储对象的示例代码
2021/04/21 Javascript
解决vue自定义组件@click点击失效问题
2022/04/30 Vue.js