@kirill-93

Как доработать авто увеличение textarea?

Пытаюсь сделать текстовое поле, которое само увеличивается при вставке в него текста.
В целом работает, но есть один нюанс, а именно дефолтная высота textarea. Она больше, чем мне нужно. По дизайну это должна быть полоска в 28 пикселей. Но если я задам изначальную высоту, то при работе скрипта, если поле очистить, высота выставится auto и будет больше 28 пикселей. И еще у меня вопрос, почему в этом скрипте (я его нагуглил), используется setTimeout(() => {}, 0)? Понимаю, что это запускает скрипт внутри асинхронно, но зачем? Если этот setTimeout убрать, то скрипт работает криво.
Как уменьшить высоту поля?
Помогите, пожалуйста.

<style>
textarea{  
	overflow:hidden;
	padding:10px;
	width:250px;
	font-size:14px;
	margin:50px auto;
	display:block;
	border:1px solid #dedede;
	border-radius: 4px;
        box-sizing: content-box;
        outline: none;
}
</style>
<textarea></textarea>

<script>
window.onload = function() {

  let textarea = document.querySelector('textarea');

  textarea.addEventListener('keydown', autosize);
	             
  function autosize() {
	  setTimeout(function(){
		  textarea.style.height = 'auto';
      textarea.style.padding = '0';

			textarea.style.height = textarea.scrollHeight + 'px';
			textarea.style.padding = '10px';
    }, 0);
  }
}
</script>


Ссылка на Codepen.
  • Вопрос задан
  • 168 просмотров
Пригласить эксперта
Ответы на вопрос 2
dimovich85
@dimovich85 Куратор тега CSS
https://u-academy.net/
Видимо таймаут чтобы отловить задержку нажатия клавиш и чуть позже поменять стили.
Я убрал таймаут, и подвесил все это на событие input, хотя, как по мне, то производительнее будет на change, anyways, look:
https://codepen.io/dimovich85/pen/vbmzXb
Ответ написан
Amirez
@Amirez
В чем секрет кота Бориса?
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы