事件相关内容

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  |   pagesY

  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

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)事件监听式(DOM0级事件绑定)

    有兼容   

  兼容的解决: 

  绑定方式:  

  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; } }

  删除方式:

  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; } }

9、事件流的三个阶段

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

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

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

  待补充……

  

猜你喜欢

转载自www.cnblogs.com/hm-08042/p/11444199.html
今日推荐