天天看点

js键盘事件 、显示键码、字符编码 + 案例(键盘控制盒子运动)

键盘事件: keydown、keypress、keyup
           
<script>
    /*
        对鼠标事件的支持主要遵循是DOM0级
        keydown:当用户按下键盘的任意键时触发,而且如果按下不放,会重复触发此事件
        keypress:当用户按下键盘的字符键时触发,而且如果按住不放的话,会重复触发字事件
        keyup:当用户释放键盘时触发
    */
    // 显示键码
    var input = document.getElementById('input');
    input.onkeyup = function(event){
        var event = event || window.event;
        console.log(event.keyCode);
    }
    // 显示字符编码
    /*
        keypress事件意味着按下的键会影响屏幕中文本的显示
        IE9+,Firefox,chrome,Safari的event对象都支持charCode属性,而IE8-,Opera则是在keyCode属性中保存字符的ASCII编码,
        所以想要跨浏览器的方式获取字符的编码,先检测charCode属性是否可用,如果不可用则使用keyCode属性
    */
    input.onkeypress = function(event){
        var event = event || window.event;
        if( event.charCode )
        {
            console.log(event.charCode);// IE9+,Firefox,chrome,Safari
        }
        else{
            console.log(event.keyCode);// IE8-,Opera
        }
    }
</script>
           

案例

<!DOCTYPE html>
<html >
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>键盘控制小方块运动</title>
    <style>
        button{
            width: 100px;
            height: 50px;
            background: linear-gradient(to left, #999 0%,#ffcccc 100%);
            border: none;
            border-radius: 5px;
            outline: none;
            font-size: 18px;
            color: #fff;
        }
        div{
            width: 100px;
            height: 100px;
            margin-top: 10px; 
            background-color: pink;
            position: absolute;
            top: 0;
            left: 0;
        }
    </style>
</head>
<body>
    <button id="btn">加速</button>
    <div></div>
</body>
</html>
<script>
    var btn = document.getElementById('btn');
    var div = document.getElementsByTagName('div')[0];
    var speed = 5;
    document.onkeydown = function(event){
        var event = event || window.event;  
        switch(event.which)// 与event.keyCode|| event.charCode相似
        {
            case 37:
                div.style.left =  div.offsetLeft - speed +'px';
                break;
            case 38:
                div.style.top =  div.offsetTop - speed + 'px';
                break;
            case 39:
                div.style.left = div.offsetLeft + speed +'px';
                break;
            case 40:
                div.style.top = div.offsetTop + speed + 'px';
                break;
        }
    }
</script>
           

继续阅读