事件-Event

事件

所谓事件,就是指发生了一件事情,一个完整的事件流是从window对象开始,最后回到window的一个过程。
事件流分为三个阶段,捕获阶段,目标阶段,以及冒泡阶段。

事件监听

发生了一件事需要作出对应的响应就得有事件监听(函数)的存在,事件监听器根据对发生的事件的解析来确定是否要作出相应的反应。
事件监听我们一般常用以下几种监听器安装(监听函数的创建)方法:1、dom0级,2、dom2级,3、其他第三方库封装方法(都是基于原生JS做的)
首先dom0级监听函数的安装其实操作也很简单,他并没有完全被一代代新版本的ES标准所抛弃,因为部分情况下,dom0的语法其实是更简单的。举个例子,我们需要在鼠标移入div的情况下让div的高度变化,以下监听函数就能实现:

document.querySelector("div").onmouseenter=function(){
         document.querySelector("div").style.height="200px"
}

因为鼠标移入本身就是一件事情,这件事情发生了就叫做事件,于是对应的绑定的事件监听函数就会被触发,被选中div元素的高度会变成200px。
当然之前提到的dom2的监听器绑定方法如下:

 document.querySelector("div").addEventListener('mouseenter',function(){
     document.querySelector("div").style.height="200px"
})

当然事件中的鼠标移入事件只是诸多事件中的常见一种而已,更多的事件学习请参考:点击前往:runoob

前面简单介绍什么事事件,以及事件的添加,下面介绍下移除事件
1、dom0级事件移除:

 document.querySelector("div").onmouseenter = null;

这个我个人认为是很暴力但是也很简单实用的事件移除手段。
2、dom2级事件移除:
首先dom2创建的事件是无法用上面的方法去移除的,比如下面代码中,事件的移除是不会生效的;

  function changeHeight(){
            document.querySelector("div").style.height="200px"
        }
        document.querySelector("div").addEventListener('mouseenter',changeHeight);
        document.querySelector("div").onmouseenter=null;

因此要用以下方法去移除事件:

function changeHeight(){
            document.querySelector("div").style.height="200px"
        }
        document.querySelector("div").addEventListener('mouseenter',changeHeight);
        document.querySelector("div").onmouseenter=null;//无效
        document.querySelector("div").removeEventListener('mouseenter',changeHeight)//有效

事件代理

顾名思义,事件代理就是把多个累死的事情代理在一个对象上,通常代理给父级元素或者祖先级元素,例如现在有个要求,一个ul元素里面有是个li元素,id分别为li0~li9;现在需求是每点击一个li,打印li的id值。
分析:10个li身上的事件是类似的但又不完全相同(因为他们的id值不同,因此打印结果不同),这时候我们当然可以给每个li元素绑定时间监听函数,但这样及其麻烦而且不利于性能的提升,因此此时就是事件代理应用的典型场景:代码如下:

<body>
    <ul>
        <li id="li0">我是li0</li>
        <li id="li1">我是li1</li>
        <li id="li2">我是li2</li>
        <li id="li3">我是li3</li>
        <li id="li4">我是li4</li>
        <li id="li5">我是li5</li>
        <li id="li6">我是li6</li>
        <li id="li7">我是li7</li>
        <li id="li8">我是li8</li>
        <li id="li9">我是li9</li>
    </ul>
    <script>
        document.querySelector("ul").onclick=function(event){
            let idOfLi = event.target.id;
            console.log(idOfLi);   
        }
    </script>
</body>

这样子就实现了简单的事件代理:
下过如下:
在这里插入图片描述
最后,本篇只是简单介绍了下事件,但是可以以此入门去探索更有趣的事件。

发布了19 篇原创文章 · 获赞 0 · 访问量 286

猜你喜欢

转载自blog.csdn.net/Joey_Tribiani/article/details/103723330