• 事件


    之前我们已经学了很多的注册事件种类了,但那些事件都是单个的事件,只能代表一中意思,他们也不能在一个程序中重复使用,下面的会把上面的覆盖掉,而addEventListener()可以在一个程序中多个使用,它在IE8以及以下是不兼容的,IE8以下用的是attachEvent(),但他们用法有相同之处,也有些不同,addEventListener()中有三个参数,第一个参数 : 事件名称 注意不带on,第二个参数 : 事件的监听者 -- 事件处理函数,第三个参数 : Boolean类型 而attachEvent()只有两个参数。

    要特别注意它的第一个参数不带on的,第三个参数有true和false两种类型。

    一般我们都用的是false,false是事件冒泡的意思:

    冒泡就是如果你给子元素注册事件,它会像它的上一级传播注册事件,

    红色为最外面盒子box1,绿色为box1的子元素box2,蓝色为绿色的子元素box3,当我们给box3注册事件时,

     

    按照之前学的这里输出的应该就是当前执行的元素,这里的this指的是当前执行的程序,应该是box3,但最终输出的确实这样的:

    它先输出的是点击的盒子box3,然后会传播给box2,再传播给box1.

    一般程序的默认的都是事件冒泡,它既有优点,也有缺点,优点是可以事件委托,如果一个父元素里有很多子元素,如果要给每个子元素注册事件,那我们只有循环遍历得到每个子元素,再给他注册事件,这样是不是很麻烦,但现在事件冒泡就不需要这么麻烦,我们只需要把本来对子元素注册事件委托给父元素就可以了,不需要一个个注册了,而且就算是动态加进去的子元素,也会执行预期的作用,但如果用之前的遍历,那动态加进去的是不会达到预期的效果的。

    那它的缺点也有:

    login是个盒子,点击link后盒子显示,鼠标点击页面,盒子应该影藏,但实际鼠标点击页面,盒子是隐藏不了的,第一个点击link时,它已经冒泡传播给父元素了,这里我们要用到一个e.stopPropagation();是阻止冒泡的意思。

     那true是事件捕获,它一般很少用,它正好跟事件冒泡反过来,是通过父元素来影响子元素。

     attachEvent()中只有两个参数第一个参数跟上面的不同地方是要在事件前面加on,第二个是一样的,都是事件处理函数,它少了第三个,所以它没有事件冒泡和时间捕获,

    其实事件是有三个阶段:捕获阶段,目标阶段,冒泡阶段。

     

    有注册事件就会有移除事件,他们两个对应的是:

    removeEventListene()
    detachEvent()
    他们用法跟各自对应的是一样的。

     事件对象的获取,获取当前对象有两个方法,他们是有些却别的,分别为:

    你用target时,输出的始终是你点击的那个元素,而currentTarget是当前执行事件的对象,就像在事件冒泡中,你用target时,你点击最里面的元素box3时,你始终获得是box3,不管它传播给谁,你只得到一个,而如果用curentTarget,那你点击box3后,你得到的顺序是box3,box2,box1,就是当你执行哪个就得到哪个,它随着你传播得到相应的对象。

  • 相关阅读:
    android开发架构理解
    检测到LoaderLock”的解决办法(新办法,在vs2008中)
    1-2SPRING-BOOT-JPA添加lombok-管理getter/setter
    PHP数组使用
    处理sublime中文乱码
    c#遍历datatable,dataset
    sublime3更换主题,主题推荐
    laravel voyager 安装
    array_filter,匿名函数
    git 记住密码
  • 原文地址:https://www.cnblogs.com/cykblogs/p/5782307.html
Copyright © 2020-2023  润新知