一. 事件对象

在触发 DOM 上的某个事件时,会产生一个事件对象 event ,这个对象中包含着所有与事件有关的 信息。

包括导致事件的元素、事件的类型以及其他与特定事件相关的信息。

例如,鼠标操作导致的事件对象中,会包含鼠标位置的信息,而键盘操作导致的事件对象中,会包含与按下的键有关的信息。所有 浏览器都支持 event 对象,但支持方式不同。

  1. 无论哪种事件处理程序,都会有一个event的参数,包含着事件的基本信息。

     <body>
         <button id="btn">点我获取点击的click事件的事件类型</button>
         <script type="text/javascript">
             var btn = document.getElementById("btn");
               //当点击事件发生的时候,浏览器会把发生的这次点击封装成一个事件对象,通过时间处理程序的参数传进来。
               //在处理程序内部就可以使用这个事件对象了。
             btn.onclick = function (event) {
                 alert(event.type);    // click
             }
         </script>
     </body
    

  2. 事件类型不一样,event可用的属性与方法也不一样。不过不管哪种类型的事件,都具有下面的属性和方法。

属性 / 方法 类 型 读 / 写 说 明
bubbles Boolean 只读 表明事件是否冒泡
cancelable Boolean 只读 表明是否可以取消事件的默认行为
currentTarget Element 只读 其事件处理程序当前正在处理事件的那个元素(注册事件处理程序的元素)
defaultPrevented Boolean 只读 为 true 表 示 已 经 调 用 了 preventDefault(DOM3级事件中新增)
detail Integer 只读 与事件相关的细节信息
eventPhase Integer 只读 调用事件处理程序的阶段:1表示捕获阶段,2表示“处于目标”,3表示冒泡阶段
stopPropagation() Function 只读 取消事件的进一步捕获或冒泡。如果 bubbles为 true ,则可以使用这个方法
preventDefault() Function 只读 取消事件的默认行为。如果 cancelable 是true ,则可以使用这个方法
stopImmediatePropagation() Function 只读 取消事件的进一步捕获或冒泡,同时阻止任何事件处理程序被调用(DOM3级事件中新增)
target Element 只读 事件的目标(事件发生的目标元素)
trusted Boolean 只读 为 true 表示事件是浏览器生成的。为 false 表示 事 件 是 由 开 发 人 员 通 过 JavaScript 创 建 的(DOM3级事件中新增)
type String 只读 被触发的事件的类型
view AbstractView 只读 与事件关联的抽象视图。等同于发生事件的window 对象

二. event对象的高级属性

2.1 offsetX和offsetY

光标相对于触发元素边界的X、Y坐标

其实是光标相对于触发元素的==左上角==的坐标。(把左上角的位置看做0,0)

<body>
    <div></div>
    <script type="text/javascript">
        var div = document.getElementsByTagName("div")[0];
        div.addEventListener("mousemove", function (event) {
            console.log('offsetX:' + event.offsetX + ", offsetY:" + event.offsetY);
        }, false);
    </script>
</body>

2.2 screenX和screenY

当前光标相对于屏幕边缘的x、y坐标

其实就是相对于屏幕左上角的坐标。(可以看出是绝对坐标)

<body>
    <div></div>
    <script type="text/javascript">
        var div = document.getElementsByTagName("div")[0];
        document.documentElement.addEventListener("mousemove", function (event) {
            // console.log('offsetX:' + event.offsetX + ", offsetY:" + event.offsetY);
            console.log("scrrenX:" + event.screenX + ", scrrenY:" + event.screenY);
        }, false);
    </script>
</body>

2.3 clientXclientY

当前光标相对于浏览器浏览器窗口客户区域左上角的坐标(客户区域不包括状态栏、菜单栏等。)

三种坐标的图示如下:


2.4 stopPropagation()

如果bubblestrue(允许冒泡),则stopPropagation可以阻止事件进一步捕获或冒泡

正常情况当把鼠标放在外部div和内部div重合的区域的时候,外部个div都可以收到事件。

当在内部div的处理程序添加stopPropagation()方法后,则鼠标放在重合区域的上方是外部div就收不到冒泡事件了

<body>
    <div id="outer">
         <div id="inner"></div>
    </div>
    <script type="text/javascript">
        var outer = document.getElementById("outer");
        var inner = document.getElementById("inner");
        outer.addEventListener("mouseover", function (event) {
            console.log("外部的div....")
        }, false);
        inner.addEventListener("mouseover", function (event) {
            console.log("内部的div");
              event.stopPropagation();
        }, false);        
    </script>
</body>

2.5 preventDefault()

取消事件的默认行为:

<body>
    <form  id="form" action="">
        <input type="text" name="user"><br/><br/>
        <input type="submit" value="提交">
        <p>本演示可以阻止提交按钮默认提交表单的动作</p>
    </form>
    <script type="text/javascript">
        var form = document.getElementById("form");
        form.addEventListener("submit", function (event) {
            //阻止表单的默认提交事件
            event.preventDefault();
        }, false);
    </script>
</body>

2.6 补充:pageXpageY

获取光标在文档中的位置。

注意:这个之和整个页面的左上角有关,与元素的位置无关。

如果页面进行的滚动,即使光标没有任何移动,那么pageY也会变化。

而这种情况下clientY是没有变化的。

Copyright © 李振超 2018 all right reserved,powered by Gitbook
该文件最后修订时间: 2018-10-18 03:19:29

results matching ""

    No results matching ""