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 相关文章推荐
键盘控制事件应用教程大全
Nov 24 Javascript
JavaScript 打地鼠游戏代码说明
Oct 12 Javascript
JavaScript实现点击按钮复制指定区域文本(推荐)
Nov 25 Javascript
Angular.js实现注册系统的实例详解
Dec 18 Javascript
js 输入框 正则表达式(菜鸟必看教程)
Feb 19 Javascript
Vue中添加过渡效果的方法
Mar 16 Javascript
vue之数据交互实例代码
Jun 16 Javascript
element-ui中的select下拉列表设置默认值方法
Aug 24 Javascript
vue-router的HTML5 History 模式设置
Sep 08 Javascript
小程序如何构建骨架屏
May 29 Javascript
超详细的5个Shell脚本实例分享(值得收藏)
Aug 15 Javascript
VUE子组件向父组件传值详解(含传多值及添加额外参数场景)
Sep 01 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
一些操作和快捷键的理解和讨论
2020/03/04 星际争霸
php cache类代码(php数据缓存类)
2010/04/15 PHP
Pain 全世界最小最简单的PHP模板引擎 (普通版)
2011/10/23 PHP
php基于openssl的rsa加密解密示例
2016/07/11 PHP
Extjs单独定义各组件的实例代码
2013/06/25 Javascript
Javascript弹出窗口的各种方法总结
2013/11/11 Javascript
jquery将一个表单序列化为一个对象的方法
2013/12/02 Javascript
javascript事件冒泡实例分析
2015/05/13 Javascript
超精准的javascript验证身份证号的具体实现方法
2015/11/18 Javascript
JavaScript实现给定时间相加天数的方法
2016/01/25 Javascript
js实现表单及时验证功能 用户信息立即验证
2016/09/13 Javascript
Bootstrap优化站点资源、响应式图片、传送带使用详解3
2016/10/14 Javascript
基于Bootstrap仿淘宝分页控件实现代码
2016/11/07 Javascript
JS实现获取来自百度,Google,soso,sogou关键词的方法
2016/12/21 Javascript
原生js实现回复评论功能
2017/01/18 Javascript
Vue安装浏览器开发工具的步骤详解
2019/05/12 Javascript
vue swipe自定义组件实现轮播效果
2019/07/03 Javascript
javascript中this的用法实践分析
2019/07/29 Javascript
详解JWT token心得与使用实例
2019/08/02 Javascript
vue 监听 Treeselect 选择项的改变操作
2020/08/31 Javascript
vue-router定义元信息meta操作
2020/12/07 Vue.js
Python的标准模块包json详解
2017/03/13 Python
Numpy中转置transpose、T和swapaxes的实例讲解
2018/04/17 Python
opencv python 图像去噪的实现方法
2018/08/31 Python
Python实现手机号自动判断男女性别(实例解析)
2019/12/22 Python
为什么称python为胶水语言
2020/06/16 Python
Python3爬虫关于代理池的维护详解
2020/07/30 Python
浅析python 字典嵌套
2020/09/29 Python
最新PyCharm从安装到PyCharm永久激活再到PyCharm官方中文汉化详细教程
2020/11/17 Python
CSS3弹性伸缩布局之box布局
2016/07/12 HTML / CSS
自我推荐书
2013/12/04 职场文书
母亲节寄语大全
2015/02/27 职场文书
商场广播稿范文
2015/08/19 职场文书
python的变量和简单数字类型详解
2021/09/15 Python
MySQL添加索引特点及优化问题
2022/07/23 MySQL
uniapp开发打包多端应用完整方法指南
2022/12/24 Javascript