不渴望力量的哈士奇

不渴望力量的哈士奇


〖大前端 - 基础入门三大核心之JS篇㊷〗- DOM事件对象及它的属性-LMLPHP

⭐ 事件对象

示例代码:

oBox.onmousemove = function (e) {
    //对象e就是这次事件的“事件对象”
}

事件对象中有很多的强大的属性和方法,我们可以直接拿来使用。接下来,接下来我们来看一些常用的属性和方法:

🌟 事件对象中的鼠标的属性

鼠标位置属性就是在鼠标事件中,描述鼠标位置的一些属性

我们用一张图来解释这些属性具体指的是什么(因为浏览器框可能不能完全展示整个网页,需要用右侧的滚动条滚动才能看见,下图种用虚线框代表整个网页):

〖大前端 - 基础入门三大核心之JS篇㊷〗- DOM事件对象及它的属性-LMLPHP

使用这些属性的示例代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        * {
            margin: 0;
            padding: 0;
        }
        #box {
            width: 200px;
            height: 200px;
            background-color: #ccc;
            margin: 100px;
        }
        body {
            height: 2000px;
        }
        #info {
            font-size: 20px;
            margin-left: 100px;
        }
    </style>
</head>
<body>
    <div id="box"></div>
    <div id="info"></div>
    <script>
        var oBox = document.getElementById('box');
        var oInfo = document.getElementById('info');

        oBox.onmousemove = function (e) {
            oInfo.innerHTML = 'offsetX/Y:   ' + e.offsetX + ',' + e.offsetY + '<br>' 
                             + 'clientX/Y:   ' + e.clientX + ',' + e.clientY + '<br>'
                             + 'pageX/Y:   ' + e.pageX + ',' + e.pageY;
        };
    </script>
</body>
</html>

〖大前端 - 基础入门三大核心之JS篇㊷〗- DOM事件对象及它的属性-LMLPHP

上述代码中,如果页面为往下滚动,那么clientX/Y和pageX/Y的值会是一模一样的,很好理解,因为网页正处于最上方,和浏览器的坐标系是重叠的。当页面往下滚动后,两者才会出现差异。

需要注意的是,DOM中规定:offsetX和offsetY是鼠标所在之处的最内部盒子的坐标,比如下面的代码中,虽然我们设置的是大盒子的事件监听,但当鼠标放到小盒子中时,offsetX和offsetY显示是以小盒子为基准的坐标:〖大前端 - 基础入门三大核心之JS篇㊷〗- DOM事件对象及它的属性-LMLPHP

示例代码:

<body>
    <div id="box"></div>
    <script>
        document.onmousewheel = function (e) {
            console.log(e.deltaY);
        }
    </script>
</body>

〖大前端 - 基础入门三大核心之JS篇㊷〗- DOM事件对象及它的属性-LMLPHP


🌟 事件对象中的键盘属性

关于字符按键和字符码的对应关系如下:

关于按键和键码的对应关系如下:

使用这些属性的示例代码:

<body>
    <input type="text" id="field1">
    <div id="info1"></div>
    <input type="text" id="field2">
    <div id="info2"></div>

    <script>
        var oField1 = document.getElementById('field1');
        var oInfo1 = document.getElementById('info1');
        var oField2 = document.getElementById('field2');
        var oInfo2 = document.getElementById('info2');

        oField1.onkeypress = function (e) {
            oInfo1.innerText = '您按键的对应的字符码是:' + e.charCode;
        };
        oField2.onkeydown = function (e) {
            oInfo2.innerText = '您按键的对应的键码是:' + e.keyCode;
        };
    </script>
</body>

〖大前端 - 基础入门三大核心之JS篇㊷〗- DOM事件对象及它的属性-LMLPHP

学到这里,我们可能还是不知道这个字符码和键码在实际工作中有什么用,接下来就来写一个有意思的小案例来实际应用一下这两个属性。

案例: 制作一个特效,按方向键可以控制页面上的盒子按对应的方向移动

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        * {
            margin: 0;
            padding: 0;
        }

        #box {
            width: 100px;
            height: 100px;
            background-color: orange;
            position: absolute;
            top: 200px;
            left: 200px;
        }
    </style>
</head>

<body>
    <div id="box"></div>
    <script>
        var oBox = document.getElementById('box');

        //定义两个全局变量,分别表示盒子top属性和left属性
        var t = 200;
        var l = 200;

        //document对象的键盘按下事件监听,即对用户在整个网页上按下按键时进行事件监听
        document.onkeydown = function (e) {
            switch (e.keyCode) {
                case 37:
                    l -= 3;
                    break;
                case 38:
                    t -= 3;
                    break;
                case 39:
                    l += 3;
                    break;
                case 40:
                    t += 3;
                    break;
            }
            //更改样式
            oBox.style.top = t + 'px';
            oBox.style.left = l + 'px';
        };
    </script>
</body>
</html>

〖大前端 - 基础入门三大核心之JS篇㊷〗- DOM事件对象及它的属性-LMLPHP

11-24 10:11