转自http://blog.5d.cn/user12/dzxz/200807/490586.html
侦听的步骤:
1、用户( Listener ) 将 自己 添加到 事件源 的用户名单(目录)中去。 用户.addEventListener( 事件源.事件, 处理函数 );
2、当事件发生时,事件源将消息发送给订阅了该事件的用户。(通过查找用户名单,通知每一个名单上的用户)
3、系统按照事先的“约定”,执行相关的函数。
特点:
事件源 可以同时向多个用户发送消息,或者说被多个用户观注(侦听)。(所以是侦听对象?)
用户 可以同一时间接收不同的消息,或者说侦听不同的事件,所以将消息的用户也称侦听器。
用户与用户之间没有必然的关系,接收同一消息的前后次序由系统决定,基本上是同时收到消息。
具体到一个对象,有可能既是 某些消息的发出者(事件源),又是某些事件的接收者(侦听器)。
关于鼠标事件:
当显示对象中具有实际的内容时,它才能感受(侦听)到(它自己的)鼠标相关的事件。
当鼠标在 显示对象中完整的进行了一次按下、抬起之后,才会触发 Click 事件。
在对象的外面按下,里面抬起时,只触发 MouseUp 事件。
在对象的里面按下,外部抬起,只触发 MouseDown 事件。(也就是说 有效的按下 和 有效的抬起 并不总是同时出现)
Click 事件总是在 MouseUp 事件之后才发生的。
如果希望在全屏中实现随意画线,那么应该通过 stage 属性去侦听发生在舞台上的鼠标事件。
stage 是显示对象的一个属性,通过它可以访问舞台的相关属性内容。
例一: 下面的类当做是文档类时,可以在舞台的所有位置进行画线,因为它是对舞台上的鼠标事件进行的侦听。
package {
import flash.display.Sprite;
import flash.events.MouseEvent;
public class StageDraw extends Sprite {
// Flag to indicate whether the mouse is in draw mode
private var _drawing:Boolean;
public function StageDraw( ) {
// Configure the line style
graphics.lineStyle( 2, 0xFFCC33 );
// Drawing is false until the user presses the mouse
_drawing = false;
// Add the mouse listeners on the stage object to be
// notfied of any mouse event that happens while the
// mouse is over the entire movie
stage.addEventListener( MouseEvent.MOUSE_DOWN, startDrawing );
stage.addEventListener( MouseEvent.MOUSE_MOVE, draw );
stage.addEventListener( MouseEvent.MOUSE_UP, stopDrawing );
}
public function startDrawing( event:MouseEvent ):void {
// Move to the current mouse position to be ready for drawing
graphics.moveTo( mouseX, mouseY );
_drawing = true;
}
public function draw( event:MouseEvent ):void {
if ( _drawing ) {
// Draw a line from the last mouse position to the
// current one
graphics.lineTo( mouseX, mouseY );
}
}
public function stopDrawing( event:MouseEvent ):void {
_drawing = false;
}
}
}
例二:下面的代码,与库中的元件进行链接后,在元件的可显示区域内,可进行画线,因为,这里侦听的是可显示元件上发生的鼠标事件,只有当元件中的实质内容时,才会触发鼠标的相关事件。
package
{
import flash.display.MovieClip;
import flash.events.Event ;
import flash.events.MouseEvent;
public class DrawLine extends MovieClip
{
private var mc:MovieClip ;
public function DrawLine()
{
mc = new MovieClip();
addChild( mc );
addEventListener(MouseEvent.MOUSE_DOWN, onMD);
}
public function onMD(evt)
{
trace( "mouse down");
mc.graphics.lineStyle(3, 0xffffff, 1);
mc.graphics.moveTo( mouseX, mouseY);
addEventListener(MouseEvent.MOUSE_MOVE, onMouseMove);
addEventListener(MouseEvent.MOUSE_UP, onMU );
}
public function onMouseMove( Evt:MouseEvent )
{
mc.graphics.lineTo(mc.mouseX, mc.mouseY );
//trace( mouseX,mouseY );
}
public function onMU(evt)
{
trace( "mouse up");trace( "clicked ");
removeEventListener(MouseEvent.MOUSE_MOVE, onMouseMove);
removeEventListener(MouseEvent.MOUSE_UP, onMU );
}
}
}
事件处理函数需要指定一个参数,该参数为 Event 类型,通过 target 属性和currentTarget 属性,可以访问到发生事件的直接对象,代码形式为 evt.target evt.currentTarget 。
示例三: 分听侦听舞台事件 和 元件中的事件,可以发现两者的作用范围不同。
package
{
import flash.display.Sprite;
import flash.events.MouseEvent;
public class Listener extends Sprite
{
function Listener()
{
//侦听舞台上发生的鼠标点击,全部屏幕范围均有效
stage.addEventListener( MouseEvent.MOUSE_DOWN, onMD );
//侦听发生在元件有效范围上的点击,只有在元件的实质内容上才发生。
addEventListener( MouseEvent.MOUSE_DOWN, onMouseDown);
}
private function onMD (evt)
{
trace( "mouse down on the stage" );
}
public function onMouseDown(evt)
{
trace( "mouse down on the sprite" );
}
}
}
分享到:
相关推荐
初级AS3学习,AS3.0的EventListener事件侦听
Actionscript3.0通过flvPlayer加载外部视频文件,文件的播放与暂停等控制功能 。
事件侦听器就是用来处理事件的,可以接收事件携带的信息,并在接收的该事件后执行特定的代码。 那么这个事件侦听器到底能有什么作用的,现在我就来给大家介绍下事件侦听器的一个用法: 在javascript中我们会经常绑定...
动作脚本事件处理函数共有两类:事件处理函数方法和事件侦听器,要明白事件侦听器的概念,必须首先理解线性编程和事件驱动编程的区别;
自学AS的语言和方法,语句块,函数定义,包,类,事件侦听器
摘要 1、绪论 ... 2、AS3的事件侦听机制 3、在AS3中改变对象的位置和缩放对象 4、演示 3、XML的运用 1、新建FLASH 2、创建 viewer.as 的类 3、创建pics,xml 的文件 4、总结 5、致谢 6、参考文献
as3组建帮助 目标读者 本手册的目标读者是要构建 Flash 应用程序并希望使用组件加快开发速度的开发人员。您应 当已经熟悉如何开发 Flash 应用程序和编写 ActionScript。 如果对编写 ActionScript 还不够熟练,您可以...
Gaia强大的自定义和事件侦听功能使用户可以很方便的更改网站逻辑。此外Gaia还整合了SWFAddress,GreenShock Tween,采用MVC,Singleton等设计模式和业界流行的最佳解决方案(Best Practice)。Gaia还提供了配套的...
每个信号对应一个唯一的事件,该事件包含其自己的侦听器列表和事件数据类型。 每个事件只需要一个Signal实例,不需要额外的常量或子类。 事件侦听器直接注册到信号,而无需事件管理器和事件类型的基于字符串的表示...
xapi事件 使用xAPI规范管理电子学习应用程序中的学生互动安装$ npm install @elearntics/xapi-events用法选项1:将xapiEvent导入为模块import * as xapiEvents from '@elearntics/xapi-events' ;选项2:将脚本加载到...
//并添加事件侦听器侦听时间对象的时间事件使敌人显示 enemyTimer.addEventListener(TimerEvent.TIMER,showEnemy); //启动计时器; enemyTimer.start(); } //使敌人以一定的时间间隔随机出现 ...
Signals最初是由在AS3中实现的。 信号受Qt中C#事件和信号/插槽的启发。 句法// with DOM EventListenerbutton . addEventListener ( "click" , onClick ) ;// Signal equivalent; past tense is recommendedbutton...
举例说明了事件的三个阶段,事件的派发,事件的侦听,事件的拦截,自定义事件等相关知识点. 以上知识点在Demo中都有体现,初学者请仔细分析代码,加强理解,多调试、修改、验证以加深自己对事件机制的认识.
ASFbotTelegram Bot用python编码... --host :ASF IPC主机(默认为127.0.0.1 ) --port :ASF IPC侦听端口(默认为1242 ) --password :ASF IPC密码(如果已设置一个) --verbosity :日志详细程度(DEBUG,INFO,WARN
而相应某个事件的函数就叫事件处理程序(或事件侦听器)。为事件指定处理程序的方式有好几种。 一:HTML事件处理程序。 如: 代码如下: [removed] function show(){ alert(‘hello world!’); } [removed] &...
1.事件流的区别 IE采用冒泡型事件 Netscape使用捕获型事件 DOM使用先捕获后冒泡型事件 示例: 代码如下: <body> <div> <...事件侦听函数的区别 IE使用: [Object].attachEvent(“name_of_event_han
听众 ServletContextListener,sesson,请求侦听器
3.动态文本操作,这个功能是我一直期待的,以前一直想用代码操作动态文本里所有字出现的特效,而不用在一个字一个字的去操作,没想到用这个插件实现了,官方提供了3种字出现时的特效,文本里的字出现的效果都是不...
创建一个事件并连接两个侦听器 import eventkit as ev def f ( a , b ): print ( a * b ) def g ( a , b ): print ( a / b ) event = ev . Event () event += f event += g event . emit ( 10 , 5 ) 创建一个...