JavaScript取得鼠标绝对位置程序代码介绍


Posted in Javascript onSeptember 16, 2012

首先不同浏览器中event位置属性的分析:

1. IE的event.x,event.y是以事件触发元素的父元素外界为参考点(不包括滚动距离)
2. Firefox的event.pageX,event.pageY是以body元素为参考点(包括滚动距离)
3. event.clientX,event.clientY以浏览器左上角为参考点(不包括滚动距离)
4. IE的event.offsetX,event.offsetY和Firefox的event.layerX,event.layerY以事件触发元素内界的左上角为参考点(包括滚动距离,当有边框时,可能出现负数)

然后是DOM对象高度属性分析

1. scrollHeight: 获取对象的滚动高度
2. scrollLeft:设置或获取位于对象左边界和窗口中目前可见内容的最左端之间的距离
3. scrollTop:设置或获取位于对象最顶端和窗口中可见内容的最顶端之间的距离
4. scrollWidth:获取对象的滚动宽度
5. offsetHeight:获取对象相对于版面或由父坐标 offsetParent 属性指定的父坐标的高度
6. offsetLeft:获取对象相对于版面或由 offsetParent 属性指定的父坐标的计算左侧位置
7. offsetTop:获取对象相对于版面或由 offsetTop 属性指定的父坐标的计算顶端位置

有了以上分析,写出两个取位置的函数

// 取X轴位置 
function mouseX(evt) { 
// firefox 
if (evt.pageX) return evt.pageX; 
// IE 
else if (evt.clientX) 
return evt.clientX + (document.documentElement.scrollLeft ? document.documentElement.scrollLeft : document.body.scrollLeft); 
else return null; 
} 
// 取Y轴位置 
function mouseY(evt) { 
// firefox 
if (evt.pageY) return evt.pageY; 
// IE 
else if (evt.clientY) 
return evt.clientY + (document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop); 
else return null; 
}

获取Html控件的绝对位置的两种方法
function getAbsPoint(e){ 
var x = e.offsetLeft, y = e.offsetTop; 
while (e = e.offsetParent) { 
x += e.offsetLeft; 
y += e.offsetTop; 
} 
alert("x:" + x + "," + "y:" + y); 
} 
function getAbsPoint(obj){ 
var x, y; 
oRect = obj.getBoundingClientRect(); 
x = oRect.left 
y = oRect.top 
alert("(" + x + "," + y + ")") 
}

注意

document.body.scrollLeft,document.body.scrollTop只用于IE6以前的版本,在IE6中,对没有宣告 DOCTYPE,或者宣告的是transitional DOCTYPE,那么IE6将使用document.documentElement.scrollLeft 来获取鼠标的绝对位置

Javascript 相关文章推荐
百度Popup.js弹出框进化版 拖拽小框架发布 兼容IE6/7/8,Firefox,Chrome
Apr 13 Javascript
chrome下jq width()方法取值为0的解决方法
May 26 Javascript
JavaScript作用域链示例分享
May 27 Javascript
Backbone.js的一些使用技巧
Jul 01 Javascript
Bootstrap实现弹性搜索框
Jul 11 Javascript
js select实现省市区联动选择
Apr 17 Javascript
js验证手机号、密码、短信验证码代码工具类
Jun 24 Javascript
详解vue2父组件传递props异步数据到子组件的问题
Jun 29 Javascript
微信小程序实现的五星评价功能示例
Apr 25 Javascript
layui异步加载table表中某一列数据的例子
Sep 16 Javascript
微信小程序实现音乐播放器
Nov 20 Javascript
记一次react前端项目打包优化的方法
Mar 30 Javascript
JavaScript高级程序设计 阅读笔记(二十一) JavaScript中的XML
Sep 14 #Javascript
IE6-IE9不支持table.innerHTML的解决方法分享
Sep 14 #Javascript
javascript时区函数介绍
Sep 14 #Javascript
推荐40个简单的 jQuery 导航插件和教程(下篇)
Sep 14 #Javascript
推荐40款强大的 jQuery 导航插件和教程(上篇)
Sep 14 #Javascript
基于JQuery的一句话搞定手风琴菜单
Sep 14 #Javascript
JQuery select控件的相关操作实现代码
Sep 14 #Javascript
You might like
mysq GBKl乱码
2006/11/28 PHP
Yii实现自动加载类地图的方法
2015/04/01 PHP
php实现评论回复删除功能
2017/05/23 PHP
PHP中常见的密码处理方式和建议总结
2018/10/14 PHP
用js实现层随着内容大小动态渐变改变 推荐
2009/12/19 Javascript
ExtJS 工具栏 分页事件参数
2010/03/05 Javascript
js下通过prototype扩展实现indexOf的代码
2010/12/08 Javascript
jQuery创建插件的代码分析
2011/04/14 Javascript
js学习阶段总结(必看篇)
2016/06/16 Javascript
json定义及jquery操作json的方法
2016/10/03 Javascript
Bootstrap导航条学习使用(二)
2017/02/08 Javascript
超全面的javascript中变量命名规则
2017/02/09 Javascript
d3.js实现立体柱图的方法详解
2017/04/28 Javascript
vue综合组件间的通信详解
2017/11/06 Javascript
详解Immutable及 React 中实践
2018/03/01 Javascript
JS简单判断是否在微信浏览器打开的方法示例
2019/01/08 Javascript
基于vue实现滚动条滚动到指定位置对应位置数字进行tween特效
2019/04/18 Javascript
vue实现表单录入小案例
2019/09/27 Javascript
vue 导航内容设置选中状态样式的例子
2019/11/01 Javascript
JavaScript实现点击切换功能
2021/01/27 Javascript
[03:14]2014DOTA2西雅图国际邀请赛 EG战队巡礼
2014/07/07 DOTA
python实现多进程通信实例分析
2019/09/01 Python
Python获取时间戳代码实例
2019/09/24 Python
python如何查看网页代码
2020/06/07 Python
Python实现SMTP邮件发送
2020/06/16 Python
python3爬虫中异步协程的用法
2020/07/10 Python
python接口自动化之ConfigParser配置文件的使用详解
2020/08/03 Python
python 动态绘制爱心的示例
2020/09/27 Python
python Cartopy的基础使用详解
2020/11/01 Python
Pandas中DataFrame交换列顺序的方法实现
2020/12/14 Python
纽约著名的服装辅料来源:M&J Trimming
2017/07/26 全球购物
端口镜像是怎么实现的
2014/03/25 面试题
西门豹教学反思
2014/02/04 职场文书
园艺师求职信
2014/03/10 职场文书
党员个人对照检查材料
2014/10/01 职场文书
安全生产隐患排查制度
2015/08/05 职场文书