键盘控制事件应用教程大全


Posted in Javascript onNovember 24, 2006

获取键盘控制事件是实现交互性最有力的方法之一。 

 首先需要了解的是如何初始化该事件,基本语句如下: 

 document.onkeydown = keyDown 

 当浏览器读到这个语句时,无论按下键盘上的哪个键,都将呼叫KeyDown()函数。 

 捕获键盘事件对于不同的浏览器来说有点困难,我们分别的来学习不同浏览器的实现语句。 

 Netscape 

 Netscape的程序实现要比IE麻烦,你必须放一个特别的语句,来使Netscape始终去检查击键事件,如果没有这行语句,击键事件将与按下鼠标事件搞混。特别语句如下: 

 document.onkeydown = keyDown 
if (ns4) document.captureEvents(Event.KEYDOWN) 

 keyDown()函数有一个隐藏的变量--一般的,我们使用字母“e”来表示这个函数。 

 function keyDown(e) 

 变量e表示发生击键事件,寻找是哪个键被按下,使用以下属性: 

 e.which 

 这将给出该键的索引值,把索引值转化成该键的字母或数字值,写: 

 String.fromCharCode(e.which) 

 把上面的语句放在一起,我们可以知道被按下的是哪一个键: 

 function keyDown(e) { 

var keycode = e.which 

var realkey = String.fromCharCode(e.which) 

alert("keycode: " + keycode + " realkey: " + realkey) 

 document.onkeydown = keyDown 
document.captureEvents(Event.KEYDOWN) 

 Internet Explorer 

 IE的程序与Netscape类似,但它不需要e变量,用window.event.keyCode来代替e.which,把键的索引值转化为真实键值方法类似:String.fromCharCode(event.keyCode),程序如下: 

 function keyDown() { 

 var keycode = event.keyCode 

 var realkey = String.fromCharCode(event.keyCode) 

 alert("keycode: " + keycode + " realkey: " + realkey) 

document.onkeydown = keyDown 
document.onkeydown = keyDown 

 适用于两者的程序 

 用两种浏览器检查上述实例,你会发现执行结果不总是一样的,这是因为两种浏览器的键盘代码设置不相同,因此你必须使用单独的代码分别来写这段程序,而毫无别法。 

 建议你要完全忘掉实际的键值,仅仅使用键盘的代码值来工作。下面这段程序将视情况而设置,如果是用IE的话,ieKey生效,把nKey设为0,如果是用Netscape的话,nKey生效,把nKey设为0,然后用一个警示框来显示两者的值: 

 function keyDown(e) { 

if (ns4) { 

 var nKey=e.which; 

 var ieKey=0 


if (ie4) { 

 var ieKey=event.keyCode; 

 var nKey=0 


alert("nKey:"+nKey+" ieKey:" + ieKey) 

document.onkeydown = keyDown 
if (ns4) document.captureEvents(Event.KEYDOWN) 

 使用键盘移动对象 

 下面的程序实现用键盘移动对象,程序将检查哪一个键被按下,从而调用相应的函数来移动对象。本例中,当字母“A”被按下时,对象就开始移动,字母“A”键在nKey中的值是97,ieKey的值为65,在程序中将分别检查这两个值。 

 function init() { 

if (ns4) block = document.blockDiv 

if (ie4) block = blockDiv.style 

block.xpos = parseInt(block.left) 

document.onkeydown = keyDown 

if (ns4) document.captureEvents(Event.KEYDOWN) 

function keyDown(e) { 

if (ns4) { var nKey=e.which; var ieKey=0 } 

if (ie4) { var ieKey=event.keyCode; var nKey=0 } 

if (nKey==97 || ieKey==65) { // 如果"A"键按下 

slide() 



function slide() { 

block.xpos += 5 

block.left = block.xpos 

status = block.xpos // 这一句不一定需要,只是为了检查状态 

setTimeout("slide()",30) 

 增加 "Active"变量 

 上面程序稍微有些不足,对象移动以后就无法使它停止了,而且当你多按几次A键时,物体将运动得越来越快,这里我们来修补它。 

 使用变量"active"来改变这种情况,插入if语句来检查函数是否重复。 

 function slide() { 

if (myobj.active) { 

myobj.xpos += 5 

myojb.left = myobj.xpos 

setTimeout("slide()",30) 


 在这种情况中,slide()函数只有在myobj.active值为真的时候才会工作,当myobj.active值为假时,对象将停止移动。 

 使用 onKeyUp 和 "Active" 变量 

 onkeyup事件和onkeydown事件工作原理相同,用以下语句初始化该事件: 

 document.onkeydown = keyDown 
document.onkeyup = keyUp 
if (ns4) document.captureEvents(Event.KEYDOWN | Event.KEYUP) 

 keyUp() 函数与之相同,当一个键被放开时事件被激发,对象停止移动,并将active变量置为0: 

 function keyUp(e) { 

if (ns4) var nKey = e.which 

if (ie4) var ieKey = window.event.keyCode 

if (nKey==97 || ieKey==65) 

block.active = false 

 下面是比较完整的程序: 

 function init() { 

if (ns4) block = document.blockDiv 

if (ie4) block = blockDiv.style 

block.xpos = parseInt(block.left) 

block.active = false 

document.onkeydown = keyDown 

document.onkeyup = keyUp 

if (ns4) document.captureEvents(Event.KEYDOWN | Event.KEYUP) 

function keyDown(e) { 

if (ns4) {var nKey=e.which; var ieKey=0} 

if (ie4) {var ieKey=event.keyCode; var nKey=0} 

if ((nKey==97 || ieKey==65) && !block.active) { // if "A" key is pressed 

block.active = true slide() 



function keyUp(e) { 

if (ns4) {var nKey=e.which; var ieKey=0} 

if (ie4) {var ieKey=event.keyCode; var nKey=0} 

if (nKey==97 || ieKey==65) { 

block.active = false // if "A" key is released 



function slide() { 

 if (block.active) { 

block.xpos += 5 

block.left = block.xpos 

status = block.xpos // not needed, just for show 

setTimeout("slide()",30) 

 } 

Javascript 相关文章推荐
基于JQuery的数字改变的动画效果--可用来做计数器
Aug 11 Javascript
JS实现图片预加载无需等待
Dec 21 Javascript
鼠标滚轮改变图片大小的示例代码
Nov 20 Javascript
jquery遍历checkbox的注意事项说明
Feb 21 Javascript
JQuery设置时间段下拉选择实例
Dec 30 Javascript
javascript获取四位数字或者字母的随机数
Jan 09 Javascript
JavaScript实现将xml转换成html table表格的方法
Apr 17 Javascript
javascript实现选中复选框后相关输入框变灰不可用的方法
Aug 11 Javascript
整理Javascript基础语法学习笔记
Nov 29 Javascript
详解微信UnionID作用
May 15 Javascript
vue中的.$mount('#app')手动挂载操作
Sep 02 Javascript
vue项目中微信登录的实现操作
Sep 08 Javascript
Javascript操纵Cookie实现购物车程序
Nov 23 #Javascript
删除重复数据的算法
Nov 23 #Javascript
在JavaScript中实现命名空间
Nov 23 #Javascript
js变量作用域及可访问性的探讨
Nov 23 #Javascript
bcastr2.0 通用的图片浏览器
Nov 22 #Javascript
一种JavaScript的设计模式
Nov 22 #Javascript
表单内同名元素的控制
Nov 22 #Javascript
You might like
PHP 加密与解密的斗争
2009/04/17 PHP
php分页思路以及在ZF中的使用
2012/05/30 PHP
php适配器模式介绍
2012/08/14 PHP
php中serialize序列化与json性能测试的示例分析
2013/04/27 PHP
PHP基于IMAP收取邮件的方法示例
2017/08/07 PHP
php创建多级目录与级联删除文件的方法示例
2019/09/12 PHP
select标记美化--JS式插件、后期加载
2013/04/01 Javascript
js 通过cookie实现刷新不变化树形菜单
2014/10/30 Javascript
javascript获取本机操作系统类型的方法
2015/08/13 Javascript
利用fecha进行JS日期处理
2016/11/21 Javascript
JS基于面向对象实现的拖拽功能示例
2016/12/20 Javascript
基于AngularJS实现表单验证功能
2017/07/28 Javascript
js实现随机点名系统(实例讲解)
2017/10/18 Javascript
angularJs-$http实现百度搜索时的动态下拉框示例
2018/02/27 Javascript
Vue 通过自定义指令回顾v-内置指令(小结)
2018/09/03 Javascript
jQuery实现input输入框获取焦点与失去焦点时提示的消失与显示功能示例
2019/05/27 jQuery
弱类型语言javascript中 a,b 的运算实例小结
2019/08/07 Javascript
利用 Chrome Dev Tools 进行页面性能分析的步骤说明(前端性能优化)
2021/02/24 Javascript
[01:33:59]真人秀《加油 DOTA》 第六期
2014/09/09 DOTA
[45:38]DOTA2上海特级锦标赛主赛事日 - 1 胜者组第一轮#1Liquid VS Alliance第一局
2016/03/02 DOTA
python threading模块操作多线程介绍
2015/04/08 Python
Python爬虫 scrapy框架爬取某招聘网存入mongodb解析
2019/07/31 Python
Python中pyecharts安装及安装失败的解决方法
2020/02/18 Python
python“静态”变量、实例变量与本地变量的声明示例
2020/11/13 Python
python中pickle模块浅析
2020/12/29 Python
html5 Canvas画图教程(3)—canvas出现1像素线条模糊不清的原因
2013/01/09 HTML / CSS
捷克移动配件网上商店:ProMobily.cz
2019/03/15 全球购物
策划助理岗位职责
2013/11/18 职场文书
会计实习生自我鉴定
2013/12/12 职场文书
员工拾金不昧表扬信
2014/01/09 职场文书
超市优秀员工获奖感言
2014/08/15 职场文书
党小组鉴定意见
2015/06/02 职场文书
2019最新校园运动会广播稿!
2019/06/28 职场文书
《攀登者》:“海拔8000米以上,你不能指望任何人”
2019/11/25 职场文书
Go语言基础map用法及示例详解
2021/11/17 Golang
Python实现批量自动整理文件
2022/03/16 Python