西红柿爱番茄

Feed Rss

获取DOM元素的真实高度和宽度

01.01.2010, Javascript, by .

以前在做动画脚本的时候,遇到过这样的一个问题:当DOM元素display:none;之后,你将得不到它的实际高度和宽度。这个在fadein等类似效果的时候就有些问题了。这个问题困扰了一些时间,最后觉得还是元素隐藏导致的结果,因此采用了这样的方法:将隐藏的元素的display暂时设置为block,获取到真实的高度和宽度之后,再还原隐藏元素。下面是我封装好的获取元素的真实高度和宽度的对象:

[javascript]
var Style = {
//获取元素最终的样式
getFinalStyle: function(elem, css){
if (window.getComputedStyle) {
return window.getComputedStyle(elem, null)[css];
} else if (elem.currentStyle) {
return elem.currentStyle[css];
} else {
return elem.style[css];
}
},
height: function(elem){
if (this.getFinalStyle(elem, "display") !== "none") {
return elem.offsetHeight || elem.clientHeight;
} else {
//获取隐藏掉的函数的高度,先让它显示,获取到高度之后再隐藏,下同
elem.style.display = "block";
var h = elem.offsetHeight || elem.clientHeight;
elem.style.display = "none";
return h;
}
},
width: function(elem){
if (this.getFinalStyle(elem, "display") !== "none") {
return elem.offsetWidth || elem.clientWidth;
} else {
elem.style.display = "block";
var w = elem.offsetWidth || elem.clientWidth;
elem.style.display = "none";
return w;
}
}
};

//Usage:
onload = function(){
alert(Style.height(document.getElementById("div")));
}
[/javascript]

获取DOM元素的真实高度和宽度 有 4 条回应

  1. 不错,不过会不会获取高度的时候导致元素闪烁一下?

  2. 这个瞬间的操作,我们视觉效果应该感知不到的了

  3. 2010-05-19 在 10:24 hehe123

    为什么不采用另外的方式,clonenode 这个dom 对象, 将visibility:visible;display:block; 然后给予position;absolute,将他定位到负的左上角去. 这样可以得到真实的dom的宽,和高, 然后再删除这个复制的 dom对象,即可. 可以解决屏幕的闪动问题.

  4. 2010-05-19 在 11:36 Supersha

    哦,还没试过,有时间试试,呵呵。
    多谢多谢~

发表评论

电子邮件地址不会被公开。 必填项已用 * 标注

*

您可以使用这些 HTML 标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>