44-键盘事件

11,933次阅读
没有评论

共计 2323 个字符,预计需要花费 6 分钟才能阅读完成。

鼠标的拖拽事件

拖拽的流程:

(1)onmousedown:当鼠标在被拖拽元素上按下时,开始拖拽;

(2)onmousemove:当鼠标移动时被拖拽元素跟随鼠标移动;

(3)onmouseup:当鼠标松开时,被拖拽元素固定在当前位置。

鼠标的滚轮事件

onmousewheel:鼠标滚轮滚动的事件,会在滚轮滚动时触发。但是火狐不支持该属性。

DOMMouseScroll:在火狐中需要使用 DOMMouseScroll 来绑定滚动事件。注意该事件需要通过 addEventListener()函数来绑定。

键盘事件

事件名

onkeydown:按键被按下。

onkeyup:按键被松开。

注意

  • 如果一直按着某一个按键不松手,那么,onkeydown事件会一直触发。此时,松开键盘,onkeyup事件会执行一次。

  • onkeydown 连续触发时,第一次和第二次之间会间隔稍微长一点,后续的间隔会非常快。这种设计是为了防止误操作的发生。

键盘事件一般都会绑定给一些可以获取到焦点的对象或者是 document。代码举例:

    <body>
        <script>
            document.onkeydown = function(event) {
                event = event || window.event;
                console.log('qianguyihao 键盘按下了');
            };

            document.onkeyup = function() {console.log('qianguyihao 键盘松开了');
            };
        </script>

        <input type="text" />
    </body>

判断哪个键盘被按下

可以通过 event 事件对象的 keyCode 来获取按键的编码。

此外,event事件对象里面还提供了以下几个属性:

  • altKey

  • ctrlKey

  • shiftKey

上面这三个属性,可以用来判断 altctrl、和shift 是否被按下。如果按下则返回 true,否则返回 false。代码举例:

    <body>
        <script>
            document.onkeydown = function(event) {
                event = event || window.event;
                console.log('qianguyihao:键盘按下了');

                // 判断 y 和 ctrl 是否同时被按下
                if (event.ctrlKey && event.keyCode === 89) {console.log('ctrl 和 y 都被按下了');
                }
            };
        </script>
    </body>

举例:input 文本框中,禁止输入数字。代码实现:

    <body>
        <input type="text" />

        <script>
            // 获取 input
            var input = document.getElementsByTagName('input')[0];

            input.onkeydown = function(event) {
                event = event || window.event;

                //console.log('qianguyihao:' + event.keyCode);
                // 数字 48 - 57
                // 使文本框中不能输入数字
                if (event.keyCode >= 48 && event.keyCode <= 57) {
                    // 在文本框中输入内容,属于 onkeydown 的默认行为
                    return false; // 如果在 onkeydown 中取消了默认行为,则输入的内容,不会出现在文本框中
                }
            };
        </script>
    </body>

举例:通过键盘的方向键,移动盒子

代码实现:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8" />
        <title></title>
        <style type="text/css">
            #box1 {
                width: 100px;
                height: 100px;
                background-color: red;
                position: absolute;
            }
        </style>
    </head>
    <body>
        <div id="box1"></div>

        <script type="text/javascript">
            // 使 div 可以根据不同的方向键向不同的方向移动
            /*
             * 按左键,div 向左移
             * 按右键,div 向右移
             * ...
             */

            // 为 document 绑定一个按键按下的事件
            document.onkeydown = function(event) {
                event = event || window.event;

                // 定义一个变量,来表示移动的速度
                var speed = 10;

                // 当用户按了 ctrl 以后,速度加快
                if (event.ctrlKey) {console.log('smyhvae ctrl');
                    speed = 20;
                }

                /*
                 * 37 左
                 * 38 上
                 * 39 右
                 * 40 下
                 */
                switch (event.keyCode) {
                    case 37:
                        //alert(" 向左 "); left 值减小
                        box1.style.left = box1.offsetLeft - speed + 'px'; // 在初始值的基础之上,减去 speed 大小
                        break;
                    case 39:
                        //alert(" 向右 ");
                        box1.style.left = box1.offsetLeft + speed + 'px';
                        break;
                    case 38:
                        //alert(" 向上 ");
                        box1.style.top = box1.offsetTop - speed + 'px';
                        break;
                    case 40:
                        //alert(" 向下 ");
                        box1.style.top = box1.offsetTop + speed + 'px';
                        break;
                }
            };
        </script>
    </body>
</html>


上方代码,待改进的地方:

(1)移动盒子时,如果要加速,需要先按 方向键,再按Ctrl 键

(2)首次移动盒子时,动作较慢。后续如果学习了定时器相关的内容,可以再改进。

    正文完
     0
    Yojack
    版权声明:本篇文章由 Yojack 于2024-09-10发表,共计2323字。
    转载说明:
    1 本网站名称:优杰开发笔记
    2 本站永久网址:https://yojack.cn
    3 本网站的文章部分内容可能来源于网络,仅供大家学习与参考,如有侵权,请联系站长进行删除处理。
    4 本站一切资源不代表本站立场,并不代表本站赞同其观点和对其真实性负责。
    5 本站所有内容均可转载及分享, 但请注明出处
    6 我们始终尊重原创作者的版权,所有文章在发布时,均尽可能注明出处与作者。
    7 站长邮箱:laylwenl@gmail.com
    评论(没有评论)