var keyUpTimeout = false; // Required variables for performance
var keyupTimer = 0;
$("#text_textarea").keyup(function(e) {
var cooldownTimeout = 500;
//Set the cooldown time-out. The height check will be executed when the user
// hasn't initiated another keyup event within this time
var ths = this;
function heightCheck(){
keyupTimer = false;
// Reset height, so that the textarea can shrink when necessary
ths.style.height = "";
// Set the height of the textarea
var newheight = this.scrollHeight + 2;
ths.style.height = newheight + "px";
}
if(keyupTimeout){ //Has a cooldown been requested?
clearTimeout(keyupTimer); //This+next line: Refresh cooldown timeout.
keyUpTimer = setTimeout(heightCheck, cooldownTimeout);
return; //Return, to avoid unnecessary calculations
}
// Set a cooldown
keyupTimer = setTimeout(heightCheck, cooldownTimeout);
keyupTimeout = true; //Request a cooldown
});
このスクリプトは、テキストエリアの高さをテキストが収まるように変更します。
アップデート
追加機能を追加しました: パフォーマンスを向上させるために (CSS の高さを変更するにはかなりの量のコンピューターの処理能力が必要です)、クールダウン効果を追加しました: 高さのチェックは、ユーザーがkeyup
500 ミリ秒間イベントを開始しなかった場合にのみ実行されます。 (この値を希望に合わせて調整してください)。