zoukankan      html  css  js  c++  java
  • 渡一 22 事件

     解决attachEvent的this指向问题

    div.attachEvent("onclick",function(){
        handle.call(div);
    })
    function handle(){
        console.log(this)
    }

    addEventListener,attachEvent,elem.onclick的兼容问题

    function addEvent(elem,type,handle){
        if(elem.addEventListener){
            elem.addEventListener(type,handle,false);
        }else if(elem.attachEvent){
            elem.attachEvent('on'+type,function(){
                handle.call(elem);
            })
        }else{
            elem['on'+type] = handle;
        }
    }

    取消事件

    div.onclick = function(){
        console.log("a");
        this.onclick = null;
    }

    捕获,冒泡

    <div class="wrapper">
        <div class="content">
            <div class="box"></div>
        </div>
    </div>
    wrapper.addEventListener("click",function(){
        console.log("wrapper")
    },false);
    content.addEventListener("click",function(){
        console.log("content")
    },false);
    box.addEventListener("click",function(){
        console.log("box");
    },false)
    
    //默认是冒泡:box content wrapper

    查看捕获和冒泡的顺序

    wrapper.addEventListener("click",function(){
        console.log("wrapperBubble")
    },false);
    content.addEventListener("click",function(){
        console.log("contentBubble")
    },false);
    box.addEventListener("click",function(){
        console.log("boxBubble");
    },false)
    
    wrapper.addEventListener("click",function(){
        console.log("wrapper")
    },true);
    content.addEventListener("click",function(){
        console.log("content")
    },true);
    box.addEventListener("click",function(){
        console.log("box");
    },true)
    
    //wrapper content boxBubble box contentBubble wrapperBubble
    //同一个box就看事件定义的顺序

    取消冒泡

    document.onclick = function(){
        console.log("你闲的呀!")
    }
    div.onclick = function(e){
        e.stopPropagation();
    }
    function stopBubble(event){
        if(event.stopPropagation()){
            event.stopPropagation();
        }else{
            event.cancelBubble = true;
        }
    }

    阻止默认事件

    document.oncontextmenu = function(e){
        console.log("a");
        cancelHandler()
    }
    function cancelHandler(event){
        if(e.preventDefault){
            e.preventDefault();
        }else{
            e.returnValue = false;
        }
    }

    事件对象

    ul.onclick = function(e){
        var event = e || window.event;
        var target = event.target || event.srcElement;
        console.log(target.innerText);
    }

    ---------

    事件分类

    doucment.onclick = function(){
        console.log("click");
    }
    doucment.onmousedown = function(){
        console.log("mousedown");
    }
    doucment.onmouseup = function(){
        console.log("mouseup");
    }
    
    //mousedonw mouseup click

    判断左右键

    document.onmousedown = function(e){
        if(e.button == 2){
            console.log("right");
        }else if(e.button == 0){
            console.log("left");
        }
    }

    判断mousedown,click事件

    var firstTime = 0,lastTime = 0,key = false;
    document.onmousedown = function(){
        firstTime = new Date().getTime();
    }
    document.onmouseup = function(){
        lastTime = new Date().getTime();
        if(lastTime - firstTime < 300){
            key = true;
        }
    }
    document.onclick = function(){
        if(key){
            console.log("click");
            key = false;
        }
    }

    //ie里独有的获取焦点的方法
    div.setCapture();div.releaseCapture();

    //文本操作事件没有鼠标事件
    input focus blur change

    input.oninput = function(e){
        console.log(this.value);
    }

    事件练习-拖拽应用-mousedown mousemove mouseup

    function drag(elem){
        var disX,
            disY;
        div.onmousedown = function(e){
            disX = e.pageX - parseInt(div.style.left);
            disY = e.pageY - parseInt(div.style.top);
            document.onmousemove = function(e){
                div.style.left = e.pageX - disX + "px";
                div.style.top = e.pageY - disY + "px";
            }
            document.onmouseup = function(){
                div.onmousemove = null;
            }
        }
    }
    
    function drag(elem){
        var disX,
            disY;
        addEvent(ele,"mosedown",function(e){
            var event = e || window.event;
            disX = event.clientX - parseInt(elem,"left");
            disY = event.clientY - parseInt(elem,"top");
            addEvent(document,"mousemove",mouseMove);
            addEvent(document,"mouseup",mouseUp);
            stopBubble(event);
            cancelHandler(event);
        });
        function mouseMove(e){
            var event = e || window.event;
            elem.style.left = event.clientX - disX + "px";
            elem.style.top = event.clientY - disY + "px";
        }
        function mouseUp(e){
            var event = e || window.event;
            removeEvent(document,"mousemove",mouseMove);
            removeEvent(document,"mouseup",mouseUp);
        }
    }

    键盘事件

    document.onkeypress = function(){
        console.log("keypress");
    }
    document.onkeydown = function(){
        console.log("keydown");
    }
    document.onkeyup = function(){
        console.log("keyup");
    }
    document.onkeypress = function(e){
        console.log(String.fromCharCode(e.charCode));
    }
    
    input.oninput = function(e){
        console.log(this.value);
    }

    窗体操作类(window上的事件)
    scroll load
    小练习:fixed定位JS兼容版

    domTree+cssTree = renderTree

    练习
    1.完成轮播图,加按钮
    2.提取密码框的密码
    3.输入框功能完善
    4.菜单栏
    5.贪吃蛇游戏
    6.扫雷游戏

  • 相关阅读:
    URAL 2067 Friends and Berries (推理,数学)
    URAL 2070 Interesting Numbers (找规律)
    URAL 2073 Log Files (模拟)
    URAL 2069 Hard Rock (最短路)
    URAL 2068 Game of Nuts (博弈)
    URAL 2066 Simple Expression (水题,暴力)
    URAL 2065 Different Sums (找规律)
    UVa 1640 The Counting Problem (数学,区间计数)
    UVa 1630 Folding (区间DP)
    UVa 1629 Cake slicing (记忆化搜索)
  • 原文地址:https://www.cnblogs.com/lisa2544/p/15469553.html
Copyright © 2011-2022 走看看