关于actionscript 3.0事件流的小疑问?
我是一名初学者,我想知道事件流的捕获阶段,冒泡阶段究竟是干什么的?为什么会有这两个阶段?最好能举一个例子加以说明。我想的是假如我用鼠标单击屏幕上一个红色的方块,事件目标就...
我是一名初学者,我想知道事件流的捕获阶段,冒泡阶段究竟是干什么的?为什么会有这两个阶段?最好能举一个例子加以说明。
我想的是假如我用鼠标单击屏幕上一个红色的方块,事件目标就应该是该红色的方块。对于捕获阶段,那么该单击事件就是从舞台传到该红色的方块。但我想我的鼠标是直接点击的红色的方块,与舞台没有关系啊!怎么就存在捕获阶段了,我始终想不通。
希望大家用最简单的语言帮我解释一下,不要粘贴复制,因为那些官方语言我已经看了无数遍了,还是看不懂。 展开
我想的是假如我用鼠标单击屏幕上一个红色的方块,事件目标就应该是该红色的方块。对于捕获阶段,那么该单击事件就是从舞台传到该红色的方块。但我想我的鼠标是直接点击的红色的方块,与舞台没有关系啊!怎么就存在捕获阶段了,我始终想不通。
希望大家用最简单的语言帮我解释一下,不要粘贴复制,因为那些官方语言我已经看了无数遍了,还是看不懂。 展开
2个回答
展开全部
这样可以在事件流的各阶段去处理执行的函数啊。
假设你有一个影片剪辑实例名为mc,mc里面有一个按钮(实例名为btn)。现在你要实现这样的功能:当你点中mc中的btn的时候,mc整体位置往右移20;点中btn以外的位置的时候mc整体位置往下移动20,但是不可以同时往两个方向移动。
如果你同时给mc和mc.btn都注册了鼠标点击的侦听,那么你点中mc.btn的时候,同时也会响应点中mc的鼠标事件,因为mc.btn是mc的一部分,mc会同时往右和往下移动20。
这时候你可以通过冒泡阶段来做一点手脚,让mc收不到事件流的通知。事件侦听器一般默认是在冒泡阶段来执行事件函数。如果你看过并理解了有关事件流的资料,你应该理解当前事件流是这样的:
捕获阶段 stage → mc → mc.btn
冒泡阶段 mc.btn → mc → stage
可以看出在冒泡阶段的时候,mc.btn比mc先获得事件流的通知。
事件对象中,有stopImmediatePropagation() 和 stopPropagation()这两个方法,都是能够阻断事件流的冒泡过程(二者有写区别,这里不阐述,可以去参帮助文档)。
详细代码
mc.addEventListener(MouseEvent.CLICK,mcClick);
mc.btn.addEventListener(MouseEvent.CLICK,btnClick);
function mcClick(e:MouseEvent)
{
mc.x+=20;
}
function btnClick(e:MouseEvent)
{
e.stopPropagation()//当鼠标点击在按钮上时,阻断冒泡阶段的事件流,mc将收不到通知,mc.x+=20 也不会被执行。
mc.y+=20;
}
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询