zoukankan      html  css  js  c++  java
  • 事件相关内容

    1、事件

      (1)事件源:触发事件的源头

      (2)事件类型:什么行为

      (3)事件处理函数:触发行为时要做什么事,触发事件源的对应的事件类型时,直接被执行的函数

      (4)事件对象:记录事件发生的所有信息

    2、事件类型

      (1)鼠标类

        1)onclick:点击
    
        2)ondblclick:双击
    
        3)onmousedown:按下
    
        4)onmouseup:抬起
    
        5)onmouseover|onmouseenter:进入
    
        6)onmouseout|onmouseleave:离开
    
        7)onmousemove:移动
    
        8)oncontextmenu:右键单击
    
        9)onwheel:滚轮滚动

     

      (2)键盘类

        Tip:键盘事件只能加给具有焦点的元素或document
    
        1)onkeydown:按下任意键
    
        2)onkeyup:释放任意键
    
        3)onkeypress:抬起并按下

     

      (3)表单控件类 

           1)onblur:失去焦点
    
        2)onfocus:获取焦点
    
        3)oninput:输入
    
        4)onchange:改变
    
        5)onsubmit:提交(只能用于from标签)
    
        6)onreset:重置(只能用于from标签)
    
        7)onselect:选中        

     

      (4)页面类    

        1)onload:页面加载结束后要做什么
    
        2)onscroll:页面发生滚动
          
          属性:页面滚走的距离 (可读可写)

          document.documentElement.scrollTop --> 垂直方向滚动的距离       document.documentElement.scrollLeft --> 水平方向滚动的距离
        3)onresize:窗口或框架的大小发生改变

          属性:页面内容区的尺寸(只读)

          document.documentElement.clientWidth --> 页面内容区的宽度       document.docuementElement.clientHeight --> 页面内容区的高度    

     

    3、事件对象

      (1)特点:

        默认不显示,需要手动获取;

        只有在事件中存在,在事件还没有开始前或结束后,都无事件对象;

        事件对象只跟着事件走,类似于局部变量;

        事件结束后事件对象会被浏览器(window)回收。

      (2)事件对象的获取  (有兼容)    

      兼容方式:
          functioin fn(eve) {
          
              var e = eve || window.event;           
    
        }

      Tip:event只存在于事件中,外部不可用,使用时window不可以省掉

     

      (3)如何通过事件对象获取事件源

        e.target

    4、鼠标事件的常用属性

      (1)检测按下的鼠标按键  -->   button  |   buttons 

      obox.onmousedown = function(eve){g
            var e = eve || window.event;
            console.log(e.button);    //左键:0  滚轮:1   右键:2
            console.log(e.buttons);   //左键:1  滚轮:4   右键:2
        }

     

      (2)检测鼠标相对于浏览器左上角的位置   -->   clientX  |   clientY

        

      obox.onmousedown = function(eve){
            var e = eve || window.event;
            console.log(e.clientX);    //水平方向的位置
            console.log(e.clientY);   //垂直方向的位置
        }

      (3)检测相对于html文档的左上角的位置  -->   pageX  |   pageY

     

      obox.onmousedown = function(eve){
            var e = eve || window.event;
            console.log(e.pageX);    //水平方向的位置
            console.log(e.pageY);   //垂直方向的位置
        }

      Tip: 不支持IE8-

      

      (4)检测相对于显示器屏幕左上角的位置  -->  screenX  |   screenY

      obox.onmousedown = function(eve){
            var e = eve || window.event;
            console.log(e.screenX);    //水平方向的位置
            console.log(e.screenY);   //垂直方向的位置
        }

       

      (5)检测相对于事件源左上角的位置  -->   offsetX   |   offsetY

    obox.onmousedown = function(eve){
            var e = eve || window.event;
            console.log(e.offsetX);    //水平方向的位置
            console.log(e.offsetY);   //垂直方向的位置
        }

     

    5、事件冒泡

      当触发某个元素的某个事件时,它会先触发自己的对应事件,然后再依次向上触发所有父级中相同的事件,如果中间的某个父级没有相同的事件,会继续向上触发。

      由于事件冒泡的既有好也不好,当用不到的时候就需要阻止事件冒泡。

      事件冒泡的阻止(有兼容):

      function stopBubble(e) {
            if(e.stopPropagation) {
                e.stopPropagation();   //非IE
            }else {
                e.cancelBubble = true;  //IE
            }
        }

     

    6、键盘事件及其相关属性

      事件源:document或其他具有焦点的属性

      如何知道按下的是哪个键? -->   keyCode(事件对象的属性)

      keyCode   值为十进制    也是对应的ASCII码   通过keyCode找得到对应的键盘按键

      document.onkeydown = function(eve) {
            var e = eve || window.event;
            if(e.keyCode == 65) {
                console.log("A");
            }
        }


      keyCode存在兼容问题,兼容的解决:
      
      var code = e.keyCode || e.which;

      特殊键:

      1)Ctrl键

        属性:ctrlKey

        取值:true |  false

        当按下其他键时值为false,按下Ctrl键时取值为true

      2)shift键

        属性:shiftKey

        取值同上。

      3)alt键:

        属性:altKey

        取值同上。

      Tip: 常用见取值  -->   左键:37,上键:38,右键:39,下键:40,回车键:13,空格键:32,Backspace键:8

     

    7、默认事件

      我们没有设置,但是系统默认有的事件  ==>  默认事件或默认行为

      如何阻止默认事件?(有兼容)  

      //方法一:
      function stopDefault(e) {
            if(e.preventDefault) {
                e.preventDefault();   //非IE
            }else {
                e.returnValue = false;  //IE
            }
        }
    
    
      //方法二:(无兼容)
        return false;

     

    8、事件的绑定方式

      (1)赋值式(DOM0级事件绑定)

        常用 、简单、没有兼容

     绑定方式: 
       obox.onclick = fn; obox.onclick = function() {//操作} obox.onclick = function() {fn();}

     删除方式:
       obox.obclick = nll;

      

      (2)事件监听式(DOM1级事件绑定)

        有兼容   

      兼容的解决: 

      绑定方式:  

      function addEvent(ele,type,fn) { if(ele.addEventListener){ ele.addEventListener(type,fn); }else if(eve.attachEvent){ ele.attachEvent("on"+type,fn); } else { ele["on"+type] = fn; } }

     

      删除监听:

    1
    function removeEvent(ele,type,fn) { 2 if(ele.removeEventListener){ 3 ele.removeEventListener(type,fn); 4 }else if(eve.detachEvent){ 5 ele.detachEvent("on"+type,fn); 6 } else { 7 ele["on"+type] = fn; 8 } 9 }

    9、事件流的三个阶段

      (1)冒泡阶段  (从里向外) ==>  默认阶段

      (2)目标阶段  (当前阶段)

      (3)捕获阶段 (从外向内)

      Tip:由于赋值式绑定事件无法做捕获,而且IE不支持捕获,所以直接用addEventListener(type,function,boolean)来触发捕获

      addEventListener(type,function,boolean)中第三个参数为捕获位,默认取值为false(即没有触发捕获),当为true时,触发捕获

      Tip2:当处于当前事件源时,为目标状态,不存在捕获和冒泡,事件的执行顺序取决于书写状态;在两个元素之间时,先执行捕获,等捕获的执行完后,再执行冒泡。

    10、事件委托:

      概念:将多个相同元素的相同事件,添加给页面上现存的共同的父级,和事件冒泡,配合事件源,找到真正的点击的元素。

      使用的原因:同一时间只能触发一个事件,其他没有被触发的事件一致处于等待的状态,占内存。

      优点:1)节省性能;2)可以给页面上暂时不存在的元素绑定事件

      缺点:this不再好用(找不到我们想找的元素)

      事件委托的封装: 

     1 function fn(child,callback) {
     2         // 修改fn的返回值为函数,作为将来真正的事件处理函数
     3         return function(eve) {
     4             //找到事件对象身上的事件源
     5             var e = eve || window.event;
     6             var target = e.target || e.srcElement;
     7             //遍历传进来的要委托的元素
     8             for(var i=0;i<child.length;i++) {
     9                 //逐个与事件源的元素作比较,相同了就找到了真正要触发的元素
    10                 if(child[i] === target) {
    11                     // 执行用户传进来的回调函数,完成用户指定的功能的同时,修改this的指向,使其为真正的事件源
    12                     callback.bind(target)();
    13                 }
    14             }
    15         }
    16     }

  • 相关阅读:
    UITextField小结
    cocos2dx 富文本框,支持换行,支持神情(支持汉字截断无乱码)
    JavaScript大文件上传解决方案
    VUE大文件上传解决方案
    WebUploader大文件上传解决方案
    CSharp大文件上传解决方案
    C#.NET大文件上传解决方案
    .NET大文件上传解决方案
    JSP大文件上传解决方案
    SpringCloud上传大文件的三种解决方案
  • 原文地址:https://www.cnblogs.com/hm-08042/p/11444199.html
Copyright © 2011-2022 走看看