setTimeout 関数はいつも私に問題を引き起こすようです。現在、再帰的 (setTimeout を介して自分自身を呼び出す) で要素の高さを変更する関数があります。
この関数には、変更する要素とその要素の最大高さの 2 つの引数が送信されます。この関数の目的は、要素を展開すること、つまり一定のペースで「スライド ダウン」することです。おそらく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);