実装
textareaを利用することを想定。rowsの値を変更してformを伸び縮みさせている。
function fitToForm(target: HTMLFormElement, text: string, defaultRows = 1): void {
const lines = text.match(/\n/g)?.length || 1;
if (defaultRows <= lines) {
target.rows = lines + 1;
}
if (defaultRows > lines) {
target.rows = defaultRows;
}
}
利用イメージ
v-model渡しているstateをfitToFormの第二引数に渡しています。
第三引数にtextareaのデフォルトのrowsを設定すると、それ以上小さくなりません。
<textarea
v-model="comment"
placeholder="コメントを入力"
rows="4"
type="text"
@input="fitToForm($event.target, state.comment, 4)"
/>