事件是在编程时系统内发生的动作或发生的事情(单击、鼠标移动、滚动页面等)。HTML DOM 使 JavaScript 有能力对 HTML 事件做出反应。JS与HTML之间的交互是通过事件实现的,DOM支持大量的事件。事件的本质是程序各个组成部分之间的一种通信方式,也是异步编程的一种实现。

DOM事件模型分三个阶段:事件捕获阶段、处于目标阶段、事件冒泡阶段

代码举例:

<div class= “爷爷”><div class= “爸爸”><div class= “儿子”></div></div>
</div>

即 .爷爷>.爸爸>.儿子,分别添加事件监听 fnYe / fnBa / fnEr

提问1: 点击了谁?

点击文字, 算不算点击儿子;点击文字, 算不算点击爸爸;点击文字, 算不算点击爷爷

答: 都算

提问2: 调用顺序? 点击文字最先调用fnYe/fnBa/fnEr中的哪一个函数?

IE5调用顺序为fnEr->fnBa->fnYe, 网景调用顺序为fnYe->fnBa->fnEr

最后W3C制定标准

  • 文件名为DOM Level 2 Events Specification
  • 规定浏览器同时支持两种调用顺序
  • 首先按爷爷=>爸爸=>儿子顺序看有没有函数监听
  • 然后按儿子=>爸爸=>爷爷顺序看有没有函数监听

因此:从外向内找监听函数,叫事件捕获

从内向外找监听函数,叫事件冒泡

DOM事件模型示意图

addEventListener

事件绑定API

  1. IE5: baba.attachEvent('onclick', fn)//事件冒泡
  2. 网景: baba.addEventListener('click', fn)//事件捕获
  3. W3C: baba.addEventListener('click', fn, bool),

如果bool不传或为falsy, 则fn使用事件冒泡, 即当浏览器在冒泡阶段发现baba有监听函数,就会调用fn并提供事件信息;反之如果bool为true就让fn走捕获,即当浏览器在捕获阶段发现baba有fn监听函数,就会调用fn,并提供事件信息。

JS Bin​js.jirengu.com

target和currentTarget

e.target 是用户操作的元素

e.currentTarget是程序员监听的元素

例如:div>span{文字},用户点击文字,e.target就是span,e.currentTarget是div

特例:如果监听的元素就是用户点击的元素,那么谁先监听就谁先执行

只有一个div被监听(不考 虑父子同时被监听),fn分别在捕获阶段和冒泡阶段监听click事件

用户点击的元素就是开发者监听的

div.addEventLisenter('click', f1)
div.addEventLisenter('click', f2, true)

请问,f1 先执行还是f2先执行?如果把两行调换位置后,请问哪个先执行?

正确答案:谁先监听谁先执行

取消冒泡

捕获不可取消,但冒泡可以

e.stopPropagation()可中断冒泡,浏览器不再向上走,一般用于封装独立组件

不可取消冒泡:有些事件不可取消冒泡

例如:MDN搜索scroll event,看到Bubbles和Cancelable,Bubbles的意思是该事件是否冒泡

Cancelable的意思是开发者是否可以取消冒泡

如何阻止滚动?

滚动条是出现在document上面的

  • 阻止scroll默认动作没用,因为先有滚动才有滚动事件
  • 要阻止滚动,可阻止wheel和touchstart的默认动作
  • 注意你需要找准滚动条所在的元素
  • 但是滚动条还能用,可用CSS让滚动条width: 0

CSS也行

  • 使用overflow: hidden可以直接取消滚动条
  • 但此时JS依然可以修改scrollTop

自定义事件

浏览器自带事件有100多种

事件参考​developer.mozilla.org

如何自定义一个事件

事件委托

就是委托一个元素帮助监听本该监听的元素

场景一:

你要给100个按钮添加点击事件,咋办?

答:监听这100个按钮的祖先,等冒泡的时候判断target是不是这100个按钮中的一个

JS Bin​js.jirengu.com

场景二

你要监听目前不存在的元素的点击事件,咋办?

答:监听祖先,等点击的时候看看是不是我想要监听的元素即可

优点

  • 省监听数(内存)
  • 可以监听动态元素

封装事件委托

JS支持事件吗

答:支持,也不支持。DOM事件不属于JS的功能,术语浏览器提供的DOM的功能

JS只是调用了DOM提供的addEventListener而已

angular div 滚动条事件_DOM事件相关推荐

  1. angular div 滚动条事件_angular怎么控制滚动条

    angular中可通过ion-content指令来控制滚动条,ionContent指令提供一个易用的内容区域,该区域可以用Ionic的自定义滚动视图进行配置,或浏览器内置的溢出滚动. 内容组件提供了一 ...

  2. a标签点击事件_DOM事件机制

    前言 本文主要介绍DOM事件级别.DOM事件模型.事件流.事件代理和Event对象常见的应用,希望对你们有些帮助和启发! 一.DOM事件级别 DOM级别一共可以分为四个级别:DOM0级.DOM1级.D ...

  3. vue 监听某div滚动条的滚动事件

    监听此div , 定义ref <div class="productSec" ref="rightContent" @mousewheel="s ...

  4. vue 移动端监听div滚动条的滚动事件

    第一步:监听div,定义ref <div class="accpdfbox" ref="rightContent" @scroll="scroo ...

  5. JavaScript基础13-day15【DOM增删改、DOM添加删除记录、操作内联样式、获取元素的样式、DOM Element 对象、滚动条练习、事件对象、div跟随鼠标移动、事件冒泡】

    学习地址: 谷粒学院--尚硅谷 哔哩哔哩网站--尚硅谷最新版JavaScript基础全套教程完整版(140集实战教学,JS从入门到精通) JavaScript基础.高级学习笔记汇总表[尚硅谷最新版Ja ...

  6. html页面滚动条监听事件,滚动条的scroll事件

    在vb中,滚动条的scroll 事件和change 事件的区别scroll和change的区别为:指代不同.用法不同.侧重点不同 一.指代不同 scroll:滚屏,滚动. change:变更,变革. ...

  7. angular 点击特定区域外事件

    angular 点击特定区域外事件 模板 <div #unclick>这里不出发事件, 点击其他区域出发事件</Div> 或者 <div class="uncl ...

  8. Jquery为DIV添加点击事件,Jquery为a标签超链接添加点击事件

    Js代码   <div>1</div> <div>2</div> <div>3</div> <div>4</d ...

  9. 子节点含有表单元素的div元素的blur事件

    1.div元素的blur事件 blur事件一般在表单元素如input元素才是存在的,对div.span等元素时无效的,但是可以给div元素加上tabindex属性,也可以让div等元素有焦点,所以bl ...

最新文章

  1. php中的eq的含义,jquery,_jQuery中的eq(0)到底是什么意思??详情请看下面代码!,jquery - phpStudy...
  2. CF293B Distinct Paths题解
  3. python求n的阶乘_python求n的阶乘
  4. HIS系统两种收费模式比较:前计费和后计费
  5. 一款基于Netty开发的WebSocket服务器
  6. Spring Cloud Spring Boot mybatis分布式微服务云架构(一)快速入门
  7. java excel函数_JAVA实现EXCEL公式专题(四)——字符串函数
  8. 阿里推出“阿里云网盘”App;Linux 发布 29 周年​| 极客头条
  9. 如何让C/S应用支持多端(PC、Android、iOS)同时登录?
  10. java.util.stream.IntStream
  11. 小D课堂 - 零基础入门SpringBoot2.X到实战_第1节零基础快速入门SpringBoot2.0_5、SpringBoot2.x的依赖默认Maven版本...
  12. Recommended System
  13. kdj买卖指标公式源码_KDJ买卖副图指标 源码 通达信 贴图
  14. PHP制作面包屑,thinkPHP制作面包屑方法
  15. 智能电饭煲自动洗米手机操控一键搞定
  16. 【附章4包装类】包装类的顶级理解
  17. 【学术方法 | 文献阅读】How to Read Papers
  18. html编辑器的值+dede,dedecms升级ckeditor为ueditor编辑器,详细修改方法和步骤
  19. 软件测试之bug管理
  20. 系统校验矩阵怎么求_软考高级架构师:计算机系统基础知识

热门文章

  1. 和preload_通过LD_PRELOAD绕过disable_functions
  2. simpledateformat格式_如何使用SimpleDateFormat?
  3. R语言基础入门(3)之数据类型与相应运算1
  4. android 4.0系统,全新Android 4.0系统_手机Android频道-中关村在线
  5. oracle tb级别数据量,备份TB级别Oracle数据库的一些技巧
  6. 使用pm2启动node文件_PM2 是什么
  7. pythonjavascript一起开发_Python开发【第十一篇】:JavaScript
  8. .net fileupload批量上传可删除_【JavaWeb基础】文件上传和下载(修订版)
  9. 电脑打开微信小程序_终于可以在电脑上玩转微信小程序啦
  10. 抓包工具mitmproxy | mitmweb基本用法(二)