事件处理程序函数中的变量未重置
Variable not resetting in function of event handler
我有一个包含 3 列和不同数量文本的页面。这 3 列需要具有相同的高度。我编写了一个函数来查看每一列的高度,检查哪一个最高,然后将它们的所有高度设置为该长度。
我在运行此函数的 window.onresize 事件上有一个事件处理程序。在这个函数的开始,变量 max_height 被设置为 0。问题是,在多次调用后它似乎永远不会重置为 0。新的 max_height 似乎一直在添加,每次调整大小时,列的高度都会变高。我错过了什么?
提前致谢。
function resizeHeights(){
var callouts = $('.callout');
var max_height = 0;
callouts.each(function(i){
if($(callouts[i]).height() > max_height){
max_height = $(callouts[i]).height();
console.dir(max_height);
$(callouts[i]).height(0);
}
});
callouts.each(function(i){
$(callouts[i]).height(max_height + 50);
});
}
$(window).on('resize', function(){
resizeHeights();
});
您的代码正在将 max_height
设置为您拥有的最高列。而且,由于您最终将所有列设置为 max_height + 50
,因此每次调用此函数时,列都会增长 50 像素。
问题是您永远无法看到列的 "natural" 高度,因为一旦调用此函数一次,高度就会硬连接到您之前设置的高度,而不是允许响应由于 window 大小变化引起的布局变化。
您可能需要清除所有列的 css 高度设置,然后强制重新布局浏览器(以便计算新的自然高度),然后 运行 其余部分函数中的代码,以便您可以查看列的自然高度,并根据新的自然高度值进行手动高度设置。
请参阅 this answer 了解如何强制浏览器进行布局。
尝试将您的变量 max_height 重命名为 ex。 max_height2。只是为了确保不与其他具有相同名称的全局变量发生冲突(如果存在)。
我有一个包含 3 列和不同数量文本的页面。这 3 列需要具有相同的高度。我编写了一个函数来查看每一列的高度,检查哪一个最高,然后将它们的所有高度设置为该长度。
我在运行此函数的 window.onresize 事件上有一个事件处理程序。在这个函数的开始,变量 max_height 被设置为 0。问题是,在多次调用后它似乎永远不会重置为 0。新的 max_height 似乎一直在添加,每次调整大小时,列的高度都会变高。我错过了什么?
提前致谢。
function resizeHeights(){
var callouts = $('.callout');
var max_height = 0;
callouts.each(function(i){
if($(callouts[i]).height() > max_height){
max_height = $(callouts[i]).height();
console.dir(max_height);
$(callouts[i]).height(0);
}
});
callouts.each(function(i){
$(callouts[i]).height(max_height + 50);
});
}
$(window).on('resize', function(){
resizeHeights();
});
您的代码正在将 max_height
设置为您拥有的最高列。而且,由于您最终将所有列设置为 max_height + 50
,因此每次调用此函数时,列都会增长 50 像素。
问题是您永远无法看到列的 "natural" 高度,因为一旦调用此函数一次,高度就会硬连接到您之前设置的高度,而不是允许响应由于 window 大小变化引起的布局变化。
您可能需要清除所有列的 css 高度设置,然后强制重新布局浏览器(以便计算新的自然高度),然后 运行 其余部分函数中的代码,以便您可以查看列的自然高度,并根据新的自然高度值进行手动高度设置。
请参阅 this answer 了解如何强制浏览器进行布局。
尝试将您的变量 max_height 重命名为 ex。 max_height2。只是为了确保不与其他具有相同名称的全局变量发生冲突(如果存在)。