【问题标题】:Does ActionScript 3 have some sort of event delegation system?ActionScript 3 是否有某种事件委托系统?
【发布时间】:2012-01-10 14:11:20
【问题描述】:

我有一个包含许多图像的容器。我不想在每个图像上为单击和其他鼠标事件添加侦听器,而是只想在图像的父级上侦听这些事件。

这可能吗?

【问题讨论】:

  • 是的,因为 AS 支持冒泡,所以可以这样做,但是您必须使用其他人的库,或者自己滚动,因为没有内置方法。跨度>
  • 如果我可以否决评论,我会的。

标签: actionscript-3 event-delegation


【解决方案1】:
container.addEventListener(MouseEvent.CLICK, clickHandler);
private function clickHandler(e:MouseEvent):void {
  trace(e.currentTarget); // references container
  trace(e.target); //references container's child or container itself depending on what has been clicked 
}

【讨论】:

    【解决方案2】:

    如果我正确理解您的问题,那是完全可能的。所以假设你有类似的东西:

    parent.addChild(new Child());
    parent.addChild(new Child());
    parent.addChild(new Child());
    parent.addChild(new Child());
    

    那么你应该能够将事件监听器绑定到父级:

    parent.addEventListener(MouseEvent.CLICK, handleClick);
    

    然后你的处理程序应该看起来像

    private function handleClick(e:MouseEvent) {
        // cast the target of the event as the correct class
        var clickedChild:Child = Child(e.target); 
    
        // Do whatever you want to do.
    }
    

    您还可以将其与 addEventListener 的 useCapture 参数结合使用,以将事件附加到事件的捕获端而不是冒泡端。并且还使用 Event 上的.stopPropagation() 方法来阻止任何其他事件处理程序也被触发......

    但是如果你不知道更多关于你想要做什么的情况下,很难说是否需要使用这些。但希望这会推动您朝着正确的方向前进。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-02
      • 1970-01-01
      相关资源
      最近更新 更多