Это мой код для 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 во второй раз, чтобы вызвать его рост .
- Когда TextArea растет, он довольно крутой, можно ли добиться плавного эффекта?