javascript对offsetX,layerX,pageX,clientX...等值的知识笔记

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>javascript中事件及定位浏览器的差异</title>
<style type="text/css">
*
{margin:0; padding:0;}
#oDiv
{
height
:200px;
width
:200px;
background
:Red;
position
:absolute;
left
:200px;
top
:200px;
margin
:5px;
border
:5px solid #f60;
}
</style>
<script type="text/javascript">
/*
var str="This is a RegExp string test, yes it is ";
var reg=/is/;
alert(str.match(reg)); //is
*/

window.onload
=function(){
var oDiv=document.getElementById("oDiv");
if(document.all){
alert(
"Div元素的客户端高度和宽度:clientWidth|"+oDiv.clientWidth+",clientHeight|"+oDiv.clientHeight); //内容区域,不包含边框
alert("Div元素的客户端高度和宽度:offsetWidth|"+oDiv.offsetWidth+",offsetHeight|"+oDiv.offsetHeight); //加上边框
alert("Div元素的距离左侧和右侧的距离:offsetLeft|"+oDiv.offsetLeft+",offsetTop|"+oDiv.offsetTop); //应该是应IE的定位问题而有的,IE有2px的差距
}
oDiv.onclick
=function(e){
e
=e||window.event;
if(document.all){ //IE浏览器
alert("触发事件的对象:"+e.srcElement.id);

//这里你可以看成是相对于浏览器的可视区域
//注意:IE的client是相对于浏览器的可视区域(不会加上滚动条的左和上)(而FF的pageX|Y可以看成是相对于body的,含滚动条)(兼容处理要考虑的)
alert("事件发生时光标相对客户端区域的位置:clientX|"+e.clientX+",clientY|"+e.clientY);

//这里只是单单相对于该元素的哦,如,该DIV是200长宽,所以我在正中点是 100和100左右
//另外一点要注意,IE的 offset是相对于内容区域的(不包括边框),所以如果有边框的话,则可能为负数(如在边框上点击)(兼容处理要考虑的)
alert("光标相对于引起事件对象的位置:offsetX|"+e.offsetX+",offsetY|"+e.offsetY);

alert(
"光标相对屏幕的位置:screenX|"+e.screenX+",screenY|"+e.screenY);

//取消浏览器的默认行为
e.returnValue=false;
//取消冒泡
e.cancelBubble;
}
else //标准(主要是FireFox)
{
alert(
"触发事件的对象:"+e.target.id);

//这里你可以看成是相对于body(即使有滚动条且已经滚动,它的值不变)
alert("事件发生时光标相对body区域的位置:pageX|"+e.pageX+",pageY|"+e.pageY);

//这里只是单单相对于青元素的哦,如,该DIV是200长宽的,所以我在正中点是 100和100左右
//FF的layer是相对于元素的左上角(不包含margin,包含border的值) (还有点要注意要是有定位的元素,即设置了position,否则就相对于body)
alert("光标相对于引起事件对象的位置:layerX|"+e.layerX+",layerY|"+e.layerY);

alert(
"光标相对屏幕的位置:screenX|"+e.screenX+",screenY|"+e.screenY);

//取消浏览器的默认行为
e.preventDefalut();
//取消冒泡
e.stopPropgation();
}
}
}
</script>
</head>
<body style="height:1000px">
<div id="oDiv"></div>
</body>
</html>

原文地址:https://www.cnblogs.com/jancyxue/p/2171132.html