これは、自動サイズ変更する TextArea の私のコードです (私は Errai を使用しているため、TextArea は注入されます):
@Inject
@DataField
TextArea content;
@AfterInitialization
public void afterInit(){
content.getElement().setAttribute("wrap","off");
content.addKeyUpHandler(new KeyUpHandler() {
@Override
public void onKeyUp(KeyUpEvent event) {
$(content)
.css("overflow-y", "hidden")
.css("overflow-x", "auto")
.css(CSS.HEIGHT, "300px")
.css(CSS.HEIGHT, DOM.getElementPropertyInt(content.getElement(),"scrollHeight") + "px");
}
});
content.addValueChangeHandler(new ValueChangeHandler<String>() {
@Override
public void onValueChange(ValueChangeEvent<String> event) {
$(content)
.css("overflow-y", "hidden")
.css("overflow-x", "auto")
.css(CSS.HEIGHT, "300px")
.css(CSS.HEIGHT, DOM.getElementPropertyInt(content.getElement(),"scrollHeight") + "px");
}
});
content.addMouseUpHandler(new MouseUpHandler() {
@Override
public void onMouseUp(MouseUpEvent event) {
$(content)
.css("overflow-y", "hidden")
.css("overflow-x", "auto")
.css(CSS.HEIGHT, "300px")
.css(CSS.HEIGHT, DOM.getElementPropertyInt(content.getElement(),"scrollHeight") + "px");
}
});
}
このコードは、注意したいいくつかの問題で正常に動作します。
- コードが洗練されていない、コードが冗長である、単純化する方法はありますか
- 入力すると TextArea が自動拡張され、CTRL + V コマンドでもコンテンツに合わせて拡張されますが、右クリック + コンテキスト メニューの項目を貼り付けても自動拡張されないため、TextArea を 2 回目にクリックして拡張する必要があります。 .
- TextArea が大きくなると非常に急勾配になりますが、スムーズな効果を得ることができますか?