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 相关文章推荐
Highslide.js是一款基于js实现的网页中图片展示插件
Mar 30 Javascript
一些mootools的学习资源
Feb 07 Javascript
js 禁用只读文本框获得焦点时的退格键
Apr 25 Javascript
dojo学习第二天 ajax异步请求之绑定列表
Aug 29 Javascript
JavaScript中使用Callback控制流程介绍
Mar 16 Javascript
jquery实现向下滑出的二级导航下滑菜单效果
Aug 25 Javascript
Bootstrap每天必学之按钮(Button)插件
Apr 25 Javascript
如何解决jQuery EasyUI 已打开Tab重新加载问题
Dec 19 Javascript
深入探究angular2 UI组件之primeNG用法
Jul 26 Javascript
vue2导航根据路由传值,而改变导航内容的实例
Nov 10 Javascript
解决IE11 vue +webpack 项目中数据更新后页面没有刷新的问题
Sep 25 Javascript
vue遍历对象中的数组取值示例
Nov 07 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
PHP编程实现脚本异步执行的方法
2017/08/09 PHP
JS网络游戏-(模拟城市webgame)提供的一些例子下载
2007/10/14 Javascript
Jquery+ajax请求data显示在GridView上(asp.net)
2010/08/27 Javascript
Javascript中匿名函数的多种调用方式总结
2013/12/06 Javascript
Javascript浮点数乘积运算出现多位小数的解决方法
2014/02/17 Javascript
js创建表单元素并使用submit进行提交
2014/08/14 Javascript
JavaScript代码轻松实现网页内容禁止复制(代码简单)
2015/10/23 Javascript
使用node+vue.js实现SPA应用
2016/01/28 Javascript
JavaScript仿flash遮罩动画效果
2016/06/15 Javascript
第九篇Bootstrap导航菜单创建步骤详解
2016/06/21 Javascript
js控住DOM实现发布微博效果
2016/08/30 Javascript
微信小程序 地图(map)实例详解
2016/11/16 Javascript
jquery——九宫格大转盘抽奖实例
2017/01/16 Javascript
vue.js中过滤器的使用教程
2017/06/08 Javascript
JS实现的抛物线运动效果示例
2018/01/30 Javascript
JavaScript设计模式之享元模式实例详解
2019/01/17 Javascript
解决在Vue中使用axios用form表单出现的问题
2019/10/30 Javascript
javascript实现贪吃蛇经典游戏
2020/04/10 Javascript
以Flask为例讲解Python的框架的使用方法
2015/04/29 Python
python获取文件扩展名的方法
2015/07/06 Python
浅析Python中元祖、列表和字典的区别
2016/08/17 Python
Python读取word文本操作详解
2018/01/22 Python
Redis使用watch完成秒杀抢购功能的代码
2018/05/07 Python
python读取并写入mat文件的方法
2019/07/12 Python
Python使用正则表达式分割字符串的实现方法
2019/07/16 Python
python 抓包保存为pcap文件并解析的实例
2019/07/23 Python
python将unicode和str互相转化的实现
2020/05/11 Python
python 爬虫如何正确的使用cookie
2020/10/27 Python
花园仓库建筑:Garden Buildings Direct
2018/02/16 全球购物
土木工程专业自荐信
2013/10/04 职场文书
努力学习演讲稿
2014/05/10 职场文书
客户付款通知书
2015/04/23 职场文书
小学班主任工作随笔
2015/08/15 职场文书
小学语文教师研修日志
2015/11/13 职场文书
二年级作文之动物作文
2019/11/13 职场文书
再也不用花钱买漫画!Python爬取某漫画的脚本及源码
2021/06/09 Python