zoukankan      html  css  js  c++  java
  • DOM事件

    1 DOM事件

    1.1 什么是DOM事件

    点击一个DOM元素,在键盘上按下一个键,输入框输入内容,页面加载完成,这些动作都会触发一系列的事件。

    1.2 事件流

    事件流:capture phase(w-p) --> target phase(p-a-p) --> bubble phase(p-w);

    事件流

    1.3 事件注册

    /* 事件注册 */
    /* eventTarget.addEventListener(type,listener[,useCapture]) */
    var elem = document.getElementById("div1");
    var clickHandler = function(event){
        //to do
    }
    //下面两种方法二选一即可
    elem.addEventListener('click',clickHandler,false);
    elem.onclick = clickHandler;
    /* 事件注册兼容IE6,7,8 */
    var addEvent = document.addEventListener?
        function(elem,type,listener,useCapture){
            elem.addEventLitener(type,listener,useCapture);
        } :
        function(elem,type,listener,useCapture){
            elem.attachEvent('on'+type,listener);
        };
    
    /* 取消事件注册 */
    /* eventTarget.removeEventListener(type,listener[,useCapture]) */
    elem.removeEventListener('click',clickHandler,false);
    elem.onclick = null;
    /* 取消事件注册兼容IE6,7,8 */
    var delEvent = document.removeEventListener?
        function(elem,type,listener,useCapture){
            elem.removeEventListener(type,listener,useCapture);
        } :
        function(elem,type,listener,useCapture){
            elem.detachEvent('on'+type,listener);
        };
    

    1.4 事件触发

    /* eventTarget.dispatchEvent(type) */
    //注意:首先要定义事件,然后才能触发
    var click = new Event('click');
    elem.dispatchEvent('click');
    /* 兼容IE6,7,8 */
    /* eventTarget.fireEvent(type) */???
    

    1.5 事件对象

    var elem = document.getElementById("div1");
    var clickHandler = function(event){
        //to do
    }
    elem.addEventListener('click',clickHandler,false);
    ---
    /* 兼容低版本IE浏览器 */
    var elem = document.getElementById("div1");
    var clickhandler = function(evnt){
        event = event||window.event;
        //to do
    }
    addEvent(elem,'click',clickHandler,false);
    
    • 事件对象的属性
      • type
      • target(srcElement)
      • currentTarget
    • 事件对象的方法
      • stopPropagation
      • preventDefault
      • stopImmediatePropagation

    阻止事件传播

    event.stopPropagation();//W3C
    event.cancelBubble=true;//IE
    event.stopImmediatePropagation();//W3C

    默认行为

    Event.preventDefault();//W3C
    Event.returnValue=false;//IE

    //在function函数中使用
    var clickHandler = function(event){
        event.preventdefault();
        //todo
    };
    

    2 事件分类

    事件分类

    2-1 鼠标事件

    MouseEvent

    事件类型 是否冒泡 元素 默认事件 元素例子
    click yes Element focus/activation div
    dbclick yes Element focus/activation/selection div
    mousedown yes Element drag/scroll/text selection div
    mousemove yes Element None div
    mouseout yes Element None div
    mouseover yes Element None div
    mouseup yes Element context menu div
    mouseenter yes Element None div

    MouseEvent对象

    • 属性
      • clientX,clientY (鼠标指针在浏览器页面上的位置)
      • screenX,screenY (鼠标指针在电脑屏幕上的位置)
      • ctrlKey,shiftKey,altKey,metaKey

    MouseEvent顺序

    • 从元素A上方移过
      • mousemove->mouseover(A)->mouseenter(A)->mousemove(A)->mouseout(A)-mouseleave(A)
    • 点击元素
      • mousedown->[mousemove]->mouseup->click

    Mouse例子:拖拽div

    /* html */
    <div id="bA">
        <div id="bAm"></div>
    </div>
    /* css */
    #bA{
        border:1px solid #ff00ff;
        height:40px;
        position:relative;
    }
    #bAm{
        border:1px solid #00ffff;
        20px;
        height:20px;
        background-color:red;
        margin:5px;
        position:absolute;
        top:0px;
        left:0px;
    }
    /* js */
    var elemb455a = document.getElementById("bAm");
    var clientX,clientY,moving;
    var mouseDownHandler = function(event){
        startX = event.clientX;
        startY = event.clientY;
        moving = !0;
        elemb455a.addEventListener('mousemove',mouseMoveHandler,false);
        elemb455a.addEventListener('mouseup',mouseUpHandler,false);
    };
    var mouseMoveHandler = function(event){
        if(!moving) return;
        var newClientX = event.clientX,
            newClientY = event.clientY;
        var left = parseInt(window.getComputedStyle(elemb455a).left)||0;
        var top = parseInt(window.getComputedStyle(elemb455a).top)||0;
        elemb455a.style.left =left + (newClientX-startX)+'px';
        elemb455a.style.top =top + (newClientY-startY)+'px';
        startX = newClientX;
        startY = newClientY;
    };
    var mouseUpHandler = function(event){
        moving = !1;
        elemb455a.removeEventListener('mousemove',mouseMoveHandler,false);
    };
    elemb455a.addEventListener('mousedown',mouseDownHandler,false);
    

    2-2 滚轮事件

    事件类型 是否冒泡 元素 默认事件 元素例子
    wheel yes Element scroll or zoom,document div
    • 滚轮事件属性
      • deltaMode
      • deltaX
      • deltaY
      • deltaZ

    2-3 FocusEvent

    事件类型 是否冒泡 元素 默认事件 元素例子
    blur no window,element None window,input
    fucus no window,element None window,input
    focusin yes window,element None window,input
    focusout yes window,element None window,input
    /* 使用focusevent来改变input输入文字的颜色 */
    //html
    <div id="obj">
        <input type="text" name="checkfocus" placeholder="focusEvent">
    </div>
    
    //js
    var obj = document.querySelector('#obj').firstElementChild;
    console.log(obj);
    var focusHandler = function(){
        obj.setAttribute('style','border-color : red');
    }
    var blurHandler = function() {
        obj.setAttribute('style','border-color: green');
    }
    obj.addEventListener('focus',focusHandler,false);
    obj.addEventListener('blur',blurHandler,false);
    
    • 属性
      • relatedTarget

    2-4 输入事件

    事件类型 是否冒泡 元素 默认事件 元素例子
    beforeinput yes element update DOM,Element input
    input yes element None input
    • 兼容低版本IE
      • onpropertychange
    /* 使用input事件来控制输入框的颜色 */
    //html
    <div id="obj">
        <input type="text" name="input" placeholder="inputEvent">
    </div>
    
    //js
    var input = document.getElementsByTagName('input')[0];
    console.log(input);
    var inputHandler = function(event){
        input.setAttribute('style','border-color: red');
    }
    input.addEventListener('input',inputHandler,false);
    

    2-5 键盘事件

    事件类型 是否冒泡 元素 默认事件 元素例子
    keydown yes element beforeinput/input
    focus/blur
    activation
    input,div
    keyup yes element None div,input
    • 属性
      • key
      • code
      • ctrlKey,shiftKey,altKey,metaKey
      • repeat
      • keycode(艾斯克码)
      • charCode(艾斯克码)
      • which(艾斯克码)
    /* 使用键盘事件来控制div背景 */
    //html
    <div id="obj">
        <input type="text" name="keyevent" id="keyEvent">
    </div>
    
    //js
    var obj = document.getElementById('obj');
    var keydownHandler = function(event) {
        console.log(event.keyCode);
        if(event.keyCode == 13) {
            obj.setAttribute('style',"background-color:green");
        }
    }
    obj.addEventListener('keydown',keydownHandler,false);
    

    2-6 event

    事件类型 是否冒泡 元素 默认事件 元素例子
    load no window,Document,element None window,image,iframe
    unload no window,document,element None window
    error no window,document,element None window,image
    select no element None input,textarea
    abort no window,element None window,image
    /* 用load来实现一个动画 */
    //html
    <div id="obj">
        <img src="./DOMbasic/res/git.jpg" id="aim">
    </div>
    //css
    #obj {
        position: relative;
         100%;
        height: 100px;
        background: #770000;
    }
    #aim {
        position: absolute;
         60px;
        height: 60px;
        left: 0px;
        top: 0px;
        background-color: #007700;
        margin: 20px;
        transition: left 5s ease 3s;
    }
    //js
    var aim = document.getElementById('aim');
    console.log(aim);
    var loadHandler = function(event) {
        event = event||window.event;
        aim.setAttribute('style','left:1000px');
    };
    
    aim.addEventListener('load',loadHandler,false);
    

    2-7 window

    • window
      • load
      • unload
      • error
      • abort
    • image
      • load
      • error
      • abort
    <img alt="photo" src="http://www.luwanlin.com/imgs/yoho.jpg" onerror="this.src='http://www.luwanlin.com/imgs/opps.gif'">
    
    //html
    <div id="obj">
        <img src="res/error.jpg" width="50px" height="50px" alt="error.jpg">
    </div>
    //js
    var img = document.getElementsByTagName('img')[0];
    img.addEventListener('error',function(event){
        this.src = './DOMbasic/res/zhm.jpg';
    },false);
    

    2-8 UIEvent

    事件类型 是否冒泡 元素 默认事件 元素例子
    resize no window,element None window,iframe
    scroll no/yes document,element None document,div

    3 事件代理

    /* 将li的事件注册到ul上面 */
    <ul>
        <li></li>
        <li></li>
    </ul>
    ---
    //使用父元素代理子元素input中的select事件
    //html
    <div id="obj">
        <input type="text" name="">
    </div>
    //js
    var obj = document.querySelector('#obj');
    obj.addEventListener('select',function(event){
        alert('use event agent!');
    },false);
    
  • 相关阅读:
    Centos7安装go.10.1环境
    centos7安装PHP5
    Linux 无文件攻击memfd_create()具体操作步骤
    centos7 '/mnt/hgfs'下共享文件夹不显示问题
    fiddler连接代理手机无法上网问题解决办法
    centos 镜像软件安装包版本低,手动安装过程
    0 upgraded, 0 newly installed, 0 to remove and 112 not upgraded解决方法
    JavaScript高级程序设计(第3版)第七章读书笔记
    JavaScript高级程序设计(第3版)第六章读书笔记
    JavaScript高级程序设计(第3版)第五章读书笔记
  • 原文地址:https://www.cnblogs.com/luwanlin/p/14274979.html
Copyright © 2011-2022 走看看