【发布时间】:2008-12-04 17:26:22
【问题描述】:
setTimeout 函数似乎总是给我带来麻烦。现在我有一个递归函数(通过 setTimeout 调用自身)并更改元素高度。
该函数被发送两个参数:要更改的元素和该元素的最大高度。该功能的目的是展开元素,或以恒定的速度“向下滑动”。我知道我可以用 jQuery 解决这个问题,但我正在尝试我自己的函数。
function slide_down(element, max_height)
{
if(element.clientHeight < max_height)
{
var factor = 10;
var new_height = (element.clientHeight + factor >= max_height) ? max_height : (element.clientHeight + factor);
element.style.height = new_height + 'px';
var func_call = 'slide_down(' + element + ', ' + max_height + ');';
window.setTimeout(func_call, 10);
}
}
我已经测试了函数最初被调用时的参数。 max_height 设置为 20,因为它是元素所需的高度(我从 .scrollHeight 获得了这个值)。
函数完成后,我想让它自己调用,直到 max_height 是元素的高度。我通过这个 setTimeout 调用来做到这一点:
var func_call = 'slide_down(' + element + ', ' + max_height + ');';
window.setTimeout(func_call, 10);
而且它不工作。这确实有效:
var func_call = 'alert(1);';
window.setTimeout(func_call, 10);
我也试过把函数调用直接放到setTimeout语句中,还是不行。
请注意,元素的高度在第一次迭代时会改变,函数只是从不调用自身。所以元素变量设置正确,我使用 alert() 显示 max_height 也是正确的。
alert(func_call);
提醒:
slide_down([object HTMLParagraphElement], 20);
【问题讨论】:
标签: javascript settimeout