Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 斜视/倾斜高度/滚动高度永不改变_Javascript_Html - Fatal编程技术网

Javascript 斜视/倾斜高度/滚动高度永不改变

Javascript 斜视/倾斜高度/滚动高度永不改变,javascript,html,Javascript,Html,我正在用Angular创建一个滚动指令,并看到元素高度的奇怪行为。它们在调整大小时不会改变。我使用了最简单的简单JS,但是bug仍然存在。这把小提琴说明了这一点。尝试调整窗口大小并多次单击内容,然后查看控制台 function rebuild() { var transcluded = document.getElementsByTagName('div')[0]; scope.scrollHeight = transcluded.scrollHeight; scope.

我正在用Angular创建一个滚动指令,并看到元素高度的奇怪行为。它们在调整大小时不会改变。我使用了最简单的简单JS,但是bug仍然存在。这把小提琴说明了这一点。尝试调整窗口大小并多次单击内容,然后查看控制台

function rebuild() {
    var transcluded = document.getElementsByTagName('div')[0];
    scope.scrollHeight = transcluded.scrollHeight;
    scope.offsetHeight = transcluded.offsetHeight;
    scope.clientHeight = transcluded.clientHeight;
}
此函数负责读取值。角度的唯一区别是,我使用
element.children()[n]
来获取内部元素,而不是
document.getElementsByTagName
。 此外,当窗口足够小时,元素不会对滚动做出响应。ScrollTop不会改变


问题是为什么在调整窗口报告的大小后
高度
不更新

我认为问题在于,您希望scrollHeight、offsetHeight和clientHeight根据窗口大小而变化,而事实并非如此

scrollHeight是“元素内容高度的度量,包括由于溢出而在屏幕上不可见的内容”()

offsetHeight是“元素的高度,包括垂直填充和边框,以像素为单位,作为一个整数”()

clientHeight是“以像素为单位的元素的内部高度,包括填充,但不包括水平滚动条高度、边框或边距”()

所有这三个都与调用它们的元素相关。由于您似乎没有为元素设置相对高度,因此您不会看到它们的滚动高度、离地高度或clientHeight有任何更改。换句话说,元素当前具有基于其内部内容的固定高度


当你将屏幕缩小到“单击我”跨越两行时,你可以看到这一点,然后你的值会改变

您可以将其插入指令中的链接函数

angular.element($window).bind('resize', function () {
   rebuild();
});
确保将
$window
注入指令函数,
只需调用rebuild或内部的其他函数。当然,您还应该将transcluded更改为适当的angularJS表单。

何时需要响应?当窗口调整大小时?调整大小时,
div
不会以任何方式更改,因此值会保留。@z.a.说实话,这不重要。我就是不明白为什么这些值没有改变。但主要目的是处理视口更改并相应地重建滚动条。@Teemu Ok,但如果在
getElementsByTagName
中用
body
html
替换
div
,则不会发生任何变化。我正在侦听窗口大小的更改(
resize
事件)更新滚动条大小。@EugeneKostrikov我更新了答案,希望这能让事情更清楚。谢谢!看来我终于灵机一动了。不知何故,我绝对确信,
clientHeight
表示可见部分的高度,
offsetHeight
显示元素滚动的“距离”。太神了我不知道我是怎么做到的:)这实际上是我用角度捕捉
resize
事件的方法:)但问题是为什么
height
s没有更新。你必须转换转置的变量。您不能只在指令函数中调用文档。首先,它是全球性的,其次,你不应该。首先测试调整大小绑定是否有效,然后尝试将transcluded更改为与指令相关的内容。