键盘事件对象(keyCode)

键盘事件对象:即每一个按键。值得注意的是:我们在按键的时候,keydown 支持特殊按键,但是不区分大小写,而keypress不支持特殊按键,但是区分大小写。

获取事件对象:

document.onkeydown = function(ev){

// 获取事件对象,可以使用window.event,注意:在火狐获取不到

console.log(window.event);

// 在火狐要通过参数获取

console.log(ev);

// 兼容性的写法

var evObj = window.event || ev;

console.log(evObj.keyCode);

// 如何判断是否按了组合键

if(evObj.keyCode==67 && evObj.metaKey){

console.log("按了command+c");

}

}

实例小测试:用方向键控制元素移动

var redDiv = document.getElementsByClassName('redDiv')[0];

var rightDown = false;

var leftDown = false;

var topDown = false;

var botDown = false;

document.onkeydown = function(ev){

var evObj = window.event ||ev;

if (ev.keyCode ==39) {

// redDiv.style.left = redDiv.offsetLeft + 5 + "px";

rightDown = true;

}

if (ev.keyCode ==38) {

topDown = true;

}

if (ev.keyCode ==37) {

leftDown = true;

}

if (ev.keyCode ==40) {

botDown = true;

}

}

document.onkeyup = function(ev){

var evObj = window.event ||ev;

if (ev.keyCode ==39) {

rightDown = false;

}

if (ev.keyCode ==38) {

topDown = false;

}

if (ev.keyCode ==37) {

leftDown = false;

}

if (ev.keyCode ==40) {

botDown = false;

}

}

setInterval(function(){

if (rightDown) {

redDiv.style.left = redDiv.offsetLeft+5+"px";

}

if (topDown) {

redDiv.style.top = redDiv.offsetTop-5+"px";

}

if (botDown) {

redDiv.style.top = redDiv.offsetTop+5+"px";

}

if (leftDown) {

redDiv.style.left = redDiv.offsetLeft-5+"px";

}

},20);

方法二:(优化写法)

var boolArr = [false,false,false,false];

document.onkeydown = function(ev){

var evObj = window.event ||ev;

boolArr[ev.keyCode - 37] = true;

}

document.onkeyup = function(ev){

var evObj = window.event ||ev;

boolArr[ev.keyCode - 37] = false;

}

setInterval(function(){

var speed = 5;

var leftSpeed = boolArr[0]* -speed + boolArr[2]*speed;

var topSpeed = boolArr[1]* -speed + boolArr[3]*speed;

redDiv.style.left = redDiv.offsetLeft+leftSpeed+"px";

redDiv.style.top = redDiv.offsetTop+topSpeed+"px";

},10);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值