js、jQuery获取各种宽高
js获取各种宽高
第一部分:DOM对象
1.1只读属性
DOM节点的固有属性,只能通过js去获取不能设置,而且获取的值是只有数字不带单位的
1)clientWidth、clientHeight
元素的可视部分宽度和高度(padding+content),如果没有滚动条,即为元素设定的高度和宽度,如果有滚动条,滚动条会遮盖元素的宽高,那么该属性就是元素本来宽高减去滚动条的宽高。
备注:移动端滚动条宽高不计
2)clientTop、clientLeft
元素border的宽度和高度的
3)offsetWidth、offsetHeight
元素border+padding+content的宽度和高度,该属性和其内部的内容是否超出元素大小无关,只和元素设定的border以及width和height有关
4)offsetLeft、offsetTop
offsetParent:当前元素离自己最近的具有定位的(position:absolute或者relative)父级元素,如果从该元素向上找不到这样一个父级元素,那么该元素的offsetParent就是body元素
5) scrollHeight和scrollWidth
当元素内部的内容超出其宽度和高度的时候,元素内部内容的实际宽度和高度
1.2可读可写属性
不仅能通过js获取该属性的值,还能够通过js为该属性赋值
scrollTop和scrollLeft
当元素其中的内容超出其宽高的时候,元素被卷起的高度和宽度
该属性还可以通过赋值内容自动滚动到某个位置
第二部分:Event对象
1)clientX和clientY
当事件发生时,鼠标点击位置相对于浏览器(可视区)的坐标,即浏览器左上角坐标的(0,0),不管浏览器窗口大小如何变化,都不会影响点击位置的坐标
2)screenX和screenY
事件发生时鼠标相对于屏幕的坐标,以设备屏幕的左上角为原点,事件发生时鼠标点击的地方即为该点的screenX和screenY值
3)offsetX和offsetY
当事件发生时,鼠标点击位置相对于该事件源的位置,即点击该div,以该div左上角为原点来计算鼠标点击位置的坐标
4)pageX和pageY
事件发生时鼠标点击位置相对于页面的位置,通常浏览器窗口没有出现滚动条时,该属性和event.clientX及event.clientY是等价的,但是当浏览器出现滚动条的时候,pageX通常会大于clientX,因为页面还存在被卷起来的部分的宽度和高度
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="initial-scale=1.0,maximum-scale=1.0,minimum-scale=1.0,user-scalable=no"/>
<title>js各种宽高</title>
<style>
*{margin: 0;padding: 0;}
.content{position: relative;width: 200px;height: 200px;}
.one{
width: 200px;height: 200px;border: 5px solid green;
overflow:scroll;
}
.two{
width: 100px;height: 100px;background: red;border: 1px solid #000;
position: absolute; top:40px; left:20px;
}
.note{width:250px; height:250px; border:2px solid blue;
position: absolute; margin: -200px 0 0 130px;}
.show{width:100% height:100%; border:2px solid blue;margin: 60px 0 0 10px;padding: 10px;position: absolute;}
</style>
</head>
<body>
<div class="content">
<div class="one">
contentcontent</br>contentcontent</br>contentcontent</br>contentcontent</br>contentcontent</br>contentcontent</br>contentcontent</br>contentcontent</br>contentcontent</br>contentcontent</br>contentcontent</br>contentcontent</br>contentcontent</br>contentcontent</br>contentcontent</br>contentcontent</br>contentcontent</br>contentcontent</br>contentcontent</br>contentcontent</br>contentcontent</br>contentcontent</br>contentcontent</br>contentcontent</br>contentcontent</br>contentcontent</br>contentcontent</br>contentcontent</br>contentcontent</br>contentcontent</br>contentcontent</br>
</div>
<div class="two"></div>
</div>
<div class="note">
<p>.one{
position: relative;</br> width: 200px;</br>
height: 200px;</br> border: 5px solid green;</br>}
</p>
<p>.two{
width: 100px;</br> height: 100px;</br>
background: red;</br> border: 1px solid #000;</br>
position: absolute;</br> top:40px;</br>
left:20px;</br>
}
</p>
</div>
<div class="show">
<h3>div class="one" 各种宽高</h3>
</div>
<script src="http://s.thsi.cn/js/m/js/zepto.min.js"></script>
<script>
$(function(){
var oDiv=document.querySelector('.one');
var html = '';
html += "<p>clientWidth:"+oDiv.clientWidth + "; clientHeight:"+oDiv.clientHeight+"</p>";
html += "<p>clientLeft:"+oDiv.clientLeft + "; clientTop:"+oDiv.clientTop+"</p>";
html += "<p>offsetWidth:"+oDiv.offsetWidth + "; offsetHeight:"+oDiv.offsetHeight+"</p>";
html += "<p>offsetTop:"+oDiv.offsetTop + "; offsetLeft:"+oDiv.offsetLeft+"</p>";
$('.show').append(html);
oDiv.onscroll=function(){
console.log(this.scrollHeight+":"+this.scrollWidth);
console.log(this.scrollTop+":"+this.scrollLeft);
}
oDiv.onclick=function(event){
console.log(event.clientX+":"+event.clientY);
console.log(event.screenX+":"+event.screenY);
console.log(event.offsetX+":"+event.offsetY);
console.log(event.pageX+":"+event.pageY);
}
});
</script>
</body>
</html>
jQuery获取各种宽高
$(document).height();//获取整个网页的高度
$(window).height();//获取浏览器可视窗口的高度
$(window).scrollTop();//获取可视窗口顶部距离网页顶部的距离
当网页拉至底部时:
$(document).height() == $(window).height() + $(window).scrollTop()
获取标签的高度:
$('标签').height();//标签: content
$('标签').innerHeight();//标签: padding+content
$('标签').outerHeight();//标签: border+padding+content
$('标签').outerHeight(true);//标签: margin+border+padding+content
备注:
1、zepto.js没有innerHeight()、outerHeight()方法
2、zepto.js:
$('标签').height();//标签: border+padding+content