Flex的事件(十五)

1.     了解键盘事件的优先权
你过你同时为一个控件和包含它的容器定义了 keyUp keyDown 事件监听器,你将注意到键盘事件会被调度到每一个组件上的监听器,因为事件冒泡。唯一的不同更在于 KeyBordEvent 对象的 currentTarget 属性发生了变化。
 
在下面的例子中, my_vbox 容器和 my_textinput 控件都调度 keyUp 事件到 keyHandler() 事件处理器函数:
 
<?xml version="1.0"?>
<!-- events/KeyboardEventPrecedence.mxml -->
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" creationComplete="initApp();">
<mx:Script><![CDATA[
private function initApp():void {
application.addEventListener(KeyboardEvent.KEY_UP, keyHandler);
my_vbox.addEventListener(KeyboardEvent.KEY_UP, keyHandler);
my_textinput.addEventListener(KeyboardEvent.KEY_UP, keyHandler);
// Set the focus somewhere inside the application.
my_textinput.setFocus();
}
private function keyHandler(event:KeyboardEvent):void {
ta1.text += event.target + "(" + event.currentTarget + "): " +
event.keyCode + "/" + event.charCode + "\n";
}
]]></mx:Script>
<mx:VBox id="my_vbox">
<mx:TextInput id="my_textinput"/>
</mx:VBox>
<mx:TextArea id="ta1" height="300" width="550"/>
</mx:Application>
 
当你检查输出,你将注意到 target 属性始终是相同的,因为它引用了原始的调度者 ( 在这个例子中是 my_textinput) ,但是 currentTarget 属性变了当前的节点。
 
事件监听器的调用顺序是由对象等级而不是 addEventListener() 方法的调用顺序决定的。子控件会先于容器调度事件。在这个例子中,文本输入控件第一个调度事件,接下来是 VBox 调度事件,最后是 application 调度事件。
 
当处理一个可以被操作系统或浏览器识别的按键或组合键时,操作系统或浏览器会通常会率先处理事件。例如,在 IE 浏览器中,当按下 Control+w 关时,窗口将会关闭。如果你在程序中捕获这个组合键,那么 IE 的用户将永远不知道程序的这个功能,浏览器已经在 ActiveX Flash Player 有机会响应事件之前关闭了浏览器。
 
2.     处理与键盘相关的鼠标事件
MouseEvent 类和所有 MouseEvent 的子类都有下面的属性来使你能够确定当鼠标事件发生时是否有一个特殊的键被按下:
 
altKey: 如果当用户按下鼠标建时 Alt 键已经被按住,则返回 true ,否则返回 false
ctrlKey: 如果当用户按下鼠标建时 Control 键已经被按住,则返回 true ,否则返回 false
shiftKey: 如果当用户按下鼠标建时 Shift 键已经被按住,则返回 true ,否则返回 false
 
在下面的例子中,当用户在按下 Shift 键的同时点击鼠标,按钮控件将被删除:
 
<?xml version="1.0"?>
<!-- events/DetectingShiftClicks.mxml -->
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" creationComplete="initApp();">
<mx:Script><![CDATA[
import mx.controls.Button;
private function initApp():void {
var b1:Button = new Button();
b1.label = "Button 1";
var b2:Button = new Button();
b2.label = "Button 2";
b1.addEventListener(MouseEvent.CLICK, removeButtons);
b2.addEventListener(MouseEvent.CLICK, removeButtons);
vb1.addChild(b1);
vb1.addChild(b2);
}
private function removeButtons(event:MouseEvent):void {
if (event.shiftKey) {
vb1.removeChild(Button(event.currentTarget));
} else {
event.currentTarget.toolTip = "Shift+click to remove this button.";
}
}
]]></mx:Script>
<mx:VBox id="vb1"/>
<mx:Button id="resetButton" label="Reset" click="initApp();"/>
</mx:Application>
 

你可能感兴趣的:(事件,职场,Flex,event,休闲)