js的事件

 JS的事件
            什么是事件?
               一个事件的组成

  •                  =>触发谁的事件:事件源
  •                  =>触发什么事件:事件类型
  •                  =>触发后做什么:事件处理函数
  •                  bth.onclick = function(){}
  •                  触发谁的事件  ->bth  ->事件源就是 bth
  •                  触发什么事件  -> onclick ->事件类型就是 click(为什么不加上 on,先欠着,后续在解释)
  •                  触发后做什么事 -> function(){}  ->这个事件的处理函数

        常见的事件(了解)
               浏览器事件
                        onload:页面全部资源加载完毕
                        onscroll:浏览器页面滚动的时候
              鼠标事件:

<body>
    <div>
        <div class="box"></div>
    </div>
    <script>
        //0.获取元素
        var oDiv = document.querySelector('div')
        console.log(oDiv)
        //1.左键单击
        oDiv.onclick = function () {
            console.log('单击元素时触发')
        }

        //2.双击事件       300ms  内连续点击两次鼠标
        oDiv.ondblclick = function () {
            console.log('双击元素时触发')
        }
        //3.右键事件
        oDiv.oncontextmenu = function () {
            console.log('鼠标右键单击时触发')
        }
        //4.鼠标按下事件   鼠标左键按下的时候触发(哪怕鼠标没有抬起也会触发)
        oDiv.onmousedown = function () {
            console.log('鼠标按下时触发')
        }

        //5.鼠标抬起事件     鼠标左键抬起的时候触发
        oDiv.onmouseup = function () {
            console.log('鼠标抬起时触发')
        }

        //6.鼠标移入事件  鼠标移入元素的时候触发    注意:移入子级盒子时,也会触发
        oDiv.onmouseover = function () {
            console.log('onmouseover 移入事件触发')
        }

        //7.鼠标移入事件  鼠标移出元素的时候触发    注意:移入子级盒子时,也会触发
        oDiv.onmouseout = function () {
            console.log('onmouseout 移出事件触发')
        }
        //8.鼠标移入事件2  鼠标移入元素的时候触发
        oDiv.onmouseenter = function () {
            console.log('onmouseenter 移入事件触发')
        }

        //9.鼠标移出事件2   鼠标移出元素的时候触发   注意:移出鼠标到盒子时并不会触发
        oDiv.onmouseleave = function () {
            console.log('onmouseleave 移入事件触发')
        }
        //10.鼠标移动事件   鼠标在 oDiv 元素内部  移动的时候会触发
        oDiv.onmousemove = function () {
            console.log('鼠标移动事件触发~~~')
        }
    </script>
</body>


            键盘事件
               1.document 当前文档
                2.input  输入框        
       

 //1.键盘抬起事件
         document.onkeyup = function () {
             console.log('任意按下,一个按钮抬起时会触发')
         }

        //2.键盘按下事件
        document.onkeydown = function () {
            console.log('键盘任意一个按键被按下')
        }

        //3.键盘按下抬起事件
        document.onkeypress = function () {
        console.log('键盘任意按键按下抬起时触发')
        }


              表单事件    

<body>
    <input type="text">
    <script>
        //0.获取元素
        var inp = document.querySelector('input')

        //1.获取焦点事件
        inp.onfocus = function () {
            console.log('当前文本框获得焦点')
        }

        //2.失去焦点事件
        inp.onblur = function () {
            console.log('当前文本框失去焦点')
        }
        //3.文本框内容改变时触发   触发1次 按下回车才触发
        inp.onchange = function () {
            console.log('当前文本框内容发生改变')
        }
        //4.文本框输入内容时触发  触发多次
        inp.oninput = function () {
            console.log('当前文本框正在输入内容')
        }
    </script>
</body>

 什么是事件对象
               当触发一个事件以后,对该事件的一些描述信息
               比如:
                         =>鼠标点击时的坐标
                         =>触发键盘事件时按下的那个按钮
                
               每一个事件都会有一个对象来描述这些信息,我们就把这个对象叫做事件对象

               浏览器给我们一个'黑盒子',叫做window.event  就是对事件信息的所有描述

               语法:元素.οnclick= function(){
                   console.log(window.event.X轴的坐标信息)
                   console.log(window.event.Y轴的坐标信息)
               }
               
               缺点:这个东西有兼容性问题,在 低版本的IE 里面能用,但在高版本的 IE 和chrome 里面是不好使

               所以我们要换一种使用方式:
               就是在每一个事件处理函数的形参外置, 默认第一个就是事件对象

 事件监听

addEventListener
                语法:元素.addEventListener('事件类型',事件处理函数,第三个形参)
                第三个形参先欠着,后序会详细讲解,因为有默认值,所以我们
        
                注意:这里的事件类型,全部都一样不需要加 on
        
                执行代码顺序会按照我们的注册的顺序执行(也就是代码书写的顺序)

<body>
    <div></div>
    <script>
        //0.获取元素
        var box = document.querySelector('div')

        box.addEventListener('click', function () {
            console.log('绑定的第一个事件')
        })
        box.addEventListener('click', function () {
            console.log('绑定的第三个事件')
        })
        box.addEventListener('click', function () {
            console.log('绑定的第二个事件')
        })
    </script>
</body>

  事件传播
     事件传播就是指当一个元素的子节点触发事件时,他的父级节点也会触发相同的事件
     也就是说点击子节点就相当于点在了父节点上

  •      例:
  •      点击子盒子,会触发子盒子的点击事件
  •      也是点击在父盒子上也会触发父盒子的点击事件
  •      也是点击在body上也会触发body的点击事件
  •      也是点击在HTML上也会触发HTML的点击事件
  •      也是点击在document上也会触发document的点击事件
  •      也是点击在window上也会触发window的点击事件
  •      页面上任何一个元素触发事件,都会一层一层的导致window的相同事件触发

     注意点:
     1、只会传播同类事件,如果是点击事件,那么只会触发父级或者父级的父级他们注册的点击事件,其他类型的事件不会触发
     2、只会从点击的元素开始,按照HTML的结构逐层向上触发同类型的事件
     3、内部元素不管有没有事件,只要上层元素有该事件,那么上层元素的事件就会触发

事件的冒泡与捕获(面试题) 目标
  目标:点击在那个元素上,那么这个事件的目标就是这个元素
      事件的冒泡与捕获(面试题) 
          冒泡:就是从目标的事件处理函数开始,依次向上,一直到window的事件处理函数触发
                也就是说从下向上执行的代码      事件处理函数
          捕获:就是从window的事件处理函数开始,依次向下,一直到目标的事件处理函数触发
                 也就是说从上向下执行的代码      事件处理函数
          区别:在事件的传播中,多个同类型的事件处理函数的执行顺序不同 

 使用捕获方式
     addEventListener第三个参数就是决定当前传播方式为捕获还是冒泡
     默认第三个参数为false,代表方式为冒泡
     如果想以捕获的方式传播,那么给第三个参数传递一个true

 事件委托
      就是要把我自己做的事委托给别人帮我完成

  •       因为我们的冒泡机制,点击元素的时候,也会同步触发元素的相同事件
  •       所以可以把子元素的事件委托给父元素来做
  •       点击子元素的时候,不管子元素有没有点击事件,只要父元素有点击事件,那么就可以触发父元素的点击事件

          target
       这个属性是事件对象里的属性,表示你点击的目标
       这个target 兼容性有问题。在IE浏览器内需要使用 srcELement 语法: e.srcELement(了解即)


      事件委托的优点

  •       页面上本身没有Li,通过代码添却了一些Li
  •       这些Li是没有点击事件的。每次动态的添加Li,还需要丛新给Li绑定一次点击事件
  •       这时使用事件委托比较合适
  •       因为:新加进来的li也是ul的子元素,点击的时候也可以触发ul的点击事件

 默认行为

 默认行为:   不用我们注册,但是自己存在的事情
           比如:    鼠标右键单击,会弹出一个菜单
                          点击a标签后,自己会跳转到页面

          这些不需要我们注册就能实现的事情,我们叫做默认事件
                
 阻止默认事件
                     不希望浏览器执行默认事件,比如点击a标签不跳转页面,那么就需要阻止默认事件

      两种方式:
                    1.e.preventDefault()  ->非IE浏览器    
                    1.e.returnValue=false  ->IE浏览器   (了解即可)
       

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值