JavaScript事件

作者: consolelog | 来源:发表于2020-11-11 13:16 被阅读0次

    事件是可以被 JavaScript 侦测到的行为。

    事件类型

    • 鼠标事件
    onclick  //单击
    onmousemove  //鼠标移动
    onmouseenter  //鼠标指针移到元素之上
    onmouseleave  //鼠标指针移出元素
    onmouseover  //鼠标移到元素之上
    onmouseout  //鼠标移出元素
    oncontextmenu  //右键菜单
    ondblclick  //双击
    onmousedown  //左键按下
    onmouseup  //左键按下
    onmousewheel  //鼠标滚轮滚动
    DOMMouseScroll  //鼠标滚轮滚动  火狐专用,只能使用二级事件绑定
    
    • 键盘事件
    onkeydown  //某个键盘按键被按下
    onkeyup  //某个键盘按键被松开
    onkeypress  //牧歌键盘按键被按下并松开
    
    onload  //一张页面或一幅图像完成加载
    

    事件对象

    当事件发生的时候,浏览器会将事件的相关信息保存在内置的全局对象window.evnet当中,可以直接使用,其中包括事件类型,操作对象,鼠标位置等。

    事件的绑定与取消

    1. DOM 0级事件

    元素.事件类型 = 处理函数
    元素.事件类型 = null (取消)

    var elem = document.querySelector("div");
    
    elem.onclick = function() {
        alert("这是一个DOM 0级事件添加的");
    }
    
    elem.onclick = null;  //取消点击事件
    

    使用DOM0级事件添加的事件,如果重复给一个元素添加了同样的事件,那么后面添加的事件会覆盖前面添加的。

    1. DOM 2级事件

    元素.addEventListener(事件类型, 处理函数, 是否捕获)
    元素.attachEvent(事件类型, 处理函数) ie低版本

    var elem = document.querySelector("div");
    
    elem.addEventListener("click", fun, false);  //绑定点击事件
    elem.removeEventListener("click", fun, false);  //取消点击事件
    
    //一下两种为IE低版本方法,此方法需要给事件前面加 on
    elem.attachEvent("onclick", fun);  //绑定点击事件
    elem.detachEvent("onclick", fun);  //取消点击事件
    
    function fun() {
        alert("这是一个DOM 2级事件添加的");
    }
    

    DOM事件流

    事件发生时会在元素节点与根节点之间按照特定的顺序传播,路径所经过的所有节点都会收到该事件,这个过程总共可以分为三个阶段:
    事件捕获阶段,确定目标阶段,事件冒泡阶段。


    DOM事件流

    注意:在IE低版本中没有window节点,Document中最高节点。

    在JavaScript中,默认是事件冒泡流机制,利用addEventListener()添加的事件的第三个参数如果为true,那么在事件触发时将先捕获后冒泡。

    阻止事件传播的方法

    1. 阻止事件冒泡
    function stopPropagation(ev) {
        var ev = window.ev || ev;
        if (ev.stopPropagation) {
            ev.stopPropagation(); //标准浏览器
        } else {
            ev.cancelBubble = true; //兼容IE浏览器
        }
    }
    
    1. 阻止默认事件
    function preventDefa(ev) {
        if (window.event) {  
            window.event.returnValue = false;  //IE浏览器
        } else {
            ev.preventDefault();  //标准浏览器
        }
    }
    

    事件委托
    事件委托利用事件冒泡,只指定一个事件处理程序,就可以管理某一类型的所有事件

    function entrust(ev) {
        console.log(ev.target.innerHTML);
        //ev.target 可以获取触发事件的元素
    }
    

    相关文章

      网友评论

        本文标题:JavaScript事件

        本文链接:https://www.haomeiwen.com/subject/bokrbktx.html