这是我的自动调整大小的 TextArea 的代码(我正在使用 Errai,所以 TextArea 被注入 btw):
@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 变大时,它很陡峭,是否有可能产生平滑的效果?