当前位置: 首页 > 图文教程 > 网络编程 > Javascript > 键盘控制事件应用教程大全

Javascript
jQuery开发者都需要知道的5个小技巧
Extjs学习笔记之六 面版
Javascript 中的类和闭包
IE6下JS动态设置图片src地址问题
Extjs学习笔记之七 布局
Extjs学习笔记之八 继承和事件基础
Extjs TriggerField在弹出窗口显示不出问题的解决方法
JavaScript中的集合及效率
利用js获取服务器时间的两个简单方法
在html页面上拖放移动标签
了解jQuery技巧来提高你的代码
JavaScript 页面坐标相关知识整理
Javascript UrlDecode函数代码
JQuery 遮罩层实现(mask)实现代码
jQuery 页面 Mask实现代码
Javascript的构造函数和constructor属性
js或css文件后面跟参数的原因说明
将CKfinder整合进CKEditor3.0的新方法
jQuery UI-Draggable 参数集合
jQuery 行级解析读取XML文件(附源码)

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


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-09-12   浏览: 88 ::
收藏到网摘: n/a

获取键盘控制事件是实现交互性最有力的方法之一。
   首先需要了解的是如何初始化该事件,基本语句如下:
   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)
   }
}