JS之事件

一、概念

事件:能被JS监听到的行为

二、事件三要素

  1. 事件源-------------触发事件的源头,谁触发的这个事件(oBtn)
  2. 事件类型----------是哪种事件类型(鼠标事件,键盘事件。。)
  3. 事件处理函数-----事件触发后执行的行为({}中会执行的代码)
 1、形式一
      oBtn.onclick = function(){
        this指向的就是oBtn  
      }
 2、形式二
    oBtn.onclick =  fn(不要带括号)   function fn(){   this指向的就是oBtn   }
 3、形式三 
    <button onclick = 'del(this)'></button>
    function del(obj){
        obj 指代的就是点击元素
    }

4、 普通函数内的this
    function method(){
           consoloe.log(this)
    }


注意:

         事件中的this: 指向事件源

         普通函数中的this:指向的是window

三、事件绑定(事件注册)

      1.DOM 0级事件绑定

  • 语法:事件源.on事件类型 = 事件处理函数
  • 距离:div.onclick = function(){}
  • 缺点:不能给同一个对象的同一个事件进行多次绑定
  • 优点:书写简单,兼容性好

2.DOM2级事件绑定(事件监听)

   2.1标准浏览器

  • 语法:事件源.addEventListener("事件类型",事件处理函数,布尔值);第三参数可以省
  •            事件源.addEventListener("事件类型",事件处理函数);第三参数可以省去
  • 优点:可以给同一个对象的同一个事件进行多次绑定
  • 缺点:兼容性不好(IE低版本的不支持该写法)

2.2  IE 低版本支持

      语法:事件源.attachEvent('on事件类型',事件处理函数);只有两个参数

四、事件解绑

     1.DOM 0级解绑

                              事件源.on事件类型 = null

     2.DOM 2级解绑

        语法:事件源.removeEventListener('事件类型',事件处理函数)

         注意:先绑定再移除(函数再外面单独书写)

             1·绑定 事件源.addEventListener('事件类型',fn)

             2·移除 事件源.removeListener('事件类型',fn)

                function fn(){}

五、事件类型    ***

       1、鼠标事件

  • click        单击
  • dblclick   双击
  • mouseover / mouseout       移入  移出
  • mouseenter / mouseleave   移入  移出
  • mousedown / mousemove / mouseup 按下 / 移动 / 抬起  (拖拽)
  • contextmenu   右键

         2.表单事件

  •  focus --------获取焦点时触发
  •  blur--------- -失去焦点时触发
  •  input--------- 输入内容时触发
  • change------ 内容改变时触发
  •  submit-------提交时触发
  •  reset ------- 重置时触发

 注意

         input: 输入的时候就触发

        change:内容改变就触发(1. 需要失去焦点一次,2. 内容是相较于初始状态发生变化了就触发)

        3.键盘事件

  • 注意:不是任何元素都可以绑定键盘事件的,window,document.表单元素是可以绑定这几个事件的
  • keydown :按下键盘的键时触发的,会连续触发
  • keypress:按住键盘上键时触发的,会连续触发                    
  • keyup:从键盘上抬起时触发,从键上抬起的那一刻触发一次(*常用*)

        4.浏览器事件   (都只有仅有window触发)    

  • window.onscroll = function(){}      页面滚动时触发
  • window.onresize = function(){}     页面窗口大小变化时触发
  • window.onload = function(){}       页面资源(图片,音频,视频,dom节点)加载完成时触发 

六、事件对象

   概念:事件对象中包含(记录)该事件发生时的一系列的信息

  1、     事件对象的获取

 标准浏览下获取:

            事件处理函数的参数位置,书写一个参数,这个参数就是事件对象

            odiv.onclick = function(e){ e就事件对象 }

IE低版本获取:

            事件处理函数的内部用window.event来表示事件对象

2、处理兼容问题:

odiv.onclick = function(e){
                var ev = e || window.event;//ev就是兼容性的事件对象
         }

七、鼠标事件对象的一些属性:

  • e.pageX  和  e.pageY---------鼠标点击位置距离页面的左偏移量  和 上偏移量
  • e.clientX 和  e.clientY -------鼠标点击位置距离浏览器窗口的左偏移量和上偏移量
  • e.offsetX 和  e.offsetY ------鼠标点击位置距离自身元素(事件源)的左偏移量和上偏移量

八、键盘事件的事件对象的属性

  • 1.事件源头
  • 2.事件类型
  • 3.按下哪个键( ev.keyCode : 返回数字,每个键对应不同的数字,回车键 enter对应--13)
  • 4.是否按下了Ctrl( ev.ctrlKey:返回 true 代表你按下了Ctrl,返回 false 代表没有按下Ctrl )

                            ( ev.altKey :返回 true 代表你按下了alt ,返回 false 代表没有按下alt )

 document.querySelector('input').onkeyup = function (e) {
        var ev = e || window.event;
        // console.log(ev.keyCode);//按键的键码
        console.log(ev.altKey);//按下其他键的同时按下alt键返回true,否则false
    }

九、元素的大小和位置

1.获取元素的大小

  • 1.1    元素的可视宽(不包含边框) oDiv.clientWidth----------内容区宽+padding
  •          元素的可视高(不包含边框) oDiv.clientHeight----------内容区高+padding
  • 1.2    元素的占位宽(包含边框 )     oDiv.offsetWidth----------内容区宽+padding+border
  •          元素的占位高(包含边框 )     oDiv.offsetHeight---------内容区高+padding+border

2.获取浏览器窗口的宽度

  • 2.1  window.innerWidth----包含滚动条
  • 2.2  document.body.clientWidth------不包含滚动条

3.元素.offsetLeft  和   元素.offsetTop

  • 元素.offsetLeft
  •               获取距离他最近的具有定位的父级元素的左偏移量,父级没有定位,会相对于 body 来获取
  •                
  • 元素.offsetTop
  •               获取距离他最近的具有定位的父级元素的上偏移量,父级没有定位,会相对于body 来获取
  • 注意:元素(绝对定位的)

十、事件流

10.1概念:事件流(事件传播):描述页面接受事件的顺序,

                                                  事件发生时,会在元素节点之间传播的速度

  • 网景公司:事件捕获:从最不具体元素,依次向下传播到最具体的元素
  •                     外-------》内
  • 微软公司:事件冒泡:从最具体元素,依次到最不具体的元素
  •                      内------》外

W3C规定:事件传播有三个阶段

  • 1.捕获阶段
  • 2.目标阶段 ----具体点击的是谁  ev.target
  • 3.冒泡阶段

10.2注意:

//dom 2 级支持捕获

           事件源.addEventListener('事件类型',事件处理函数,布尔true事件捕获、false事件冒泡,不写默认是冒泡)

//dom 0级不支持捕获写法

阻止事件冒泡

ev.stopPropagation()---阻止冒泡的标准写法

ev.cancelBubble=true---阻止冒泡的  IE 写法

10.3想获取具体点击的是谁:

        10.31.  ev.target------获取点击的具体的元素-----标准写法

                    ev.srcElement----获取点击的具体的元素---IE支持写法

         this----绑定事件的那个元素

         ev.target------具体点击的是谁

阻止事件默认行为

  • ev.preventDefault();
  • return false;( 只支持dom0)
  • .ev.returnValue = false; ie支持(了解)

    事件委托

        原理:利用的是冒泡元素,把绑定事件委托父元素来处理

        好处:1. 资源消耗少,降低内存占用,

                   2. 新增元素也会获取到 父元素的事件

普通绑定元素的方式

 每一个添加点击事件:

      1. 先获取所有的li

      2. 遍历

      3. 给每一个添加点击事件

  缺点:每一个li身上都有一个onclick

           占用系统内存,资源消耗大

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值