zoukankan      html  css  js  c++  java
  • [js]事件篇

    一、事件流

    1.冒泡事件:从特定的事件到不特定事件依次触发;(由DOM层次的底层依次向上冒泡)

    (1)示例:

    1 <html onclick="add('html<br>')">
    2     <body onclick="add('body<br>');">
    3         <div onclick="add('div<br>');">
    4             <p onclick="add('p<br>');">Click Me</p>
    5         </div>
    6     <div id="display"></div>
    7     </body>
    8 </html>
    function add(sText){
        var oDiv = document.getElementById("display");
        oDiv.innerHTML += sText;    //输出点击标签名
    }

    结果如下:

    (2)取消冒泡:冒泡事件有时会带来不必要是的事件发生,可通过以下方式取消冒泡

    oEvent.cancelBubble=ture;    //取消冒泡事件


    2、捕获事件:

    (1)从最不精确到最精确(ie不支持)

    (2)ie中捕获事件:所有事件集中到该对象

    obj.setCapture();    //捕获事件
    obj.relaseCapture();    //释放捕获事件

    二、事件监听方法

    从事件角度看,函数响应事件发生--处理函数;从函数角度看,函数监听事件是否发生--监听函数;

    1、通用监听方法

    (1)在html标签中添加处理函数 例如<p onclick="function(){}"></p>

    (2)通过DOM加载对象,直接设置监听函数

    2、ie监听方法

    obj.attachEvent(event_handle,fnHandler);    //添加监听函数
    obj.detachEvent(event_handle,fnHandler);    //释放监听函数

    3.标准DOM监听方法

    obj.addEventListener(event_name,fnHandler,bCapture);    //添加监听函数
    obj.removeEventListener(event_name,fnHandler,bCapture);    //释放监听函数

    bCapture表示事件类型(ture:捕获/false:冒泡)

    4.ie和标准DOM兼容处理方法

     1 function addEvent(obj,event,fun)
     2 {
     3     if(obj.attachEvent)
     4     {
     5         obj.attachEvent('on'+event,fun);
     6     }
     7     else
     8     {
     9         obj.addEventListener(event,fun,false);
    10     }
    11 }

    三、事件对象

    (1)IE中的事件对象对以window的属性存在:window.event;

        标准DOM中事件对象作为唯一参数传递给事件监听函数;

    (2)两种兼容处理方法:

    1 function(ev)
    2 {
    3     var oEvent=ev||window.event;
    4 }
    1 function(oEvent)
    2 {
    3     if(window.event) oEvent=window.event;
    4 }

    1、事件对象类型及其常用属性方法

    (1)鼠标位置

    clienX/clientY:相对可视区域坐标(不包括滚动的距离)

    screenX/screenY:相对屏幕坐标

    获取包括滚动位置坐标

    1 function getPosition(ev)
    2 {
    3     oEvent=ev||event;
    4     var ollTop=document.documentElement.scrollTop||document.body.scrollTop;
    5     var scrollLeft=document.documentElement.scrollLeft||document.body.scrollLeft;
    6     return{x:oEvent.clientX+scrollLeft,y:ev.clientY+scrollTop}
    7 }

    (2)鼠标事件

      click:单击  dbclick:双击

      mousedown:按下任意键触发  mouseup:松开任意键触发

      mouseover:在某个元素上时候触发  mouseout:移出某一元素

      mousemove:在某个元素上移动时候触发

      button属性:按键键值:【标准dom:0左键、1中键(滑轮)、2右键、不支持组合键】

    (3)键盘事件:

      事件:

      keydown:按下某个键触发

      keypress:按下某个按键产生字符时触发

      keyup:释放摸个按键时触发

      属性:

      event.keycode属性:按键值

      event.crtlkey crtl键是否按下

      event.shiftkey shift键是否按下 

      event.alt alt键是否按下

    四、默认事件

    1、非用户设置,浏览器自身所带的行为;

    2、右键菜单事件:

      (1)document.oncontxetmenu=function(){};

      (2)

    document.onmousedown=function(ev)
    {
        var oEvent=ev||window.event;
        if(oEvent==2){};
    }

    3、取消默认事件: return false

    4、只能输入数字

    1 obj.onkeydown=function(ev)
    2 {
    3     var oEvent=ev||window.event;
    4     if(oEvent.Code==8 &&(oEvent.CodekeyCode<48 || oEvent.keyCode>57) ) return false;
    5 }

     五、html事件

    事件名称  触发条件

    load  加载完成

    unload  卸载完成

    error  脚本错误

    select  选择文本框多个字

    change  文本框失去焦点并且有内容变换

    submit  提交

    focus  获取焦点

    blur  失去焦点

    六、自定义事件

    // 创建事件
    var event = document.createEvent('Event');
    
    // 定义事件名为'build'.
    event.initEvent('build', true, true);
    
    // 监听事件
    elem.addEventListener('build', function (e) {
      // e.target matches elem
    }, false);
    
    // 触发对象可以是任何元素或其他事件目标
    elem.dispatchEvent(event);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////

     七、事件模型 

    1、EventTarget 接口

    • addEventListener:绑定事件的监听函数
    • removeEventListener:移除事件的监听函数
    • dispatchEvent:触发事件

     (1)target.addEventListener(type, listener[, useCapture]);

    • type:事件名称,大小写敏感。
    • listener:监听函数。事件发生时,会调用该监听函数。
    • useCapture:布尔值,表示监听函数是否在捕获阶段(capture)触发,该参数可选。
  • 相关阅读:
    CodeForces 103D 分块处理
    Codeforces Round #375 (Div. 2)
    Codeforces Round #375 (Div. 2)
    Codeforces Round #375 (Div. 2)
    Codeforces Round #375 (Div. 2)
    HYSBZ 1588 营业额统计
    Codeforces Round #371 (Div. 2)
    Codeforces Round #371 (Div. 2)
    Codeforces Round #371 (Div. 2)
    ACM学习历程—POJ3565 Ants(最佳匹配KM算法)
  • 原文地址:https://www.cnblogs.com/pangys/p/5590130.html
Copyright © 2011-2022 走看看