Javascript客户端和替代方案

Javascript客户端和替代方案,javascript,html,css,Javascript,Html,Css,我目前正在尝试修改一个Javascript函数,该函数可以“滑入”。脚本要求您定义div的高度,因此它在动态填充的s中基本上是无用的。我在javascript中的clientHeight属性上找到了一些文本,但它似乎不支持将display设置为none的s(这是用于滑入div的方法)。这是有道理的,因为客户端窗口中div的高度为零 基本上,我想知道你们都知道哪些其他方法,或者当display:none时是否有办法绕过clientHeight=0 谢谢 哦,这是我正在使用的函数: function

我目前正在尝试修改一个Javascript函数,该函数可以“滑入”。脚本要求您定义div的高度,因此它在动态填充的s中基本上是无用的。我在javascript中的clientHeight属性上找到了一些文本,但它似乎不支持将display设置为none的s(这是用于滑入div的方法)。这是有道理的,因为客户端窗口中div的高度为零

基本上,我想知道你们都知道哪些其他方法,或者当display:none时是否有办法绕过clientHeight=0

谢谢

哦,这是我正在使用的函数:

function getDivHeight(objName) {
    return boxHeight = document.getElementById(objName).clientHeight;
}

在IE中,您可以尝试scrollHeight,但我不确定它是否有效,或者它是否是跨浏览器的

我很幸运地克隆了元素,将其移到屏幕外,然后将其显示以获得客户端高度:

var original = document.getElementById(some_id);
var new_item = original.cloneNode(true);
document.body.appendChild(new_item);  // item already hidden, so it won't show yet.
                                      // you may wish to validate it is hidden first
new_item.style.position = "absolute";
new_item.style.left = "-1000px";
new_item.style.display = "block";
var height = new_item.clientHeight;
编辑:查看jQuery代码,它们完全按照Tsvetomir Tsonev的建议执行。jQuery临时将样式设置为“显示:块;位置:绝对;可见性:无”,然后测量高度,并在测量后将特性调回

所以,看起来你不得不做一些骇客的事情,不管是克隆节点还是冒着让它在某些浏览器中闪烁的风险。。。我更喜欢Tsvetomir的建议,而不是我最初的攻击,因为它至少不涉及将不需要的节点克隆到DOM中。无论哪种方式,都不能将元素设置为“显示:无”以测量其高度。DOM不是很棒吗?:-)


编辑2:还值得注意的是,jQuery收集高度后,它会增加填充、边距和边框大小的余量,因此您可能也需要这样做。

是的,页面上未显示的元素没有尺寸

这有点道理。考虑已经创建并填充了一批文本但尚未添加到文档树中的元素。它有多高?取决于字体大小。字体大小有多大?取决于在文档中插入div的位置;它的父字体大小将继承到

类似地,对于具有“display:none”的元素。它没有渲染,因此没有维度。难道我们不能问“如果它是‘显示:块’,它会有多高?”?结果是否定的,因为如果它被显示,它本身可能会改变其父块的尺寸,然后显示元素的尺寸将与未显示元素的尺寸不一致


典型的解决方案是取消设置“显示:无”,测量元素的高度,然后立即重新设置“显示:无”。浏览器不会在一段JavaScript中间重画,所以你不会看到页面上的闪烁。

一个简单的解决方案是将它的可见性设置为“隐藏”,并将其显示为“块”并测量它。然而,一些现代浏览器将设法在这短时间内更新页面布局,您将得到一个讨厌的闪烁。克服此问题的最简单方法是将元素放置在绝对位置的容器中,溢出设置为“隐藏”。

我知道你们很久以前就解决了这个问题,但我想我应该分享一下,因为获取隐藏div标记的高度非常棘手。 以下是我读了你的帖子后所做的, 我将要滑动的div放置在一个1px高的div中,溢出设置为隐藏。 您甚至不需要将内部div的显示设置为“无”,因为它已经存在,如果您使用offsetHeight,它应该为所有浏览器返回正确的高度,您可以使用该高度上下滑动div


和平

这是一个好主意,尽管这是一项不幸的工作。谢谢你的帮助。是的。。。它的拼写是‘H’、‘A’、‘C’、‘K’:-),我几乎可以肯定Opera会在文档上添加滚动条:有没有一种聪明的方法可以获得填充、边距和边框大小,而不必解析设置这些值的所有可能方法?[即边框:,边框顶部宽度:,填充(即“5px 5px”,“0 4px 3 2px”,“5px”),填充顶部,]更新:在safari和firefox中,当我没有设置“位置:绝对值”时,它工作得非常好;“…奇怪,因为原型就是这样做的,但哦,好吧!好吧,它工作起来…有点。它很短,留下了最后一段文字。看起来这可能是由于边框、边距或填充,但如果我们测量的是假设的高度,这些不都应该考虑吗?奇怪的测量是由于设置位置:绝对高度te…问题已解决(ish)