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 相关文章推荐
jquery lazyload延迟加载技术的实现原理分析
Jan 24 Javascript
js渐变显示渐变消失示例代码
Aug 01 Javascript
jquery获取URL中参数解决中文乱码问题的两种方法
Dec 18 Javascript
原生JS实现LOADING效果
Mar 16 Javascript
jquery合并表格中相同文本的相邻单元格
Jul 17 Javascript
jQuery实现的自定义滚动条实例详解
Sep 20 Javascript
JavaScript实现页面中录音功能的方法
Jun 04 Javascript
微信小程序中如何使用flyio封装网络请求
Jul 03 Javascript
如何自定义微信小程序tabbar上边框的颜色
Jul 09 Javascript
微信小程序如何实现精确的日期时间选择器
Jan 21 Javascript
详解JavaScript中分解数字的三种方法
Jan 05 Javascript
详解uniapp的全局变量实现方式
Jan 11 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
从网上搜到的phpwind 0day的代码
2006/12/07 PHP
php 在文件指定行插入数据的代码
2010/05/08 PHP
PHP下escape解码函数的实现方法
2010/08/08 PHP
phpword插件导出word文件时中文乱码问题处理方案
2014/08/19 PHP
PHP 与 UTF-8 的最佳实践详细介绍
2017/01/04 PHP
redirect_uri参数错误的解决方法(必看)
2017/02/16 PHP
PHP数据分析引擎计算余弦相似度算法示例
2017/08/08 PHP
Javascript之旅 对象的原型链之由来
2010/08/25 Javascript
javascript操作table(insertRow,deleteRow,insertCell,deleteCell方法详解)
2013/12/16 Javascript
JavaScript作用域示例详解
2016/07/07 Javascript
JS 滚动事件window.onscroll与position:fixed写兼容IE6的回到顶部组件
2016/10/10 Javascript
js+html5实现半透明遮罩层弹框效果
2020/08/24 Javascript
浅析Javascript中双等号(==)隐性转换机制
2017/10/27 Javascript
微信小程序自动客服功能
2017/11/02 Javascript
node.js中express模块创建服务器和http模块客户端发请求
2019/03/06 Javascript
如何解决js函数防抖、节流出现的问题
2019/06/17 Javascript
简单了解JavaScript作用域
2020/07/31 Javascript
Jquery 获取相同NAME 或者id删除行操作
2020/08/24 jQuery
微信小程序实现页面左右滑动
2020/11/16 Javascript
js属性对象的hasOwnProperty方法的使用
2021/02/05 Javascript
python网络编程之数据传输UDP实例分析
2015/05/20 Python
Python实现模拟时钟代码推荐
2015/11/08 Python
多视角3D可旋转的HTML5 Logo动画
2016/03/02 HTML / CSS
法国时尚童装网站:Melijoe
2016/08/10 全球购物
FitFlop美国官网:英国符合人体工学的鞋类品牌
2018/10/05 全球购物
Burt’s Bees英国官网:世界领先的天然个人护理品牌
2020/08/17 全球购物
大学生个人总结的自我评价
2013/10/05 职场文书
军训心得体会
2013/12/31 职场文书
《草虫的村落》教学反思
2014/02/16 职场文书
高三毕业寄语
2014/04/10 职场文书
公开承诺书格式
2014/05/21 职场文书
团员自我评价范文
2015/03/10 职场文书
初中政教处工作总结
2015/08/12 职场文书
教师正风肃纪心得体会
2016/01/15 职场文书
用Python将库打包发布到pypi
2021/04/13 Python
react如何快速设置文件路径别名
2021/04/28 Javascript