Web前端基础篇-HTML-03-事件处理系统

事件处理是前端的基础,但是又是大家掌握比较不全面的一个知识点,下面由我来给大家总结一下


tmpdir__17_9_7_15_04_07.jpg

一、事件的分类

1.1 PC端事件

1.1.1Window事件

onafterprint - 在打印文档之后运行脚本
onbeforeprint - 在文档打印之前运行脚本
onbeforeonload - 在文档加载之前运行脚本
onblur- 当窗口失去焦点时运行脚本
onerror- 当错误发生时运行脚本
onfocus- 当窗口获得焦点时运行脚本
onhaschange - 文档改变时运行脚本
onload-当文档加载时运行脚本
onmessage- 当触发消息时运行脚本
onoffline- 当文档离线时运行脚本
ononline- 当文档上线时运行脚本
onpagehide-当窗口隐藏时运行脚本
onpageshow-当窗口可见时运行脚本
onpopstate-当文档执行再执行操作(redo)时运行脚本
onresize-当调整窗口大小时运行脚本
onstorage- 当文档加载加载时运行脚本
onundo-当 Web Storage 区域更新时(存储空间中的数据发生变化时)
onunload-当用户离开文档时运行脚本

1.1.2form表单事件

onblur 当元素失去焦点时运行脚本
onchange 当元素改变时运行脚本
oncontextmenu 当触发上下文菜单时运行脚本
onfocus 当元素获得焦点时运行脚本
onformchange 当表单改变时运行脚本
onforminput 当表单获得用户输入时运行脚本
oninput 当元素获得用户输入时运行脚本
oninvalid 当元素无效时运行脚本
onreset 当表单重置时运行脚本。HTML 5 不支持
onselect 当选取元素时运行脚本
onsubmit 当提交表单时运行脚本

1.1.3keyboard事件

onkeydown 当按下按键时运行脚本
onkeypress 当按下并松开按键时运行脚本
onkeyup 当松开按键时运行脚本

1.1.4mouse事件

onclick 当单击鼠标时运行脚本
ondblclick 当双击鼠标时运行脚本
ondrag 当拖动元素时运行脚本
ondragend 当拖动操作结束时运行脚本
ondragenter 当元素被拖动至有效的拖放目标时运行脚本
ondragleave 当元素离开有效拖放目标时运行脚本
ondragover 当元素被拖动至有效拖放目标上方时运行脚本
ondragstart 当拖动操作开始时运行脚本
ondrop 当被拖动元素正在被拖放时运行脚本
onmousedown 当按下鼠标按钮时运行脚本
onmousemove 当鼠标指针移动时运行脚本
onmouseout 当鼠标指针移出元素时运行脚本
onmouseover 当鼠标指针移至元素之上时运行脚本
onmouseup 当松开鼠标按钮时运行脚本
onmousewheel 当转动鼠标滚轮时运行脚本
onscroll 当滚动元素滚动元素的滚动条时运行脚本

1.1.5media事件 - 播放器常用事件

oncanplay 当媒介能够开始播放但可能因缓冲而需要停止时运行
onerror 当在元素加载期间发生错误时运行
onloadeddata 当加载媒介数据时运行脚本
onloadedmetadata 当媒介元素的持续时间以及其他媒介数据已加载时运行
onended 当媒介已抵达结尾时运行脚本
onloadstart 当浏览器开始加载媒介数据时运行脚本
onpause 当媒介数据暂停时运行脚本
onplay 当媒介数据将要开始播放时运行脚本
onplaying 当媒介数据已开始播放时运行脚本
onprogress 当浏览器正在取媒介数据时运行脚本
onratechange 当媒介数据的播放速率改变时运行脚本
onreadystatechange 当就绪状态(ready-state)改变时运行脚
onseeked 当媒介元素的定位属性 [1] 不再为真且定位已结束时运行脚本
onvolumechange 当媒介改变音量亦或当音量被设置为静音时运行脚本

1.2 移动端事件

1.2.1触摸事件(Touch)

touchstart 当手指放在屏幕上触发
touchmove 当手指在屏幕上滑动时,连续地触发
touchend 当手指从屏幕上离开时触发
touches 表示当前跟踪的触摸操作的touch对象的数组
targetTouches 特定于事件目标的touch对象的数组
changedTouches 上次触摸以来发生了什么改变的touch对象的数组

1.2.2 手势事件

gesturestart 当一个手指已经按在屏幕上,而另一个手指又触摸在屏幕时触发
gesturechange 当触摸屏幕的任何一个手指的位置发生改变的时候触发
gestureend 当任何一个手指从屏幕上面移开时触发

二、事件处理流程

事件处理流程分为三个阶段:
1、事件捕获阶段

当用户触发点击事件后,顶层对象 document 就会发出一个事件流,从最外层的 DOM 节点向目标元素节点传递,最终到达目标元素

2、事件处理阶段

当到达目标元素之后,执行目标元素绑定的处理函数。如果没有绑定监听函数,则不做任何处理

3、事件冒泡阶段

事件流从目标元素开始,向最外层DOM节点传递,途中如果有节点绑定了事件处理函数,这些函数就会被执行

注意:一般建议在冒泡阶段处理事件,这样可以最大限度的兼容各种浏览器。
\color{red}{特别提醒:blur、focus、load、unload 等几个事件不会冒泡, 可以通过bubbles属性判断是否可以冒泡}

代码示例:

<!DOCTYPE html>
<html lang="en">
<head>
     <meta charset="UTF-8">
      <title>事件处理</title>
</head>
<body>
 <div id="father">
      <div id="child">
           按钮点击事件:
         <button onclick="onClickCurrentEvent()">click事件</button>
     </div>
 </div>
  <div id="custom">自定义事件</div>
</body>
</html>

事件传递图解

事件处理系统.png

红色线表示第一个阶段捕获,<button>表示目标元素响应,蓝色表示第三阶段冒泡

三、事件监听处理方法

3.1addEventListener
事件目标可以是一个文档上的元素 Element/Document和Window
或者任何其他支持事件的对象;
代码格式
target.addEventListener(type,listenner,options)

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

参数 说明
type 事件类型
listener 函数(事件对象)
listener. bubbles 只读,一个布尔值,表示该事件是否能够在DOM中冒泡。)
listener. cancelBubble 通过在一个事件处理程序返回前设置这个属性的值为真,来阻止事件冒泡
listener. cancelable 只读。一个布尔值,用来表示这个事件是否可以取消。
listener. currentTarget 只读。注册事件监听的对象。
listener. target 只读。对事件起源目标的引用。
listener. preventDefault 取消默认事件
listener. stopPropagation 阻止事件冒泡
options 可选参数
\color{red}{options. apture} 如果为true,表示该listener会在捕获过程中执行。如果为false,listener会在冒泡过程中执行。默认为false
\color{red}{options. once} 默认为false。如果为true,listener只会执行一次,并且执行后会被自动移除
options. passive 如果为true,则无法调用preventDefault来阻止默认事件。默认为false。这个属性有一个需要注意的地方。在safari浏览器的页面滚动事件中,这个值是默认的true。所以要阻止safari中的页面滚动,需要手动将这个值设为false。

3.1 removeEventListener - 删除使用addEventListener注册到target上的事件

注意:一般情况target.addEventListener 与removeEventListener 成对出现,否则可能有内存风险
代码格式
target. removeEventListener(type,listenner,options)

四、事件代理

本意要监听子元素的事件,但是可以直接监听父元素的事件来判断子元素的处理,这里父元素就是代理委托对象

五、自定义事件

5.1 方式一(不推荐)

// 1. 创建一个自定义事件
const event = document.createEvent('Event');

// 2. 创建自定义事件类型
const eventType = "test";

//3. 初始化事件 initEvent(type: string, bubbles?: boolean, cancelable?: boolean): void;
event.initEvent(eventType, false, false);

// 4.为这个元素派发事件
const node = document.getElementById('custom');
node.dispatchEvent(event);

5.2 方式二(小编推荐)

 const node = document.getElementById('custom');
    const event =  new Event('test', {bubbles: false, cancelable: false});
    node.dispatchEvent(event);

事件使用:

    //获取元素
    const node = document.getElementById('custom');

    // 监听事件
    node.addEventListener('test', function (e) {
        console.log('监听自定义事件----',e);
    }, false);

H5系列
Web前端基础篇-HTML-01-BOM浏览器对象模型
Web前端基础篇-HTML-02-HTML的生命周期
Web前端基础篇-HTML-03-事件处理系统
Web前端基础篇-HTML-04-HTML 渲染流程
Web前端基础篇-HTML5-05-最全本地存储总结
Web前端基础篇-HTML5-06-离线缓存AppCache
Web前端基础篇-HTML5-07-浏览器缓存机制

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,560评论 4 361
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,104评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,297评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,869评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,275评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,563评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,833评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,543评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,245评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,512评论 2 244
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,011评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,359评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,006评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,062评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,825评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,590评论 2 273
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,501评论 2 268