Stackoverflowはサイズ変更可能なテキストエリアをどのように実装しますか?
それは彼らが自分たちで作成したものですか、それとも自分のサイトのテキストエリアに簡単に添付できる公開されているコンポーネントですか?
私はこの質問を見つけました、そしてそれは私が望むことを完全にはしません。
これは、テキスト領域の自動サイズ変更について詳しく説明していますが、上下にドラッグできる小さなグラブ領域が必要です。
StackOverflowはjQueryプラグインを使用してこれを実現します: TextAreaResizer 。
これを確認するのは簡単です-サイトから JS ファイルをプルするだけです。
歴史的注記:この回答が最初に書かれたとき、WMDとTextAreaResizerは2つの別個のプラグインであり、どちらもSO開発チーム(参照: micahwittmanの回答 )また、サイトのJavaScriptは非常に読みやすかったです...これらはどれも厳密にもう本当ですが、TextAreaResizerはまだ問題なく動作します。
最初はそれが Wysiwym Markdownエディター の組み込み機能だと思っていましたが、Shog9は正しいです:まったく組み込まれていませんが、jQueryプラグインTextAreaResizerのおかげです(私は道に迷いましたブラウザが エディタデモ をチェックするために使用していたのは、Google Chrome自体がSafariブラウザと同じようにテキストエリアに拡張可能な機能を追加するためです)。
これはどうですか、その仕事
<textarea oninput='this.style.height = "";this.style.height = this.scrollHeight + "px"'></textarea>
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',
お役に立てば幸いです。