js事件详解

事件

  1. 事件流

    事件流描述的是从页面中接收事件的顺序

    • 事件冒泡

      IE事件为事件冒泡,即事件由最具体的文档层层向上传播,相当于每层都包含了这个事件

      <html>
      	<head>
      		<title>事件冒泡</title>
      	</head>
      	<body>
      		<div>Click me</div>
      	</body>
      </html>
      

      比如点击最里面的盒子,这个点击事件便会沿着DOM这个流向上传播

      div->body->html->document

      有的浏览器将一直冒泡到window对象

    • 事件捕获

      以上面代码为例,在事件捕获阶段,document这个对象首先接收到click事件,然后沿DOM树传播到实际目标

      document->html->body->div

      DOM事件流

      事件流包括三个阶段:

      1. 事件捕获阶段

      2. 处于目标阶段

      3. 事件冒泡阶段

        其实相当于将上面俩部分合起来,当你点击div时,系统捕获你这个行为是从上到下,这个行为的引发事件是从下到上,通俗易懂

        注意捕获目标阶段在body就停止了,然后是处于目标阶段,当然的处于目标阶段也被包含到事件冒泡阶段的一部分

  2. 事件类型

    事件类型比较多,这里大概列举一下,需要时自己查

    • UI事件

    • 焦点事件(元素获得或失去焦点)

    • 鼠标事件

    • 滚轮事件

    • 文本事件

    • 键盘事件

    • 合成事件

    • 变动事件

    • 变动名称事件

      UI

      load,当元素加载完在元素上触发

      unload 当元素卸载完毕后在元素上触发,只要用户从一个页面切换到另一个页面就会触发,用途:清除引用,防止内存泄漏

      abort 当用户停止下载且没有下载完毕时触发

      error javaScript加载错误时触发,比如图像加载错误

      resize 当窗口或框架大小变化时在window触发

      scroll 当用户滚动带滚动条的内容时在该元素上触发

      焦点事件

      blur 元素失去焦点时触发,不会冒泡

      DOMFocusIn 元素获得焦点时触发,冒泡

      focus 获得焦点时触发,不冒泡

      focusin 获得焦点时触发,冒泡

      focusout 失去焦点时触发

      成对存在,历史版本问题

      焦点从一个元素移到另一个元素上发生的事件

      focusout->focusin

      blur->DOMFocusOut

      focus->DOMFocusIn

      鼠标与滚轮事件

      click 最普通的点击事件

      dblclick 双击按钮

      mousedown按下任意鼠标键触发

      mouseenter鼠标光标首次移到元素内部触发,不冒泡

      mouseleave

      mousemove鼠标在元素内部移动时重复触发

      mouseout鼠标位于一个元素上方,然后移到另一个元素时触发

      mouseover鼠标位于一个元素外部,首次移动到另一个元素边界内触发

      mouseup 释放鼠标按钮触发

      坐标位置:clientX clientY,视口中水平与垂直位置

      ​ pageX pageY 页面中位置,不止视口

      ​ screenX screenY 相对于整个电脑屏幕的位置

  3. 事件委托

    事件委托又叫事件代理,其中与事件冒泡有着不可分割的联系,原理就是利用事件冒泡来实现

    <ul>
    	<li>first</li>
    	<li>second</li>
    	<li>third</li>
    </ul>
    

    看这一段代码,我们平时想为每一个li都添加一个点击事件,就设置三个onlick事件,这样不仅不美观,而且占用内存,影响页面加载。而利用事件冒泡就可以很好解决这个问题。我们可以直接在ul标签上添加一个onlick事件,因为每一个li都是位于ul下边,根据事件冒泡原理这个点击事件会一层一层上去,最终处理事件的是ul里面的函数,避免了代码繁杂

    1. 事件绑定

      • 使用DOM操作

        var a=document.getelemetbyid(id);
        a.onlick=functon(){};
        
      • 直接在html标签中绑定

        <div onlick="fun()"></div>
        js:fun(){}
        
      • 利用添加事件函数(事件监听函数)

        elementObject.addEventListener(eventName,handle,useCapture);
        
        
        

        参数 obj为点击的元素对象,ev为事件类型注意要去掉事件的on,只写 click、dblclick、mouseover这样的事件,fn为事件运行的函数。

        elementObject:DOM对象(即DOM元素 )

        eventName:事件名称。注意,这里的事件名称没有“ on ”,如鼠标单击事件 click ,鼠标双击件 doubleclick ,鼠标移入事件 mouseover,鼠标移出事件 mouseout 等

        handle:事件句柄函数,即用来处理事件的函数。

        useCapture:Boolean类型,是否使用捕获,一般用false 。这里涉及到JavaScript事件流的概念,后续章节将会详细讲解。

        事件移除
        • useCapture设为false

        • 移除事件监听器

          btn2.removeEventListener("click",fn1,false)
          
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值