FE事件机制

HTML移动端事件初略

事件流机制

前端领域一直都存在各路英雄逐鹿中原的现象,导致标准繁多,给开发人员带来不少困。但也因为这些不同思想之间的竞争,才早就了前端领域里一些有趣的机制和现象。比如事件流机制。

事件流描述的就是从页面中接收事件的顺序。而IE和Netscape提出了完全相反的事件流概念。IE事件流是事件冒泡,而Netscape的事件流就是事件捕获。

图1-前端事件机制

HTML的移动端事件分为三个阶段:事件捕获阶段、目标阶段和事件冒泡阶段。首先发生的事件捕获,为截获事件提供了机会。然后是实际的目标接收了事件。最后一个阶段是冒泡阶段,可以在这个阶段对事件做出响应。


案例分析

在前端页面中,视图由DOM树决定,DOM树的构成如下:


图2-前端DOM树


来看一个具体的case,outter是最外层容器,v1和v2都是outter的子节点,V3是V2的子节点。然后我们给每个节点给加上事件监听(捕获阶段和冒泡阶段都加上)。


图3-case分析

DOM结构如下:

<html>
      <body>
          <div class="outter">
              <div class="frame"></div>
              <div class="img">
                  <div class="button"></div>
              </div>
          </div>
      </body>
</html>

给每一个DOM节点添加点击监听事件。

window.onload = function (e) {
    document.querySelector('.frame').addEventListener('click', function (event) {
        alert('v1');
    }, false);
    document.querySelector('.frame').addEventListener('click', function (event) {
        alert('v1 la');
    }, true);
    document.querySelector('.img').addEventListener('click', function (event) {
        alert('v2');
    }, false);
    document.querySelector('.img').addEventListener('click', function (event) {
        alert('v2 la');
    }, true);
    document.querySelector('.button').addEventListener('click', function (event) {
        alert('v3');
    }, false);
    document.querySelector('.button').addEventListener('click', function (event) {
        alert('v3 la');
    }, true);
}

点击按钮超出部分时,会依次弹框'v2 la'、'v3'、'v3 la'、'v2'。

值得关注的是,事件监听触发回调函数时,MouthEvent是对应的事件对象,移动端Touch时就是TouchEvent对象。


待补充


触摸事件

触摸事件是移动端特有的事件类型。

类型详解

touchstart:当手指放在屏幕上触发;

touchmove:当手指在屏幕上滑动时,连续地触发;

touchend:当手指从屏幕上离开时触发;

touchcancel: 当系统停止跟踪时触发; 该事件暂时使用不到;

touch事件兼容性

图4-touch事件兼容性

除了IE之外,其他主流浏览器都已经兼容touch事件。


小程序

小程序最近越来越火,生态越来越丰富和开放。小程序本身提供了比H5更丰富的事件类型,开发同学们可以用这些事件开发出更接近APP用户体验的应用。

小程序与浏览器环境对比

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

推荐阅读更多精彩内容

  •   JavaScript 与 HTML 之间的交互是通过事件实现的。   事件,就是文档或浏览器窗口中发生的一些特...
    霜天晓阅读 3,502评论 1 11
  • js之事件机制 1、事件初探 1.1 js事件的概述 JavaScript事件:JavaScript是基于事件驱动...
    道无虚阅读 2,374评论 1 3
  • 以下文章为转载,对理解JavaScript中的事件处理机制很有帮助,浅显易懂,特分享于此。 什么是事件? 事件(E...
    jxyjxy阅读 3,042评论 1 10
  • 事件流 IE和Netscape开发团队提出了完全相反的两种事件流的概念,事件冒泡流和事件捕获流。 事件冒泡 事件由...
    exialym阅读 938评论 0 9
  • 没有太多的情绪。同行的伙伴是个心思单纯的女孩儿,走在校园中,总会不时发出各种惊叹“哇,这个真的好厉害!”或...
    厃目阅读 131评论 1 2