AS3 event stopImmediatePropagation() stopPropagation()用法以及区别

ASCHM:as3 api参考chm AS3CHM参考手册 如打开空白, 尝试 文件属性 -> 解除锁定 Note: 有反馈说为什么别人的 API 有 80~90M 大小, 而这个才这么几M 会不会缺少很多内容? 首先, 实际上原 Adobe_API_Zip 包由于是 Ajax 模式, 有一半的文本都是用来布局的, 如果改成框架(frame)模式, 可以完全删掉这些, 只取"内容"即可 其次, 这个 nodejs 脚本会按照配置(config.js), 检测其所关联的文件, 不相关的是不会打包到 CHM 的, 而不是像其它版本一股脑全拖进去 最后, 如果你在左上角(package)窗口找不到应该有的内容, 可以点击 "显示过滤条件" 自已配置 API18 通过更改 config.js 中的 ignores 属性分别打包为: 仅移除了内部的 flash 轻型版(推荐), 不包含 lc, com, ga, coldfusion, 立即下载

<span style="font-family: verdana, 'courier new'; font-size: 14.7px; background-color: rgb(255, 255, 255);">转载如下:</span>

  版权声明 :转载时请以超链接形式标明文章原始出处和作者信息及 本声明 
http://goday.blogbus.com/logs/14062836.html

今天,我也正式宣布,开始成为闪客,以往对macromedia flash的许多头疼问题都被adobe解决了,以往一直否认我喜欢做flash,现在总算可以为adobe flash 自豪。非常有系统的developing方式。RIA 平台, on screen project就不这里说了。

这期带来的是flash极重要元素之一,event事件。在游戏里就是所谓的Trigger. Adobe改良后的,大家谓称的“冒泡机制”。有问题欢迎发问指教。

=思路大纲=

  1. ActionScript 2的问题
  2. AS3解决问题
  3. 结合问题,说明“冒泡”
  4. 冒泡的问题所在以及解决方法


1 - ActionScript 2的问题

stage里有一个mc,mc里有一个btn
点选mc实现拖动mc,鼠标松开停止拖动
点选mc实现mc隐藏。
最容易想到的方法,代码如下:

mc.onPress = function() {
        this.startDrag();
};
mc.onRelease = function() {
        this.stopDrag();
};
mc.btn.onPress = function() {
        mc._visible=false
};

表面来看,这个思路是正确的。(实际上没什么思路可言,很简单的方法。)
实际怎么样?当然是不能实现。
问题:点击btn,不能触发btn的动作!!!!
解释: 因为btn处于mc内部,mc被加上了事件以后,按照as2的事件机制,mc内部的btn甚至是其他的元件都不能接受事件。或者可以认为mc的事件覆盖了mc中其他元件的事件。
从非冒泡机制来说,在btn上点击鼠标,首先接受到点击事件的自然是btn的上一层(也就是mc),然后才是btn元件。Mc先接受到点击事件,触发相关的函数。然后呢?我们要实现的点击btn的效果没了。我们可以认为mc把我们的鼠标点击事件据为私有了,不再往下传递。(如果是冒泡机制的话,这个动作就回继续往下传递到btn,然后btn会执行。)那么这种效果在as2中还能实现么?答案自然是肯定的,不过方法就复杂了。
这里就不讨论了。As3已经成为主流。
但是as3中的冒泡机制,让我们可以简单的解决这样的难题。

2 - AS3解决问题

下面来看as3中怎么实现。
代码如下:

import flash.events.*;
mc.addEventListener(MouseEvent.CLICK,mcfunction);
mc.btn.addEventListener(MouseEvent.CLICK,btnfucntion);

function mcfunction(event:MouseEvent) {
        trace("mc click");
}
function btnfucntion(event:MouseEvent) {
        trace("btn click");
}

看看代码就觉得,好像没用什么特别的解决方法,就加两个侦听函数,就搞定了。
这个代码自然的不能再自然了,就好像做flash 先的安装软件一样。
但是如此自然的代码下面,使AS3的冒泡机制在提供支持。

3 - 结合问题,说明冒泡机制:
Help中有一个冒泡机制的图,相信大家都已经看过了
这里我联系实例,另外做一个图,帮助各位理解。



上图为as2中的执行原理
下图为as3中的执行原理

上图也就是在as3中实现我们文章开始提出的例子的工作原理。
下面详细描述一下

捕获阶段: 
鼠标在btn上发出点击事件,首先捕捉到该事件的事stage.,然后事件往下传递到mc,再到btn..(如果鼠标事件发生在btn按钮中的一个 label上,那么该事件还会继续向下传递,直到找到label元件。)AS2中,一旦找到了可以相应事件的函数,就停止了,不会往下传递。这个道理应该说明白了
目标阶段 :
找到我们的鼠标最底层的目标,也就是btn以后,那么就开始执行btn的侦听函数了。
    如果鼠标事件发生的所在位置,是mc中的btn中的一个label。那么将先执行label的侦听函数。(当然我们的例子中没有label)
冒泡阶段:
执行了目标阶段的侦听函数以后,开始冒泡。
换一个说法是,返回btn的父级元件mc,如果能找到相关的侦听函数,那么就执行,如果没有,就继续往上冒泡到btn的父级元件mc的父级元件stage。看能不能找到相关的侦听函数。

注意一个:首先执行的函数一定是目标对象的侦听函数。就像我们上面的例子一样,点击btn会先trace(“btn click”),然后冒泡到mc,执行trace(“mc click”)..然后继续往上,如果stage我们也加一个侦听函数,执行语句,那么还会继续执行 trace(“stage click”).
到达stage顶层了,冒泡结束。
说到这里,各位看官也应该明白了as3的冒泡究竟是干什么用的了

4 - 冒泡的问题所在以及解决方法 
冒泡也有问题,并不是说它有缺陷,因为出现问题无法避免。
问题在于,
假如在上面的例子中,我们不想在点击btn冒泡阶段中执行mc的侦听函数,我们只想执行btn的侦听函数。怎么解决?
同样的问题延伸出去,可以得到很多扩展和应用。
那么我们需要阻止他的冒泡的时候执行相关的侦听函数。
Chm中的方法有

stopImmediatePropagation():void
防止对事件流中当前节点中和所有后续节点中的事件侦听器进行处理。
stopPropagation():void
防止对事件流中当前节点的后续节点中的所有事件侦听器进行处理。

用来修改我们上面的例子
代码如下:

import flash.events.*;
mc.addEventListener(MouseEvent.CLICK,mcfunction);
mc.btn.addEventListener(MouseEvent.CLICK,btnfucntion);
function mcfunction(event:MouseEvent) {
        trace("mc click");
}
function btnfucntion(event:MouseEvent) {
        trace("btn click");
        event.stopPropagation();//修改在此处。简单一句,解决问题
}

现在可以试试,点击btn运行得到的结果就是

代码:
btn click

说明,已经防止了冒泡阶段中对mc侦听函数的处理。也就没有trace(“mc click”)了


接下来再追究一下这两者的区别:

 

stopImmediatePropagation 防止对事件流中当前节点中和

所有后续节点中的事件侦听器进行处理。此方法会立即生效,并且会影响当前节点中的事件侦听器。

 

stopPropagation  防止对事件流中当前节点的后续节点中的所有事件侦听器进行处理。此方法不会影响当前节点 (currentTarget) 中的任何事件侦听器。

测试代码如下:

public class Main extends Sprite {
		private var _container:Sprite;
		private var _btn:Button;
		public function Main() {
			if (this.stage){
				this.addEventListener(Event.ADDED_TO_STAGE, init);
			}else{
				init();
			}
		}
		
		public function init(e:Event=null):void{
			this.removeEventListener(Event.REMOVED_FROM_STAGE, init);
			
			_container = new Sprite();
			_container.graphics.beginFill(0x000000, 1);
			_container.graphics.drawCircle(20, 20, 100);
			_container.graphics.endFill();
			this.addChild(_container);
			_container.x = 100;
			_container.y = 100;
			
			_btn = new Button(60, 30, '按钮',0xff2300);
			_container.addChild(_btn);
			
			this._btn.addEventListener(MouseEvent.CLICK, onClickBtn);
			this._btn.addEventListener(MouseEvent.CLICK, onClickBtn2);
			this._btn.addEventListener(MouseEvent.CLICK, onClickBtn3);
			this._container.addEventListener(MouseEvent.CLICK, onClickContainer);
			this.addEventListener(MouseEvent.CLICK, onClickStage);
		}
		
		private function onClickBtn(evt:MouseEvent):void{
			evt.stopPropagation();
			trace("click Button");
		}
		
		private function onClickBtn2(evt:MouseEvent):void{
			evt.stopImmediatePropagation();
			trace("click Button 2");
		}
		
		private function onClickBtn3(evt:MouseEvent):void{
			trace("click Button 3");
		}
		
		private function onClickContainer(evt:MouseEvent):void{
			trace("click Container");
		}
		
		private function onClickStage(evt:MouseEvent):void{
			trace("click stage");
		}
		
	}

编译之后的结果是:

click Button
click Button 2

说明了同一个目标处理同一个事件的时候,该事件也有可能是内部ui控件冒泡上来的,所以stopImmediatePropagation()方法是可以阻止冒泡之后所有的事件。而stopPropagation()方法是可以阻止非该目标触发的事件(即冒泡阶段捕获该事件)对象去处理该事件。


AS3.0中文帮助文档 .chm ActionScript3.0是adobe公司推出的面向对象的flash编程语言,非常适合有java,C++,C#等程序员学习并转向基于flash的RIA应用开发,本中文帮助将有助于更高效的了解AS3的核心API。 立即下载

相关推荐

as3中文手册chm版

as3中文手册chm版,开发必备。 ActionScript 3.0 语言和组件参考。

As3中阻止冒泡阶段一劳永逸的办法

大家在开发过程中一定遇到父对象中包含子对象,点击子对象,父对象的监听也会触发的情况,很是头疼    通常解决办法是在子对象的事件加入event.stopPropagation(),这样父类的监听就不会触发,但是如果界面组件很多,写起来会很苦恼,     下面介绍个一劳永逸的解决办法,同时拥有释放对象时一次性清空监听事件的功能 //声明一个事件字典 var _Ev

柒彩工作室 465

Flash AS3 中文API参考手册开发文档93M帮助文件chm函数构造方法说明Flash Builder

Flash AS3 中文API参考手册开发文档93M帮助文件chm函数构造方法说明Flash Builder使用。这份帮助文档是我见过体积最大的。对于CHM文件,有的机器打开空白、或不能直接打开。空白的话,文件属性那里解锁。打不开的话,可能是ghost系统的缘故。本人以前ghost的win7,就精简了chm打开功能,百度也没解决。最后重新换了个版本的ghost.

AS3关于Event

1,一般简单的Dispacther事件: 直接 用 new Event(String $eventType) addEventListener($eventType,Function); -> 这样简单的事件 , 没有必要再去重新自定义 : Event 和 Dispatcher.提高性能 , 节省时间.2,关于 $e.type的运用 :private fun...

weixin_34174132的博客 172

AS3帮助(CHM)

AS3 chm帮助文档

ActionScript3.0语言和组件参考API chm

AS3.0中文帮助,chm格式,方便收藏和查阅,有示例程序代码。

AS3 event flow 事件冒泡机制

AS3 event flow 事件冒泡机制大家好,今天亦乐首次为大家带来flash actionscript转载教程。首先声明出处(我自己是没时间写教程啦,要直接找我讨论还好) 版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明http://goday.blogbus.com/logs/14062836.html  今天,我也正式宣布,

Sorder的专栏 829

AS3.0中文版chm帮助文档_03

注意:因文件大小超过20M,所以分了3个文件上传。 《ActionScript 3.0 语言和组件参考》是 Flash® Player 和 Adobe® AIR® 应用程序编程接口 (API) 的参考手册。包括以下部分: 语言元素,如全局变量、运算符、语句、关键字、指令和特殊类型 包 按字母顺序排列的类元素条目 包含所有条目的索引 附录,比较 ActionScript 2.0 与 ActionScript 3.0 的某些关键语言和 API 的改动 有关错误和警告的附录(带注释) 提供有关使用 XML 支持补间动画和 FLVPlayback 字幕的参考信息的附录。 提供有关将数据库用于 Adobe AIR 的参考信息的附录。

as3的event里面两个被忽略的方法stopImmediatePropagation,stopPropagation,泡冒…

这段抽时间补脑,重温设计模式,再重读api。发现Event事件里面有几个很有用的东西,而我平时都忽略使用。 首先要说的是stopImmediatePropagation和stopPropagation这两个方法。 文档里面是这么解释的:stopImmediatePropagation():void防止对事件流中当前节点中和所有后续节点中的事件侦听器进行处理。stopPropagat...

dengxiao9180的博客 239

Arduino--土壤湿度传感器使用(电阻式)

最近买了一个土壤湿度检测传感器,实物图是这样的: 我买这个模块是想要得到土壤湿度的模拟量。但我买的时候忘了买左边的蓝色模块,我开始以为这个模块是有运放功能的,但实际它是一个电压比较器和一个分压电路。 其模块的接线如图: 该模块的四线是带模拟量输出的,三线的只输出一个到达阈值的标志量。该模块的原理图如下: 该模块的测试原理为:把土壤当成一个可变电阻,随着土壤含水量的增加,土壤电阻减小。而该传感器其实就是两个电极,用来接土壤这个可变电阻。一般湿度的土壤电阻大概在几百K左右,其串连的分压电阻应该在这个数量级。

weixin_41866783的博客 1万+

PMSM无感foc控制(滑模-反正切-PLL)【仿真模型搭建教程】(附模型)

本文主要目的是教大家如何把文献中的公式转换成仿真模型。 首先介绍滑模控制的原理及如何搭建simulink模型。 1.1基于反电势估计位置原理 永磁同步电机在静止坐标系αβ下的电压方程: 扩展反电动势包含转子位置信息,并且αβ轴下扩展反电动势的反正切函数正好就等于位置角theta。 1.2 滑模控制原理(比较重要的点是以电机电流模型推导展开) 通过滑模观测得到鲁棒性比较高的αβ轴下扩展反电动势,并求其反正切函数,得到位置信息。 /*********************...

weixin_44769876的博客 1万+

Event的stopImmediatePropagation和stopPropagation方法

 stopImmediatePropagation()方法 public function stopImmediatePropagation():void 语言版本 : ActionScript 3.0Player 版本 : Flash Player 9 防止对事件流中当前节点中和所

1312

告别SD卡!手把手教你用NVMe硬盘盒给Jetson Orin Nano离线烧录Ubuntu系统

本文详细介绍了如何利用NVMe硬盘盒为Jetson Orin Nano离线烧录Ubuntu系统,替代传统SD卡方案。通过硬件选择、系统镜像准备到烧录命令的全流程解析,帮助开发者提升存储性能与系统稳定性,特别适合嵌入式开发场景。

weixin_30808693的博客 458

event.preventDefault()、event.stopPropagation()、event.stopImmediatePropagation()思考

event.preventDefault() MDN解释: Event接口的preventDefault()方法,告诉user agent:如果此事件没有被显式处理,它默认的动作也不应该照常执行。此事件还是继续传播,除非碰到事件侦听器调用stopPropagation()或stopImmediatePropagation(),才停止传播。 个人理解: 事件后续动作别执行了,如subm...

qq_28842789的博客 3014

【JavaSE】之流程控制与方法

Java基础之Java流程控制与方法相关知识介绍~

小新要变强的博客 5795

AI辅助Android开发:从传统到智能化的技术演进

AI辅助开发的核心在于利用算法模型自动化或优化传统任务。在Android开发中,AI可应用于需求分析、设计、编码、测试和维护各阶段。需求分析:AI工具如基于NLP的模型(例如GPT系列)可解析用户需求文档,自动生成用户故事和原型设计。假设产品需求为“开发一个航班查询应用”,AI能提取关键词,输出UML图或伪代码。代码生成:使用AI代码助手(如GitHub Copilot),工程师输入自然语言描述,AI生成Java/Kotlin代码片段。

郑伟强dev的专栏 137

js中preventDefault 与stopPropagation 及 stopImmediatePropagation的区别

原文:https://codeplanet.io/preventdefault-vs-stoppropagation-vs-stopimmediatepropagation/ Three similar and often confused methods. Let’s explore the different between: Event.preventDefault(

每天进步一点点 1366

OpenClaw实现多agent协作研究

本文介绍了如何构建多agent协作系统,通过飞书机器人实现任务分配与执行。系统包含三个agent:research_leader(总调度)、research_content(内容生成)和research_review(内容审核)。详细说明了agent配置方法(包括创建命令、权限设置)、飞书channel绑定方式,以及通过共享目录和会话机制实现协作。最后展示了应用示例,用户只需向leader机器人下达任务,系统即可自动完成内容生成和审核的全流程。

hhue2007的专栏 615

JS事件冒泡和事件捕获以及event.stopPropagation() 和 event.stopImmediatePropagation() 的区别分析

一、事件的三个阶段 在 DOM 事件流中,事件分为三种阶段:捕获、目标、冒泡。 捕获:事件触发的时候,事件顺序从外到内依次触发 目标:事件触发的 DOM 对象本身 冒泡:事件顺序从外到内依次触发 二、事件的执行顺序 非目标元素时: 按照 W3C 标准的事件是:捕获 =》目标 =》 冒泡 例如: 在捕获和冒泡都允许的情况下(addEventListener的第三个参数true为捕获,f...

TheHtmler的博客 922

YOLO26 实例分割技术:Mask 分支与特征融合

YOLO26实例分割技术研究摘要:本文提出了一种基于YOLO架构的高效实例分割方法,通过创新设计Mask分支和特征融合策略解决像素级分割精度、多尺度目标处理等挑战。系统采用共享Backbone提取特征,检测分支输出边界框和类别,Mask分支生成原型Mask和组合系数。核心创新包括:1)原型Mask生成与线性组合机制;2)检测与Mask特征共享;3)结合BCE和Dice的多任务损失函数。实验表明该方法在保持实时性的同时实现了高质量分割,为轻量级实例分割提供了新思路。

一键难忘的博客 248

SAP Gateway 中事务码 /IWFND/MAINT_SERVICE 的用法介绍

本文系统梳理了SAP Gateway中/IWFND/MAINT_SERVICE事务码的核心功能与运维实践。作为OData服务管理中樞,它支持服务注册激活、ICF节点配置、系统别名绑定、批量处理等关键操作。文章详解了服务目录、ICF节点、系统别名的配置要点,提供了批量激活、缓存清理、性能监控等实用技巧,并针对常见陷阱(如传输配置、删除残留)给出解决方案。通过制造业批量激活、零售业OAuth集成等案例,展示了事务码在企业级应用中的实际价值,为SAP Gateway运维提供了一套完整的治理清单。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 302

stopPropagation与stopImmediatePropagation的区别

stopPropagation event.stopPropagation();阻止事件冒泡。 stopImmediatePropagation event.stopImmediatePropagation(); 阻止事件冒泡并且阻止该元素上同事件类型的监听器被触发。例如: 1.没有阻止事件冒泡: import React, { Component } from 'react'; export default class App extends Component { componentDidMount

weixin_45868293的博客 367

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

W3C/JQuery中stopImmediatePropagation和stopPropagation的区别

W3C的DOM-Level-3标准中,event事件对象有stopPropagation和stopImmediatePropagation这2个函数。 DOM3中Event标准:http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html。 JQuery我用的是2.1.1和1.10.2,也支持

aty 2248

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

jquery event.stopImmediatePropagation 和event.stopPropagation

请看文档里对event.stopImmediatePropagation()的描述: Keeps the rest of the handlers from being executed and prevents the event from bubbling up the DOM tree. 从这里可以看出,stopImmediatePropagation做了两件事情: 第一件事:阻止 绑

王星乐的博客 695

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

【jQuery event.stopImmediatePropagation() 权威指南】终结事件流:彻底停止当前及后续所有处理

jQuery事件处理终极指南:stopImmediatePropagation()详解 本文深入解析jQuery事件处理机制,重点介绍event.stopImmediatePropagation()的独特作用。与仅阻止事件冒泡的stopPropagation()不同,stopImmediatePropagation()能同时停止事件冒泡和当前元素上后续所有同级事件处理函数的执行。文章通过对比示例展示了两种方法的区别,并详细说明了stopImmediatePropagation()在解决插件冲突、构建高优先级

weixin_42107409的博客 910

AS3 event flow 事件冒泡机制 以及 stopImmediatePropagation() stopPropagation()用法

http://yzzelliot.spaces.live.com/blog/cns!5428063AEA721F64!875.entry 学了这长时间时间,基本的都不懂 AS3 event flow 事件冒泡机制 以及stopImmediatePropagation() stopPropagation() 大家好,今天亦乐首次为大家带来flash actionscrip...

weixin_30648587的博客 93
上一篇: 关于flash跨域问题
下一篇: crossDomain、allowDomain()、allowScriptAccess三者的关系解析
zhytry
博客等级 码龄16年 1粉丝 1原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值