Реализуете текстовое поле с изменяемым размером?

Как Stackoverflow реализует текстовое поле с изменяемым размером?

Это то, что они сделали сами, или это общедоступный компонент, который я могу легко прикрепить к текстовым полям на своих сайтах?

Я нашел этот вопрос, и он не совсем то, что мне нужно.

autosizing-textarea

Это больше говорит об автоматическом изменении размера текстовых полей, тогда как мне нужна небольшая область захвата, которую вы можете перетаскивать вверх и вниз.


person Mark Biek    schedule 29.09.2008    source источник


Ответы (5)


StackOverflow использует для этого подключаемый модуль jQuery: TextAreaResizer.

Проверить это достаточно легко - просто вытащите файлы JS с сайта.

Историческое примечание: на момент написания этого ответа WMD и TextAreaResizer были двумя отдельными плагинами, ни один из которых не был создан командой разработчиков SO (см. также: ответ Микавиттмана). Кроме того, JavaScript для сайта было довольно легко читать ... Ни одно из этих требований больше не является строго истинным, но TextAreaResizer по-прежнему работает нормально.

person Shog9    schedule 29.09.2008
comment
На всякий случай, если кому-то это тоже интересно: scottmoonen.com/2008/07 / 08 / - person mplungjan; 24.08.2010
comment
К сожалению, ссылка на UserVoice мертва (поскольку SO ее больше не использует). Было бы интересно увидеть обсуждение, чтобы узнать, что люди думают об этом (изменение размера вручную или автоматическое изменение размера). - person David Johnstone; 14.10.2010
comment
@ Дэвид: к сожалению, эта информация, похоже, утеряна. FWIW, я был за автоматическое изменение размера (отсюда мой ответ на вопрос, указанный выше) , но я понимаю, что это может стать неудобным для более длинных сообщений. - person Shog9; 18.05.2011
comment
Либо мой гугл-фу меня подводит, либо плагин TexttAreaResizer пропал навсегда. (кроме случаев, когда я беру его с dev.static.net). - person rene; 20.12.2017

Мне недавно понадобился аналогичный функционал. Это называется Autogrow, и это плагин удивительного библиотека jQuery

person Roman Ganz    schedule 29.09.2008
comment
Похоже, ссылка на autogrow не работает. Правильный: plugins.jquery.com/project/autogrowtextarea - person dpavlin; 16.06.2010
comment
Мне нравится plugins.jquery.com/project/textareaexpander. Он использует другой подход к изменению размера, но я думаю, что он имеет больше смысла. Кроме того, я написал почти то же самое, прежде чем заметил, что он уже существует. - person David Johnstone; 17.10.2010
comment
$ .autoGrow прост, но эффективен, хотя выглядит некрасиво и загрязняет глобальное пространство имен - простое лекарство - вот его более jQuerish-версия: gist.github.com/802204 - person kares; 30.01.2011
comment
Версия 2.0 вне Autogrow, может быть найдена на сайте jquerys или technoreply. com / autogrow-textarea-plugin-version-2-0 - person Jan Johansen; 06.06.2011
comment
@ 0BM эта ссылка не работает: эта учетная запись заблокирована - person Roman Ganz; 24.11.2011
comment
@knight_killer - похоже, это временно? Ссылка здесь все еще работает. - person Jan Johansen; 08.12.2011

Сначала я думал, что это встроенная функция редактора Wysiwym Markdown, но Shog9 прав: это совсем не встроен, но любезно предоставлен плагином jQuery TextAreaResizer (меня сбил с толку браузер, который использовал для проверки демо-версия редактора, потому что сам Google Chrome добавляет расширяемые функции в текстовые поля, как это делает браузер Safari).

person micahwittman    schedule 29.09.2008

Используя AngularJS:

angular.module('app').directive('textarea', function() {
  return {
    restrict: 'E',
    controller: function($scope, $element) {
      $element.css('overflow-y','hidden');
      $element.css('resize','none');
      resetHeight();
      adjustHeight();

      function resetHeight() {
        $element.css('height', 0 + 'px');
      }

      function adjustHeight() {
        var height = angular.element($element)[0]
          .scrollHeight + 1;
        $element.css('height', height + 'px');
        $element.css('max-height', height + 'px');
      }

      function keyPress(event) {
        // this handles backspace and delete
        if (_.contains([8, 46], event.keyCode)) {
          resetHeight();
        }
        adjustHeight();
      }

      $element.bind('keyup change blur', keyPress);

    }
  };
});

Это преобразует все ваши текстовые поля в рост / сжатие. Если вы хотите, чтобы увеличивались / сжимались только определенные текстовые поля - измените верхнюю часть, чтобы она читалась следующим образом:

angular.module('app').directive('expandingTextarea', function() {
  return {
    restrict: 'A',

Надеюсь, это поможет!

person benshope    schedule 24.03.2015

как насчет этого, его работа

<textarea oninput='this.style.height = "";this.style.height = this.scrollHeight + "px"'></textarea>
person Martin Prestone    schedule 26.01.2018
comment
Хотя этот фрагмент кода может решить вопрос, включение объяснения действительно помогает улучшить качество вашего поста. Помните, что вы отвечаете на вопрос для читателей в будущем, и эти люди могут не знать причины вашего предложения кода. - person Sudheesh Singanamalla; 26.01.2018