[竖版]第2讲 - 键盘事件
- 格式:pdf
- 大小:671.90 KB
- 文档页数:7
Action Script 3.0 键盘事件键盘事件都是由KeyboardEvent类来管理,其只有keyDown和keyUp两个事件,分别表示按下键和释放键。
这两个事件的事件名是由KeyboardEvent类的类发展KEY_DOWN 和KEY_UP来表示。
KeyboardEvent类同时定义了一些属性和方法来辅助键盘事件的处理,其属性如表6-8所示。
其中,keyCode属性最常用,它通常用于判断某个键是否按下或释放。
例如,keyDown 事件只是判断键是否按下,如果要判断某个键是否被按下,就需要使用keyCode属性来判断。
当某个键按下时,如果按键的keyCode属性等于键控代码,则说明该键被按下,对于keyUp事件的处理也是一样。
KeyboardEvent类的方法如表6-9所示。
表6-9 KeyboardEvent类的方法例如,创建一个名称为mc的猴子跑步影片剪辑元件,并将其拖入到舞台中。
然后,使用KeyboardEvent类的keyCode属性来判断是否按下左右方向键,并调用keyDownHandler ()函数来制作猴子的移动及方向,代码如下所示。
stage.addEventListener(KeyboardEvent.KEY_DOWN, keyDownHandler);//侦听键盘按下事件,并调用keyDownHandler()函数function keyDownHandler(event:KeyboardEvent):void {if (event.keyCode==39){ //当用户按下右方向键mc.x+=5; //名称为mc的元件沿x轴坐标向右移动}else if(event.keyCode==37){ //当用户按下左方向键mc.x-=5; //名称为mc的元件沿x轴坐标向左移动}}为“猴子”影片剪辑元件设置【实例名称】为“mc”。
然后,将上面的代码放在“AS”图层的第一帧中,预览效果如图6-1所示。
键盘与文本事件(keydown、keypress和keyup触发顺序
及其区别)
键盘事件
键盘事件主要有三个,也是平常开发过程中,尤其是在文本框输入时,非常常用的。
•keydown:当用户按下键盘上的任意键时触发,如果按住不放会重复触发。
•keypress:当用户按下键盘上的字符键时触发,如果按住不放会重复触发。
(ESC 键也会触发)
•keyup:当用户释放键盘上的键时触发。
虽然所有的元素都支持上面的三个事件,但是只有在用户通过文本输入时才最常用。
触发顺序:
当用户按了一个键盘上的字符键时,首先触发 keydown 事件,然后紧跟着时keypress 事件,最后会触发keyup 事件。
其中,keydown 和keypress 都是在文本框发生变化之前被触发的;而keyup 是在文本框已经改变之后触发的。
修改键:
键盘事件中的修改键与鼠标事件的修改键类似。
而且键盘事件的事件对象中也有shiftKey、ctrlKey、altKey 和metaKey 属性。
文本事件
文本事件只有一个:
textInput:这个事件是对 keypress 的补充,用意是在将文本显示给用户之前更容易拦截文本。
在文本插入文本框之前会触发textInput 事件。
详细介绍见另一篇博客:
https:///TalonZhang/article/details/84447459。
详解键盘事件(keydown,keypress,keyup)⼀、键盘事件基础1、定义keydown:按下键盘键keypress:紧接着keydown事件触发(只有按下字符键时触发)keyup:释放键盘键顺序为:keydown -> keypress ->keyup2、⽰例3、详解1)⽤户按下键盘上的字符键时⾸先会触发keydown事件然后紧接着触发keypress事件最后触发keyup事件如果⽤户按下了⼀个字符键不放,就会重复触发keydown和keypress事件,直到⽤户松开该键为⽌2)当⽤户按下⾮字符键时⾸先会触发keydown事件然后就触发keyup事件如果⽤户按下了⼀个⾮字符键不放,就会重复触发keydown事件,直到⽤户松开该键为⽌3)在keyup事件中⽆法阻⽌浏览器默认事件,因为在keypress时,浏览器默认⾏为已经完成,即将⽂字输⼊⽂本框(尽管这时还没显⽰),这个时候不管是preventDefault还是returnValue = false,都不能阻⽌在⽂本框中输⼊⽂字的⾏为,如要阻⽌默认⾏为,必须在keydown或keypress时阻⽌4)发⽣keypress事件意味着按下的键会影响到屏幕中⽂本的显⽰,即在所有浏览器中,按下能够插⼊或删除字符的键都会触发keypress事件⼆、键码和键盘事件系统功能键:Esc、Tab、CapsLk、Shift、Ctrl、Alt、Enter、Backspace、Print Screen、Scroll Lock、Pause Break、Insert、Delete、Home、End、Page Up、Page Down, F1 ~ F12,Num Lock、The Arrow Keys1、键盘中的键分为字符键 (可打印) 和功能键 (不可打印)keypress⽀持的系统功能键:Firefox:Esc、Enter、Backspace、Pause Break、Insert、 Delete、Home、End、Page Up、Page Down、F1 through F12、The Arrow Keys、上下左右键Chrome / Oprea / Safari :EnterIE:Esc、Enter除了 Firefox,其他chrome、oprea、safari、IE 上下左右键不会触发kepress2、keyCode(键码)、which、charCode(字符编码)简写记忆:keydown: 获得keyCode, charCode=0keyup: 获得keyCode, charCode=0keypress: 字符keyCode=0,获取charCode值,反之获取keyCode,charCode=0详述:event对象包含⼀个keyCode属性和⼀个charCode属性当捕捉的是keydown和keyup事件时,keyCode表⽰的就是你具体按的键(也称为virtual keycode),charCode为0当捕捉的是keypress事件时,keyCode为0,charCode指的是你按下的字符(⽽ IE 只有⼀个KeyCode属性,它指的是你键⼊的字符(charactercode))鉴于IE 和 FF中的区别,建议只使⽤keydow和keyup事件3、keypress 和 keydown / keyup 的区别区别简述1)keypress对中⽂输⼊法⽀持不好,⽆法响应中⽂输⼊2)keypress⽆法响应系统功能键(如delete,backspace)3)由于前⾯两个限制,keydown和keyup对keyCode不敏感区别详解对系统功能键的响应⽅⾯keypress事件不能对系统功能键(对中⽂输⼊法不能有效响应)进⾏正常的响应keydown和keyup均可以对系统功能键进⾏有效的拦截,但事件截获的位置不同keyCode对字母的⼤⼩写敏感程度keypress事件的keyCode对字母的⼤⼩写敏感keydown、keyup事件不敏感主附键盘的数字键敏感程度keypress事件的which值⽆法区分主键盘上的数字键和附键盘数字键的keydown、keyup事件的which值对主附键盘的数字键敏感4、需要注意的地⽅1)英⽂输⼊法所有浏览器都⽀持这三个事件2)中⽂输⼊法(浏览器之间表现得不太⼀致)IE,Chrome,Safari:触发keydown和keyup,不触发keypressFirefox:⾸次按下时触发keydown,不触发keypress在停⽌输⼊并改变⽂本框内容(如按下回车或者空格键)后会触发keyup(只有在触发keyup事件才能获得修改后的⽂本值)Opera:keydown, keypress和keyup都不触发3)⼤⼩写⼤写:keydown、keypress(字母,主键盘数字、回车)、keyup的which值相等⼩写:kepress获取的which不同于keydown、keyup5、keyCode对照表。
215图11-36 例11.12运行界面 图11-37 例11.12 “打印”对话框 11.9 键盘事件和鼠标事件键盘和鼠标对于Windows 应用程序来说是必需的,尤其是在图形图像处理的程序设计中更为重要,本节主要介绍键盘事件和鼠标事件的应用。
11.9.1 键盘事件VB 中定义了三个键盘事件过程,分别对应KeyPress (按下再松开)、KeyDown (按下)和KeyUp (松开)事件。
1.KeyPress 事件当一个对象具有焦点时,用户按下再松开一个可返回ASCII 码的按键,则触发KeyPress 事件。
KeyPress 键盘事件过程的语法格式如下:PrivateSub Object_KeyPress([Index As Intrger,] KeyAscii As Integer)(1)Object:响应事件的对象。
窗体用Form,其他控件用控件名。
(2)Index:当对象为控件数组时,参数值是控件数组元素的下标。
(3)KeyAscii:当对象为单个控件时,返回按键对应的ASCII 码(整数),且该参数不能省略。
若改变KeyAscii 的值,可以给对象发送一个不同的字符;若KeyAscii 的值改变为0,将取消按键,对象接收不到字符。
(4)该事件可以引用任何可打印的标准键盘字符,包括大小写字母、数字、标点、运算符以及Enter、Backspace、Tab 和Esc 键等,但其对方向键等不产生ASCII 码的按键无响应。
(5) KeyPress 键盘事件过程在截取TextBox 或ComboBox 控件中的按键时非常有用,它可以立即测试按键的有效性或在字符输入时对其进行格式处理。
【例11.13】编写KeyPress 事件过程,保证在文本框中只能输入字母,且无论大小写,都必须转换为大写字母显示。
解题思路:在Text1的KeyPress 事件中,将键盘的ASCII 码转换为相应的字符,再将其转换。
電腦動畫製作(鍵盤事件)使用者對鍵盤及滑鼠的操作是VB程式主要的事件來源,而VB提供了以下三個事件讓使用者能輕易地完成鍵盤處理工作。
圖像移動方法之比較程式碼:Private Sub Form_KeyPress(KeyAscii As Integer) Select Case Chr(KeyAscii)Case "a"Image1.Top = Image1.Top – 100 或Image1.Move Image1.Left, Image1.Top - 100 Case "s"Image1.Top = Image1.Top + 100 或Image1.Move Image1.Left, Image1.Top + 100 Case "k"Image1.Left = Image1.Left – 100 或Image1.Move Image1.Left - 100Case "l"Image1.Left = Image1.Left + 100 或Image1.Move Image1.Left + 100End SelectEnd Sub且當飛機移出表單四周任一邊界時,則會從另一邊出現。
程式碼:Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)If Image1.Left > Form1.ScaleWidth Then Image1.Left = 0 ‘出右邊界 If Image1.Left < 0 Then Image1.Left = Form1.ScaleWidth ‘出左邊界 If Image1.Top > Form1.ScaleHeight Then Image1.Top = 0 ‘出下邊界 If Image1.Top < 0 Then Image1.Top = Form1.ScaleHeight ‘出上邊界 End Sub'亦可利用Select Case 方式加以改寫===>Select Case KeyCode Case 39 '右移Image1.Left = Image1.Left + 100 Case 37 '左移Image1.Left = Image1.Left - 100 Case 40 '下移Image1.Top = Image1.Top + 100 Case 38 '上移Image1.Top = Image1.Top - 100 Case 35 ‘End 鍵,結束程式 End End SelectIf KeyCode = vbKeyRight Then ‘右移Image1.Move Image1.Left + 100ElseIf KeyCode = vbKeyLeft Then ‘左移 Image1.Move Image1.Left – 100ElseIf KeyCode = vbKeyDown Then ‘下移Image1.Move Image1.Left, Image1.Top + 100ElseIf KeyCode = vbKeyUp Then ‘上移Image1.Move Image1.Left, Image1.Top – 100ElseIf KeyCode = vbKeyEnd Then '按下End 鍵,結束程式 End End IfEX1:利用「↑」、「↓」、「←」、「→」按鍵,使飛機能上、下、左、右移動,當飛機移出表單四周任一邊界時,則會從另一邊出現,且按下「空白鍵」可任意發射子彈,按下「End」則結束程式。
事件类型-键盘事件类型键盘事件⽤来描述键盘⾏为,主要有keydown、keypress、keyup三个事件keydown 当⽤户按下键盘上的任意键时触发,如果按住不放的话,会重复触发该事件keyup 当⽤户释放键盘上任意键时触发keypress 当⽤户按下键盘上的字符键时触发,按下功能键时不触发。
如果按住不放的话,会重复触发该事件注意:1. 键盘事件必须绑定在可以获得焦点的元素上,页⾯刚加载完成时,焦点处于document元素。
2. 系统为了防⽌按键误被连续按下,第⼀次触发keydown事件后,会有500ms的延迟,才会触发第⼆次keydown事件。
keypress事件也存在500ms的时间间隔3. 被系统占⽤的按键不会触发键盘事件,⽐如亮度调节、⾳量调节,另外如果浏览器安装了“快捷键”相关的插件,⾃定义的键盘事件也会被覆盖掉顺序如果⽤户⼀直按键不松开,就会连续触发键盘事件,顺序如下keydownkeypresskeydownkeypress...keyup按键信息键盘事件包括keyCode、key、char、keyIdentifier和修改键共5个按键信息keyCode触发键盘事件时,事件对象的keyCode属性会包含⼀个代码document.onkeydown = function(e) {console.log(e.keyCode)}具体键值可key触发键盘事件时,key属性会包含⼀个字符串。
如果按下的是字符键,key值就是相应的⽂本字符;如果不是字符键,key值就是相应的键名document.onkeydown = function(e) {console.log(e.key)}修改键修改键指的是Shift、Ctrl、Alt和Meta(Meta在Windows键盘中是windows键,在苹果机中是command键)。
DOM规定了4个属性,表⽰这些修改键的状态:shiftKey、ctrlKey、altKey和metaKey。
前端学习(53)~键盘事件⿏标的拖拽事件拖拽的流程:(1)onmousedown:当⿏标在被拖拽元素上按下时,开始拖拽;(2)onmousemove:当⿏标移动时被拖拽元素跟随⿏标移动;(3)onmouseup:当⿏标松开时,被拖拽元素固定在当前位置。
⿏标的滚轮事件onmousewheel:⿏标滚轮滚动的事件,会在滚轮滚动时触发。
但是⽕狐不⽀持该属性。
DOMMouseScroll:在⽕狐中需要使⽤ DOMMouseScroll 来绑定滚动事件。
注意该事件需要通过addEventListener()函数来绑定。
键盘事件事件名onkeydown:按键被按下。
onkeyup:按键被松开。
注意:如果⼀直按着某⼀个按键不松⼿,那么,onkeydown事件会⼀直触发。
此时,松开键盘,onkeyup事件会执⾏⼀次。
当onkeydown连续触发时,第⼀次和第⼆次之间会间隔稍微长⼀点,后续的间隔会⾮常快。
这种设计是为了防⽌误操作的发⽣。
键盘事件⼀般都会绑定给⼀些可以获取到焦点的对象或者是document。
代码举例:<body><script>document.onkeydown = function(event) {event = event || window.event;console.log('qianguyihao 键盘按下了');};document.onkeyup = function() {console.log('qianguyihao 键盘松开了');};</script><input type="text"/></body>判断哪个键盘被按下可以通过event事件对象的keyCode来获取按键的编码。
此外,event事件对象⾥⾯还提供了以下⼏个属性:altKeyctrlKeyshiftKey上⾯这三个属性,可以⽤来判断alt、ctrl、和shift是否被按下。
第二讲事件处理图形用户界面是静态的,它应该能够响应用户的操作。
比如,当用户在GUI上输入一个字符或点击鼠标,都会发生事件,程序根据事件类型作出反应就是事件处理。
2.1 什么是事件在Java 1.1版之前事件处理采用事件传递模型,这种方法有一定的缺点,因此从Java 1.1版开始,Java的事件处理采用了新的事件处理模型,我们称为事件代理模型(event delegation model)。
尽管在Java 2中仍然支持两种模型,但推荐使用新的事件模型。
所谓事件代理模型就是将事件的处理从事件源对象代理给一个或多个称为事件监听器(listener)的对象,事件由事件监听器处理。
事件代理模型把事件的处理委托给外部实体进行处理,实现了事件源和监听器分离的机制。
事件代理模型涉及到三种对象:事件源、事件和事件监听器。
①事件源(event source):产生事件的对象,一般来说可以是组件,如按钮、对话框等。
当这些对象的状态改变时,就会产生事件。
事件源可以是可视化组件,也可以是计时器等不可视的对象。
②事件(event):描述事件源状态改变的对象。
如按钮被点击,就会产生ActionEvent 动作事件。
③事件监听器(listener):接收事件并对其进行处理的对象。
事件监听器对象必须是实现了相应接口的类的对象。
Java的事件处理模型如图1所示。
首先在事件源上注册事件监听器,当用户行为触发一个事件时,运行时系统寻找事件监听器对象来处理事件。
图 1 Swing事件处理模型为了实现事件处理,Java定义了大量的事件类,这些类封装了事件对象。
Swing组件可产生多种事件,如点击按钮、选择菜单项会产生动作事件(ActionEvent),关闭窗口会产生窗口事件(WindowEvent)等。
java.awt.A WTEvent是EventObject类的子类,同时又是所有组件A WT事件类的根类,该类中定义了public int getID()方法,它返回事件的类型。