学习笔记,仅供参考,有错必究


文章目录

  • 事件高级
    • 注册事件
      • addEventListener 事件监听方式
      • attachEvent事件监听方式
      • 案例
    • 删除事件(解绑事件)
      • 删除事件的方式
      • 案例
    • DOM事件流
    • 事件对象
      • 案例
      • 事件对象的常见属性和方法
      • target和this的区别
      • 阻止默认行为
      • 阻止冒泡
    • 事件委托
      • 事件委托原理
    • 常用鼠标事件
      • 禁止选中文字
      • 获得鼠标在页面中的坐标
    • 常用键盘事件

事件高级

注册事件

给元素添加事件,称为注册事件或者绑定事件. 注册事件有两种方式:传统方式方法监听.

addEventListener 事件监听方式

EventTarget.addEventListener(type, listener, useCapture);

该方法将指定的监听器注册到eventTarget(目标对象)上,当该对象触发指定的事件时,就会执行事件处理函数.

该方法接受3个参数:

  • type: 表示监听事件类型的字符串;
  • listener: 事件处理函数,事件发生时,会调用该监听函数;
  • useCapture: 布尔值,默认为false

attachEvent事件监听方式

EventTarget.attachEvent(eventNameWithOn, callback);

EventTarget.attachEvent()方法将指定的监听器注册到eventTarget上,当该对象触发指定的事件时,指定的回调函数就会被执行.

该方法接收两个参数:

  • eventNameWithOn: 事件类型字符串,比如onclick、onmouseover,这里要带on
  • callback: 事件处理函数,当目标触发事件时回调函数被调用.

案例

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title>
</head>
<body><button>按钮1</button><button>按钮2</button><script>var btns = document.querySelectorAll("button");// 传统方式注册btns[0].onclick = function() {alert("A 弹出1");}btns[0].onclick = function() {alert("A 弹出2");}// 事件侦听注册事件 addEventListener// 里面的事件类型是字符串必定加引号而且不带on// 同一个元素同一个事件可以添加多个侦听器(事件处理程序)btns[1].addEventListener("click", function() {alert("B 弹出1");})btns[1].addEventListener("click", function() {alert("B 弹出2");})</script>
</body>
</html>

删除事件(解绑事件)

删除事件的方式

案例

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><style>div {width: 100px;height: 100px;background-color: red;}
</style></head>
<body><div>1</div><div>2</div><script>var divs = document.querySelectorAll('div');divs[0].onclick = function() {alert("弹出1");divs[0].onclick = null;}divs[1].addEventListener("click", fn);function fn() {alert("弹出2");divs[1].removeEventListener("click", fn);}</script>
</body>
</html>

DOM事件流

视频地址:DOM事件流代码验证 .

事件流描述的是从页面中接收事件的顺序。事件发生时会在元素节点之间按照特定的顺序传播,这个传播过程即DOM事件流。

比如我们给一个div注册了点击事件:

  • 捕获阶段
  • 当前目标阶段
  • 冒泡阶段

事件冒泡:IE最早提出,事件开始时由最具体的元素接收,然后逐级向上传播到到DOM最顶层节点的过程。
事件捕获:网景最早提出,由DOM最顶层节点开始,然后逐级向下传播到到最具体的元素接收的过程。

注意:

  • Js代码中只能执行捕获或者冒泡其中的一个阶段。
  • onclick 和 attachEvent 只能得到冒泡阶段。

事件对象

案例

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><style>div {width: 100px;height: 100px;background-color: red;}</style></head>
<body><div>我是div-A</div><div>我是div-B</div><script>var div = document.querySelectorAll("div");div[0].onclick = function(event) {console.log(event);}div[1].addEventListener("click", function(e) {console.log(e);})//1.event就是一个事件对象写到监听函数的小括号里面当形参来看//2.事件对象只有有了事件才会存在,它是系统给我们自动创建的,不需要我们传递参数//3.事件对象是我们事件的一系列相关数据的集合跟事件相关的比如鼠标点击里面就包含了鼠标的相关信息,鼠标坐标啊,如果是键盘事件里面就包含的键盘事件的信息比如判断用户按下了那个键//4.这个事件对象我们可以自己命名比如event、evt、e// 5.事件对象也有兼容性问题 ie678通过 window.event</script>
</body>
</html>

事件对象的常见属性和方法

target和this的区别

e.target返回的是触发事件的对象(元素),而this返回的是绑定事件的对象(元素)

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><style>div {width: 100px;height: 100px;background-color: red;}</style></head>
<body><div>div</div><ul><li>A1</li><li>A2</li></ul><script>var div = document.querySelector("div");div.addEventListener('click', function(e) {console.log(e.target);console.log(this);})var ul = document.querySelector("ul");ul.addEventListener('click', function(e) {console.log(e.target);console.log(this);})</script></body>
</html>

阻止默认行为

<body><a href="https://www.baidu.com/">百度</a><a href="https://www.csdn.net/">CSDN</a><script>var a = document.querySelectorAll("a");a[0].addEventListener("click", function(e) {e.preventDefault();})a[1].onclick = function(e) {// 我们可以用return false的方法阻止默认事件发生,但是return后的代码不会执行.return false;alert("弹出");}</script></body>

阻止冒泡

视频地址:阻止事件冒泡

部分代码:

事件委托

事件委托也称为事件代理,在jQuery里面称为事件委派.

事件委托原理

不是每个子节点单独设置事件监听器,而是事件监听器设置在其父节点上,然后利用冒泡原理影响设置每个子节点.
比如,给ul注册点击事件,然后利用事件对象的target来找到当前点击的li,因为点击li,事件会冒泡到ul上,ul有注册事件,就会触发事件监听器.

部分代码:

常用鼠标事件

禁止选中文字

视频地址:禁止选中文字

获得鼠标在页面中的坐标

视频地址:获得鼠标在页面中的坐标

常用键盘事件

WebAPI(part12)--事件高级相关推荐

  1. 13前端学习之WebAPI(三):节点操作、事件高级、DOM事件流、事件委托冒泡

    文章目录 一.节点操作: 1. 删除节点: 1.2. 案例:删除留言 2. 赋值(克隆)节点: 3. 案例:动态生成表格: 3.1 案例分析: 3.2 实现: 4. 创建元素的三种方式: 4.1 区别 ...

  2. 黑马程序员pink老师前端入门教程,零基础必看的JavaScript基础语法视频教程(DOM,事件高级)

    DOM 节点操作 父节点和子节点 第一个子元素和最后一个子元素 新浪下拉菜单案例 兄弟节点 创建和添加节点 简单版发布留言案例 删除节点 删除留言案例 复制节点 动态生成表格-创建学生数据 动态生成表 ...

  3. 773-780---DOM事件高级(常用鼠标事件,案例:跟随鼠标的天使,常用的键盘事件,案例:模拟京东按键输入内容,案例:模拟京东快递单号查询)

    文章目录 事件高级 7 常用的鼠标事件 7.1常用的鼠标事件 7.2 鼠标事件对象 案例:跟随鼠标的天使 8 常用的键盘事件 8.1 常用的键盘事件 8.2 键盘事件对象 8.3 ASCII 表 案例 ...

  4. JavaScript核心知识第二章---事件高级(含大量代码分析)

    前言 ❤️ 一个人有多重的才华,骨子里就会刻上多大重量的谦卑 ❤️ JavaScript核心知识第二章---事件高级 一.JavaScript 事件高级 (1)注册事件(绑定事件) 1.1 注册事件概 ...

  5. Js事件高级知识点整理

    Js事件高级 注册事件概述 给元素添加事件,成为注册事件或者绑定事件. 注册事件有两种方式:传统方式和方法监听方式. 传统注册方式 利用on开头的事件onclick < button οncli ...

  6. JavaScript之DOM(事件高级)

    事件高级 一.注册事件(绑定事件) 1.传统注册方式 2.方法监听注册方式 1.addEventListener 事件监听方式 2.attachEvent 事件监听方式 3.注册事件兼容性问题 二.删 ...

  7. webAPI学习笔记2(DOM事件高级)

    1. 注册事件(绑定事件) 1.1 注册事件概述 给元素添加事件,称为注册事件或者绑定事件. 注册事件有两种方式:传统方式和方法监听注册方式 传统注册方式  利用 on 开头的事件 onclick & ...

  8. WebAPI(part3)--事件基础

    学习笔记,仅供参考,有错必纠 参考自:pink老师教案 文章目录 Web API 事件基础 事件三要素 执行事件的步骤 常见的鼠标事件 Web API 事件基础 JavaScript使我们有能力创建动 ...

  9. JavaScript(六)—— DOM 事件高级

    本篇为 JavaScript 系列笔记第六篇,将陆续更新后续内容.参考:黑马程序员JavaScript核心教程,前端基础教程 系列笔记: JavaScript(一)-- 初识JavaScript / ...

最新文章

  1. ffmpeg硬解码视频文件播放器
  2. 八.利用springAMQP实现异步消息队列的日志管理
  3. electron android编译,Tiny4412_Android编译步骤
  4. hover时候缓慢切换两张图片
  5. [转]Using The Entity Framework With WCF
  6. 1过程流程图 3 apqp_为什么过程开发的平面布置图要遵循精益原则?
  7. 支付宝和微信的JSSDK发起支付
  8. 45道mysql数据库题目_MySQL 45道练习题
  9. Python 字符串操作(string替换、删除、截取、复制、连接、比较、查找、包含、大小写转......
  10. MySQL与Redis缓存问题-开课吧
  11. 数据清洗(根据元素匹配选取数据)
  12. udev的一個小問題
  13. 采用数值方法计算最速曲线
  14. 5V升压8.4V芯片电路图,5V充电7.4V电池
  15. 【R语言】如何进行英文分词统计(以《爱丽丝漫游奇境》词频统计为例)(20年3月22日复习笔记)
  16. html中红色星号,使用CSS中的星号(*)通配符的总结
  17. 2019年安徽大学ACM/ICPC实验室新生赛题解
  18. openstack 云计算平台 mitaka 搭建
  19. 非独立同分布数据孤岛的联邦学习:一项实验研究
  20. 获投5亿元E轮融资,百分点能否成为数据+AI领域的独角兽?

热门文章

  1. Spark API 详解(转)
  2. sublime+virtualenv+pyspark执行的时候报Unable to load native-hadoop library for your platform
  3. ubuntu16.04下面的redis desktop manger的使用
  4. Rstudio修改背景颜色和源
  5. python全栈_007_Python3格式化输出
  6. 过去一年25个amazing node.js 开源项目(2018版本)
  7. ReactiveCocoa 更优雅的编程(信号探秘)
  8. Python rfind()方法
  9. TableView下拉图片放大
  10. Linux时间 时区 同步