【问题标题】:AS3 TextField autoscroll to the bottomAS3 TextField 自动滚动到底部
【发布时间】:2013-08-14 21:32:42
【问题描述】:

如何在以编程方式添加文本时自动滚动到 ActionScript 中的 TextField 底部:

var _output:TextField = new TextField();
for (var i:int = 0; i < 100; ++i) {
    _output.appendText("Hello World!");
}

还要考虑应该启用 TextField 的垂直滚动,并且一旦添加了新文本,就应该再次执行自动滚动到底部。

【问题讨论】:

  • 请注意,您分配的是“Hello World!”到_output.text 连续一百次。你应该打电话给appendText()。
  • 你说得对,谢谢!

标签: actionscript-3 scroll textfield


【解决方案1】:

您应该在相关的 TextField 上监听 Event.CHANGE 事件。 Event description relative to textField 如果您捕获此事件,您将使用 scrollV 属性。像这样说:

_output.addEventListener(Event.CHANGE,scrollAllDown);
function scrollAllDown(e:Event):void {
    var tf:TextField=(e.target as TextField);
    if (!tf) return; 
    tf.scrollV=tf.maxScrollV;
}

更新:捕捉Event.CHANGE 不起作用,我留下这个以防有人偶然发现这种方法并且发现它不起作用。因此,唯一的方法是继承 TextField 并手动覆盖 appendText() 方法以包含滚动,如下所示:

public class OutputTF extends TextField 
{ 
    // constructor omitted
    override public function appendText(text:String):void 
    { super.appendText(text); this.scrollV=this.maxScrollV; } 
}

【讨论】:

  • 为什么你得到e.target as TextField?相反,考虑到它实际上是一个类的静态成员,你不能使用_output 吗?
  • 好吧,假设您需要不止一个 textField 来自动滚动 - 那么您将有两行 addEventListener(Event.CHANGE,scrollAllDown) 到两个不同的 TextField,并确定 which TextField 有发送事件,您需要处理e.target。
  • 这不起作用:appendText 不会在 以编程方式更改文本时调度 Event.CHANGE。
  • 好的,去研究一个方法。这似乎并不容易。我实际上认为这个功能是嵌入的。也许您应该在TextField 的子类中重写appendText() 函数以手动调度此事件,或者直接执行自动滚动。 public class OutputTF extends TextField { ... override public function appendText(text:String):void { super.appendText(text); this.scrollV=this.maxScrollV; } ... }
  • 您也可以从附加文本的代码中手动调度 CHANGE。
【解决方案2】:

可以使用 TextField 的 scrollV 和 maxScrollV 属性:

var _output:TextField = new TextField();
for (var i:int = 0; i < 100; ++i) {
    _output.appendText("Hello World!");
    //set vertical scroll position to max value
    _output.scrollV = _output.maxScrollV;
}

【讨论】:

    猜你喜欢
    • 2016-11-13
    • 2016-09-15
    • 2018-08-21
    • 2012-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多