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