javascript

位置:IT落伍者 >> javascript >> 浏览文章

javascript的键盘控制事件


发布日期:2018年09月14日
 
javascript的键盘控制事件

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

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

documentonkeydown = keyDown

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

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

Netscape

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

documentonkeydown = keyDown

if (ns) documentcaptureEvents(EventKEYDOWN)

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

function keyDown(e)

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

ewhich

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

StringfromCharCode(ewhich)

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

function keyDown(e) {

var keycode = ewhich

var realkey = StringfromCharCode(ewhich)

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

}

documentonkeydown = keyDown

documentcaptureEvents(EventKEYDOWN)

Internet Explorer

IE的程序与Netscape类似但它不需要e变量用windoweventkeyCode来代替ewhich把键的索引值转化为真实键值方法类似StringfromCharCode(eventkeyCode)程序如下

function keyDown() {

var keycode = eventkeyCode

var realkey = StringfromCharCode(eventkeyCode)

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

}

documentonkeydown = keyDown

documentonkeydown = keyDown

适用于两者的程序

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

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

function keyDown(e) {

if (ns) {

var nKey=ewhich;

var ieKey=

}

if (ie) {

var ieKey=eventkeyCode;

var nKey=

}

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

}

documentonkeydown = keyDown

if (ns) documentcaptureEvents(EventKEYDOWN)

使用键盘移动对象

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

function init() {

if (ns) block = documentblockDiv

if (ie) block = blockDivstyle

blockxpos = parseInt(blockleft)

documentonkeydown = keyDown

if (ns) documentcaptureEvents(EventKEYDOWN)

}

function keyDown(e) {

if (ns) { var nKey=ewhich; var ieKey= }

if (ie) { var ieKey=eventkeyCode; var nKey= }

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

slide()

}

}

function slide() {

blockxpos +=

blockleft = blockxpos

status = blockxpos // 这一句不一定需要只是为了检查状态

setTimeout(slide())

}

增加 Active变量

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

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

function slide() {

if (myobjactive) {

myobjxpos +=

myojbleft = myobjxpos

setTimeout(slide())

}

}

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

使用 onKeyUp 和 Active 变量

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

documentonkeydown = keyDown

documentonkeyup = keyUp

if (ns) documentcaptureEvents(EventKEYDOWN | EventKEYUP)

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

function keyUp(e) {

if (ns) var nKey = ewhich

if (ie) var ieKey = windoweventkeyCode

if (nKey== || ieKey==)

blockactive = false

}

下面是比较完整的程序

function init() {

if (ns) block = documentblockDiv

if (ie) block = blockDivstyle

blockxpos = parseInt(blockleft)

blockactive = false

documentonkeydown = keyDown

documentonkeyup = keyUp

if (ns) documentcaptureEvents(EventKEYDOWN | EventKEYUP)

}

function keyDown(e) {

if (ns) {var nKey=ewhich; var ieKey=}

if (ie) {var ieKey=eventkeyCode; var nKey=}

if ((nKey== || ieKey==) && !blockactive) { // if A key is pressed

blockactive = true slide()

}

}

function keyUp(e) {

if (ns) {var nKey=ewhich; var ieKey=}

上一篇:JS来实现浏览器菜单的命令

下一篇:用JavaScript实现上下文字滚动特效