最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 科技 - 知识百科 - 正文

jsEvent对象的5种坐标_javascript技巧

来源:动视网 责编:小采 时间:2020-11-27 21:00:30
文档

jsEvent对象的5种坐标_javascript技巧

jsEvent对象的5种坐标_javascript技巧:但是你懂的,浏览器实在太不和谐了,兼容性且不说,各种坐标属性看得人头昏眼花,极容易混淆。好吧,我来总结一下: 测试浏览器:IE8, Chrome13, FF8, Safari5, Opera11 先上测试用例(用HTML5的doctype测试,也可看出未来的发展趋势,其他doctype可自
推荐度:
导读jsEvent对象的5种坐标_javascript技巧:但是你懂的,浏览器实在太不和谐了,兼容性且不说,各种坐标属性看得人头昏眼花,极容易混淆。好吧,我来总结一下: 测试浏览器:IE8, Chrome13, FF8, Safari5, Opera11 先上测试用例(用HTML5的doctype测试,也可看出未来的发展趋势,其他doctype可自


但是你懂的,浏览器实在太不和谐了,兼容性且不说,各种坐标属性看得人头昏眼花,极容易混淆。好吧,我来总结一下:

测试浏览器:IE8, Chrome13, FF8, Safari5, Opera11
先上测试用例(用HTML5的doctype测试,也可看出未来的发展趋势,其他doctype可自行测试):
代码如下:







空白区
点击


window.onload = function(){
var btn = document.getElementById('btn');
btn.onclick = function(e){
e = e|| window.event;
var box = (e.target || e.srcElement).getBoundingClientRect(),
offsetX = e.clientX - box.left,
offsetY = e.clientY - box.top;
p('x: '+ e.x+', y: '+e.y);
p('pageX: '+ e.pageX+', pageY: '+e.pageY);
p('offsetX: '+ e.offsetX+', offsetY: '+e.offsetY);
p('FF实现 offsetX: '+offsetX+', offsetY: '+offsetY);
p('layerX: '+ e.layerX+', layerY: '+e.layerY);
p('clientX: '+ e.clientX+', clientY: '+e.clientY);
p('body.scrollLeft: '+ document.body.scrollLeft+', body.scrollTop: '+document.body.scrollTop);
p('body.clientLeft: ' + document.body.clientLeft + ', body.clientTop: '+document.body.clientTop);
p('documentElement.scrollLeft: '+ document.documentElement.scrollLeft+', documentElement.scrollTop: '+document.documentElement.scrollTop);
p('documentElement.clientLeft: ' + document.documentElement.clientLeft + ', documentElement.clientTop: '+document.documentElement.clientTop);
}
}
function p(s){
console.log(s);
}



问:怎样获取鼠标相对于浏览器可视文档区域左上角的位置?
答:x, y和clientX, clientY皆可,但是x, y在IE下表示鼠标相对于文档开头的位置(即如果有滚到条的话,会计算在内),还有FF也不支持x, y
  推荐: clientX, clientY

问:怎样获取鼠标相对于文档开头的位置?
答: IE:使用x, y(前提是事件源的父元素(一直到documentElement)没有设置position:relative之类的,否则相对于最近元素,而非相对于文档)
  非IE:使用pageX, pageY
  layerX, layerY其实也可以,但是IE和Opera不支持!
  那么如何确保IE正常取值呢?答:event.clientX + document.documentElement.scrollLeft,  event.clientY + document.documentElement.scrollTop

问:怎样获取鼠标相对于事件源(event.target||event.srcElement)左上角的位置?
答:offsetX, offsetY。但是FF不支持,怎样办呢?
  1. 先获取鼠标相对于浏览器可视文档区域左上角的位置
  2. 然后获取事件源相对于浏览器可视文档区域左上角的位置
  3. 相减,收工
也许有人会问,这第2步怎么做啊?好吧,好人做到底!
HTMLElement.getBoundingClientRect()方法
返回值为:{top:xx, right:xx, bottom:xx, left:xx, width:xx, height:xx}
也就是说,一个元素的位置信息都给了,我们要做的就是:
代码如下:
var box = (e.target || e.srcElement).getBoundingClientRect(),
offsetX = e.clientX - box.left,
offsetY = e.clientY - box.top;

经测试,所有浏览器都和event.offsetX, event.offsetY保持一致(当然FF除外)

我的例子中,最后还检测了scrollLeft, scrollTop, clientLeft, clientTop,本来以为它们几个会作怪,可测试结果表明:
除了scrollTop,其他都是0(当然scrollLeft是因为没出现横向滚动条所致)
scrollTop各浏览器表现不尽相同,如下:
body.scrollTop的情况
  IE, FF, Opera:0
  Chrome, Safari:向上滚动的距离
documentElement.scrollTop的情况
  IE, FF, Opera:向上滚动的距离
  Chrome, Safari:0

文档

jsEvent对象的5种坐标_javascript技巧

jsEvent对象的5种坐标_javascript技巧:但是你懂的,浏览器实在太不和谐了,兼容性且不说,各种坐标属性看得人头昏眼花,极容易混淆。好吧,我来总结一下: 测试浏览器:IE8, Chrome13, FF8, Safari5, Opera11 先上测试用例(用HTML5的doctype测试,也可看出未来的发展趋势,其他doctype可自
推荐度:
标签: js 对象 event
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top