原生JS方式
视口: 指的是浏览器窗口
use offset
可以轻松获取元素的宽高,与偏移量,相对于视口
var testElement = document.querySelector('.test'),
width = testElement.offsetWidth,
height = testElement.offsetHeight,
left = testElement.offsetLeft,
top = testElement.offsetTop;
use getBoundingClientRect
调用该方法,即可返回一个包含left, top, right, bottom, width, height
的对象,因此我们可以很轻松的使用该方法得到元素的宽高与位置,该位置数据相对于浏览器视口。
var res = testElement.getBoundingClientRect();
// { top:70, right: 950, bottom: 634, left: 436, width: 514, height: 564 }
由于IE中调用该方法的返回对象没有width, height
这两个属性,因此我们获取元素宽高时就需要做一个简单的兼容处理,所有的属性获取如下
var res = testElement.getBoundingClientRect(),
top = res.top,
left = res.left,
right = res.right,
bottom = res.bottom,
width = res.width || (right - left),
height = res.height || (bottom - top);
jquery方式
jquery
获取元素的偏移量有两种不同的情况,第一种是相对于document的位置,使用offset()
方法
var $testElement = $('.test'),
left = $testElement.offset().left,
top = $testElement.offset().top;
第二种是父级元素如果是相对或者绝对定位,获取相对于父级的偏移量,使用position()
方法
var $testElement = $('.test'),
left = $testElement.position().left,
top = $testElement.position().top;
使用jquery
获取元素的宽高,不包括内边距,边框与外边距,方法如下
var $testElement = $('.test'),
width = $testElement.width(),
height = $testElement.height();
包括内边距的方法如下
var $testElement = $('.test'),
width = $testElement.innerWidth(),
height = $testElement.innerHeight();
包括内边距和边框
var $testElement = $('.test'),
width = $testElement.outWidth(),
height = $testElement.outHeight();
包括内边距和边框
var $testElement = $('.test'),
width = $testElement.outWidth(true),
height = $testElement.outHeight(true);