DOM事件总结

1.事件处理

    <input type="text" onclick="console.log(this.value)">
    <input type="text" onclick="console.log(value)">
    <input type="text" onclick="console.log(event.type)">

    <!--表单, 表单内事件处理程序扩展了表单的作用域-->
    <form action="">
        <input type="text" name="username">
        <input type="text" onclick="console.log(username.value)">
    </form>

    <div id="outer">
        <div id="inner">
            <div id="box">click here!</div>
        </div>
    </div>
        // 表单内事件处理程序
        function formHandle() {
            with (document){
                with (this.form){
                    with (this){
                        // handle ..
                    }
                }
            }
        }
        // try
        function hasTry() {
            try{
                // ..
            } catch (err){
                // ..
            }
        }

        var outerBox = document.getElementById("outer"),
            innerBox = document.getElementById("inner"),
            box = document.getElementById("box");
        function showId(event) {
            console.log(this.id + "--" + event.eventPhase);
            console.log(event.target);  // 事件的目标
            console.log(event.type);  // 事件的类型
//            event.stopPropagation();  // 阻止事件冒泡
            // removeEventListener()参数要与绑定监听函数完全对应才能解除监听
            if(this.removeEventListener){
//                this.removeEventListener("click", showId, false);
                event.currentTarget.removeEventListener("click", showId, false); // 作用相当
            }else if(this.detachEvent){
                this.detachEvent("onclick", showId);
            }
        }
        // addEventListener()接受三个参数:事件、处理函数、boolean
        // boolean值为true时,则在事件捕获时调用程序,false时在事件冒泡时调用程序,默认为false
        // 在事件捕获触发, outer  inner  box
//        box.addEventListener("click", showId, true);
//        outerBox.addEventListener("click", showId, true);
//        innerBox.addEventListener("click", showId, true);
        // 在事件冒泡触发, box  inner  outer
        if(box.addEventListener){
            box.addEventListener("click", showId, false);
            outerBox.addEventListener("click", showId, false);
            innerBox.addEventListener("click", showId, false);
        }
        // IE浏览器不支持addEventListener和removeEventListener函数
        // 替代的是 attachEvent和detachEvent,只接受前两个参数,只支持事件冒泡
        // 注意 "onclick"
        else if(box.attachEvent){
            box.attachEvent("onclick", showId);
            outerBox.attachEvent("onclick", showId);
            innerBox.attachEvent("onclick", showId);
        }

        // 使用绑定监听函数,则函数作用域为绑定的元素对象
        // 使用DOM0(事件赋值),函数的作用域通常为全局作用域

2.UI事件

    <img src="https://ss3.bdstatic.com/lPoZeXSm1A5BphGlnYG/skin/2.jpg?2" id="img" width="500" height="300">
    <a href="https://www.baidu.com">百度</a>
    <br>
    <hr>
    <label for="user">user:</label><input type="text" name="user" id="user">
    <hr>
    <div id="box" style="width: 400px;background-color: orange">
        <label for="person">person:</label><input type="text" name="person" id="person">
    </div>
        // load, img  script  link...
        var img = document.getElementById("img");
        img.addEventListener("load", function (e) {
            console.log("img is loded!src is " + e.target.src);
        })
        // resize
        window.addEventListener("resize", handler);
        // scroll
        window.addEventListener("scroll", handler);

        var userInp = document.getElementById("user");
        var personInp = document.getElementById("person");
        var box = document.getElementById("box");
        // foucsin,支持冒泡
        // focus,不支持事件冒泡
        box.addEventListener("focusin", handler);  // 点击input打印
        box.addEventListener("focus", handler);  // 点击input不打印
        // foucsout,支持冒泡
        // blur,不支持事件冒泡
        // 用到了 事件委托,利用事件冒泡将统一类型的事件放在外层元素统一管理
        box.addEventListener("focusout", handler);  // 点击input打印
        box.addEventListener("blur", handler);  // 点击input不打印

        userInp.addEventListener("focus", handler);  // focus!
        userInp.addEventListener("blur", handler);  // blur!

        function handler(event) {
            switch (event.type){
                case "resize":
                    console.log(this.innerWidth + "--" + this.innerHeight);
                    break;
                case "scroll":{
                    if(document.compatMode === "CSS1Compat"){ // 标准模式
                        console.log("level top " + document.documentElement.scrollTop);
                    }else{
                        console.log("level top " + document.body.scrollTop);
                    }
                    break;
                }
                case "focusin":
                    console.log(event.target.tagName + " focusin");
                    break;
                case "focus":
                    console.log("focus");
                    break;
                case "focusout":
                    console.log(event.target.tagName + " focusout");
                    break;
                case "blur":
                    console.log("blur");
                    break;
            }
        }

3.鼠标滚轮

    <div id="box1" style="width: 300px;height: 300px;border: 1px solid #000"></div>
    <div id="box2" style="width: 300px;height: 300px;background-color: aqua"></div>
    <div id="box3" style="width: 300px;height: 300px;background-color: red"></div>
        var box1 = document.getElementById("box1");
        var box2 = document.getElementById("box2");
        var box3 = document.getElementById("box3");
        // click
        box1.addEventListener("click", handler);
        //dbclick
        box2.addEventListener("dblclick", handler);
        // mousedown
        box3.addEventListener("mousedown", handler);
        // mouseup
        box3.addEventListener("mouseup", handler);
        // mouseenter
        box1.addEventListener("mouseenter", handler);
        // mouselevel
        box1.addEventListener("mouseleave", handler);
        // mouseover
        box1.addEventListener("mouseover", handler);
        // mousemove
//        box2.addEventListener("mousemove", handler)
        // 鼠标位置
        box3.addEventListener("click", function (e) {
            console.log("鼠标在视口位置: " + e.clientX + "--" + e.clientY);
            console.log("鼠标在页面位置: " + e.pageX + "--" + e.pageY);
            console.log("鼠标在屏幕位置:" + e.screenX + "--" + e.screenY);
        })

        function handler(event) {
            switch (event.type){
                case "click":
                   console.log("click!");
                   break;
                case "dblclick":
                    console.log("dblclick!");
                    break;
                case "mousedown":
                    console.log("mousedown!");
                    break;
                case "mouseup":
                    console.log("mouseup!");
                    break;
                case "mouseenter":
                    console.log("mouseenter!");
                    break;
                case "mouseleave":
                    console.log("mouseleave!");
                    break;
                case "mouseover":
                    console.log("mouseover!");
                    console.log("相关元素:" + event.relatedTarget.id);
                    break;
                case "mousemove":
                    console.log("mousemove! " + event.clientX);
                    break;
            }
        }

4.键盘和文件事件

        var inp = document.getElementById("inp");
        // keydown
        inp.addEventListener("keyup", function (e) {
            console.log(event.keyCode);
            switch (e.keyCode){
                case 187:
                    console.log("按下了 = ,解除绑定");
                    e.target.removeEventListener("keyup", arguments.callee);
            }
        })
        // keyup

        //textInput
        inp.addEventListener("textInput", function (e) {
            console.log("当前输入内容:" + e.data);
            console.log("内容:" + this.value);
        })

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值