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


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 相关文章推荐
JS控制表格隔行变色
Jun 26 Javascript
在Z-Blog中运行代码[html][/html](纯JS版)
Mar 25 Javascript
javascript showModalDialog模态对话框使用说明
Dec 31 Javascript
倾力总结40条常见的移动端Web页面问题解决方案
May 24 Javascript
浅述Javascript的外部对象
Dec 07 Javascript
原生js实现验证码功能
Mar 16 Javascript
js canvas实现擦除效果示例代码
Apr 26 Javascript
jQuery zTree树插件动态加载实例代码
May 11 jQuery
对node.js中render和send的用法详解
May 14 Javascript
vue2.0父子组件间传递数据的方法
Aug 16 Javascript
新手快速入门JavaScript装饰者模式与AOP
Jun 24 Javascript
浅谈layui分页控件field参数接收对象的问题
Sep 20 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
Access数据库导入Mysql的方法之一
2006/10/09 PHP
PHP中文处理 中文字符串截取(mb_substr)和获取中文字符串字数
2011/11/10 PHP
php实现获取局域网所有用户的电脑IP和主机名、及mac地址完整实例
2014/07/18 PHP
根据分辨率不同,调用不同的css文件
2006/07/07 Javascript
JAVASCRIPT HashTable
2007/01/22 Javascript
自己的js工具 Event封装
2009/08/21 Javascript
浅谈tudou土豆网首页图片延迟加载的效果
2010/06/23 Javascript
JQuery将文本转化成JSON对象需要注意的问题
2011/05/09 Javascript
JQuery获取文本框中字符长度的代码
2011/09/29 Javascript
JS如何将UTC格式时间转本地格式
2013/09/04 Javascript
jquery如何实现锚点链接之间的平滑滚动
2013/12/02 Javascript
AngularJs实现ng1.3+表单验证
2015/12/10 Javascript
jQuery插件实现带圆点的焦点图片轮播切换
2016/01/18 Javascript
jQuery下拉菜单的实现代码
2016/11/03 Javascript
学习vue.js条件渲染
2016/12/03 Javascript
AngularJS获取json数据的方法详解
2017/05/27 Javascript
vue+vuex+axios从后台获取数据存入vuex,组件之间共享数据操作
2020/07/31 Javascript
python实现360的字符显示界面
2014/02/21 Python
Python专用方法与迭代机制实例分析
2014/09/15 Python
Python使用MD5加密算法对字符串进行加密操作示例
2018/03/30 Python
Python简单处理坐标排序问题示例
2019/07/11 Python
pytorch 共享参数的示例
2019/08/17 Python
PyCharm刷新项目(文件)目录的实现
2020/02/14 Python
python 调用API接口 获取和解析 Json数据
2020/09/28 Python
2020年10款优秀的Python第三方库,看看有你中意的吗?
2021/01/12 Python
校运会广播稿100字
2014/01/27 职场文书
弘扬职业精神演讲稿
2014/03/20 职场文书
学校文明单位申报材料
2014/05/06 职场文书
校长四风对照检查材料
2014/09/27 职场文书
护理见习报告范文
2014/11/03 职场文书
房屋维修申请报告
2015/05/18 职场文书
看雷锋电影观后感
2015/06/10 职场文书
企业法人任命书
2015/09/21 职场文书
人生一定要学会的三样东西:放下、忘记、珍惜
2019/08/21 职场文书
python中如何对多变量连续赋值
2021/06/03 Python
SQL Server使用T-SQL语句批处理
2022/05/20 SQL Server