原生js鼠标事件和元素大小的讲解(四)

鼠标相关事件位置属性

screenX/screenY返回当某个事件被触发时,鼠标指针的水平坐标。(距离浏览器左上方)/垂直坐标(距离浏览器上方)
clientX/clentY 鼠标点击位置距离可视窗口左上角的位置
pageX/pageY 鼠标点击位置距离文档左上角的位置
offsetX/offsetY 鼠标点击位置距离当前元素的边框内的位置; offsetX 规定了事件对象与目标节点的内填充边(padding edge)在 X 轴方向上的偏移量。
layerX/layerY 鼠标点击位置距离当前元素的距离最近的非static的元素的位置


pageX、pageY和clientX、clientY的区别?

pageX和pageY获取的是鼠标指针距离文档(HTML)的左上角距离,不会随着滚动条滚动而改变;
clientX和clientY获取的是鼠标指针距离可视窗口(不包括上面的地址栏和滑动条)的距离,会随着滚动条滚动而改变;


offsetX/Y:
offsetX/Y获取到是触发点相对被触发dom的左上角距离,不过左上角基准点在不同浏览器中有区别,其中在IE中以内容区左上角为基准点不包括边框,如果触发点在边框上会返回负值,而chrome中以边框左上角为基准点。
兼容性:IE所有版本,chrome,Safari均完美支持,Firefox不支持
layerX/Y:
layerX/Y获取到的是触发点相对被触发dom左上角的距离,数值与offsetX/Y相同,这个变量就是firefox用来替代offsetX/Y的,基准点为边框左上角,但是有个条件就是,被触发的dom需要设置为position:relative或者position:absolute,否则会返回相对html文档区域左上角的距离
兼容性:IE6/7/8不支持,opera不支持,IE9/10和Chrome、Safari均支持


screenX/screenY:返回当某个事件被触发时,鼠标指针的水平坐标。(距离浏览器左上方)/垂直坐标(距离浏览器上方)

<!--screenX/screenY返回当事件被触发时,鼠标指针的水平坐标。(距离浏览器左上方)/垂直坐标(距离浏览器上方)-->
<script type="text/javascript">
function show_coords(event)
  {
  x=event.screenX
  y=event.screenY
  alert("X coords: " + x + ", Y coords: " + y)
  }
</script>
</head>
<body onmousedown="show_coords(event)">

<p>点击这部分内容,会弹出鼠标距离浏览器左上方的位置(水平坐标)和距离浏览器上方的位置(垂直坐标)</p>

clientX和clientY返回当事件被触发时,鼠标指针的水平坐标(鼠标点击位置距离可视窗口左上角的位置)和垂直坐标。

<script type="text/javascript">
function show_coords(event)
  {
  x=event.clientX
  y=event.clientY
  alert("X coords: " + x + ", Y coords: " + y)
  }
</script>
</head>

<body onmousedown="show_coords(event)">
	<!-- clientX 事件属性返回当事件被触发时鼠标指针向对于浏览器页面(或客户区)的水平坐标。 -->
	<p>点击页面,弹出“返回当事件被触发时,鼠标指针的水平坐标和垂直坐标。”</p>

</body>

pageX和pageY:距离文档左上方的位置

<!DOCTYPE html>
<html>
<head>
	<meta charset="utf-8">
	<meta http-equiv="X-UA-Compatible" content="IE=edge">
	<title></title>
	<link rel="stylesheet" href="">
	<style type="text/css">
		#wrap{
			border: 1px solid #edb;
		}
		#page{
			border: 1px solid #cbf;

		}
	</style>
</head>
<body>
	<div id="wrap">
		<p id="page">点击页面弹出“pageX和pageY获取的是鼠标指针距离文档(HTML)的左上角距离”</p>
	</div>	
	<script>
		window.onload=function(){
			var oDiv = document.getElementById('wrap');
			oDiv.onmousedown=function(e){
				 e = e || window.event;
				alert("距离文档左上角pageX"+e.pageX+",距离文档右上角pageY"+e.pageY)
			}
		}
	</script>

</body>
</html>

offsetX和offsetY

这是一个实验中的功能
此功能某些浏览器尚在开发中,请参考浏览器兼容性表格以得到在不同浏览器中适合使用的前缀。由于该功能对应的标准文档可能被重新修订,所以在未来版本的浏览器中该功能的语法和行为可能随之改变。

语法:

var xOffset = instanceOfMouseEvent.offsetX;

返回值:
一个双精度 浮点值。早期的规范将其规定为整数值。详见浏览器兼容性部分。

浏览器兼容性参见

<div id="wrap">
		<p id="page">点击页面</p>
	</div>	
	<script>
		window.onload=function(){
			var oDiv = document.getElementById('wrap');
			oDiv.onmousedown=function(e){
				 e = e || window.event;
				alert("只读属性 offsetX 规定了事件对象与目标节点的内填充边(padding edge)在 X 轴方向上的偏移量:"+e.offsetX+",在Y轴方向上:"+e.offsetY)
			}
		}
	</script>

layerX/layerY 鼠标点击位置距离当前元素的距离最近的非static的元素的位置

<!--layerX/layerY 鼠标点击位置距离当前元素的距离最近的非static的元素的位置-->
<div id="wrap">
		<p id="page">点击页面弹出</p>
	</div>	
	<script>
		window.onload=function(){
			var oDiv = document.getElementById('wrap');
			oDiv.onmousedown=function(e){
				 e = e || window.event;
				alert("在X轴方向上:"+e.layerX+",在Y轴方向上:"+e.layerY)
			}
		}
	</script>

总结您不知道或者知道的。

推荐使用:
  screenX/Y:鼠标位置相对于屏幕的坐标
  pageX/Y:相对于文档边缘(包含滚动条距离)
  clientX/Y:相对于当前页面且不包含滚动条距离
  offsetX/Y:相对于当前元素(块或行内块),除safari外不包含边框。
  其他:
  X/Y:与clientX/Y相同,firefox不支持
  layerX/Y:除IE外与pageX/Y相同,IE11下与clientX/Y相同。非官方属性。

元素大小相关

offsetWidth=border+padding+width
offsetHeight=border+padding+height
clientWidth=padding+width-滚动条宽度
clientHeight=padding+height-滚动条宽度
scrollWidth=padding+包含内容的完全宽度
scrollHeight=padding+包含内容的完全高度

推荐:javascript 中 x offsetX clientX screenX pageX的区别
clientX,offsetX,layerX,pageX,screenX,X鼠标位置全解

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值