Heim >Web-Frontend >js-Tutorial >javascript的键盘控制事件说明_javascript技巧

javascript的键盘控制事件说明_javascript技巧

WBOY
WBOYOriginal
2016-05-16 19:05:101021Durchsuche

控制回车焦点问题:

复制代码 代码如下:



首先需要了解的是如何初始化该事件,基本语句如下:
   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)
   }
}
Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn