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.扫雷游戏

  • 相关阅读:
    MarkDowdPad 破解
    VimFaultException A specified parameter was not correct configSpec.guestId
    did not finish being created even after we waited 189 seconds or 61 attempts. And its status is downloading
    nsx-edge虚拟机抓包实践
    检查子网内存活的主机
    测试防火墙源端口
    vmware创建虚拟机不识别网卡
    ovs-qos配置
    ovs之组网实验
    openstack镜像制作
  • 原文地址:https://www.cnblogs.com/lisa2544/p/15469553.html
Copyright © 2011-2022 走看看