前端 JavaScript -- 键盘按下松开事件

实现的主要功能:判断按下了哪个按键,可以实现部分内容输入文本框不显示通过判断按下键来条件输出return false;

所有的注释都在html中,解释的很详细,我就不再一一解释
注:这里我用的js是ES6 定义变量时采用let ES6以下替换为var即可

判断键盘按下的是哪个键

<script>
    window.onload = function () {
        /**
         * 键盘事件不能绑定div,一般绑定给容易获取焦点的对象 eg:input
         * onkeydown
         *      - 按下按键,如果一直按着会一直触发
         *      - 连续触发时,第一次和第二次间隔稍微长,以后就非常快
         * onkeyup  松开按键,只会触发一次
         */
        let test = document.getElementById("test");
        document.onkeydown = function (event) {
            event = event || window.event;
            /**
             * 通过keyCode属性返回的ASCII编码来判断按下的按键,注意区分大小写
             * 事件单独提供了ctrlkey shiftkey altkey 用来判断ctrl、shift、alt是否被按下,
             * 被按下时返回true
             */
            if (event.keyCode ===  89 && event.altKey){
                console.log("我按下了y和 Alt")
            }
            //当文本框返回一个return false 取消默认行为时,文本框不再显示输入内容
             /* *
             *test.onkeydown = function () {
             *  return false;
             * };
             */
        };
    };
</script>
<body>
    <input type="text" id="test">
</body>

实现元素的移动,通过方向键进行控制

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>元素移动</title>
    <style>

        #box1{
           width: 100px;
            height: 100px;
            background-color: red;
            position: absolute;
        }
    </style>
    <script>
        /**
         *  css一定要开启position: absolute;
         */
        window.onload = function () {
            /**
             * 通过方向键控制元素移动方向,按下ctrl实现加速
             * 类似于贪吃蛇功能
             */
            let box1 = document.getElementById("box1");
            //移动速度
            let speed = 10;
            //设置移动的方向
            let dir = 0;
            //开启一个定时器,控制div移动
            setInterval(function () {

                /**
                 * 37 左
                 * 38 上
                 * 39 右
                 * 40 下
                 */
                switch (dir) {
                    case 37:
                        box1.style.left = box1.offsetLeft - speed +"px";
                        break;
                    case 38:
                        box1.style.top = box1.offsetTop - speed +"px";
                        break;
                    case 39:
                        box1.style.left = box1.offsetLeft + speed +"px";
                        break;
                    case 40:
                        box1.style.top = box1.offsetTop + speed +"px";
                        break;
                }
            },50);

            //当键盘按下时改变元素移动方向
            window.onkeydown = function (event) {
            	// 解决兼容性问题,兼容火狐 解决火狐找不到event问题
                event = event||window.event;
                //用户按下ctrl速度变快
                if (event.ctrlKey){
                    speed = 50;
                }else
                {
                    speed = 10;
                }
                //现在官方有了更好的方法替代keyCode 但keyCode仍然可用
                dir = event.keyCode;
            };
            //当键盘松开
            window.onkeyup = function () {
                dir = 0;
            };
        };
    </script>
</head>
<body>
    <div id="box1" ></div>
</body>
</html>

正在学习中,不足之处,感谢指正

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值