zoukankan      html  css  js  c++  java
  • 事件系统-视图层-微信小程序

    什么是事件

    • 事件是视图层到逻辑层的通讯方式。
    • 事件可以将用户的行为反馈到逻辑层进行处理。
    • 事件可以绑定在组件上,当达到触发事件,就会执行逻辑层中对应的事件处理函数。
    • 事件对象可以携带额外信息,如 id, dataset, touches。

    事件的使用方式

    • 在组件中绑定一个事件处理函数。    

    使用WXS函数响应事件

    事件分类

    事件分为冒泡事件和非冒泡事件:

    1. 冒泡事件:当一个组件上的事件被触发后,该事件会向父节点传递。
    2. 非冒泡事件:当一个组件上的事件被触发后,该事件不会向父节点传递。

    非冒泡事件,如 form 的submit事件,input 的input事件,scroll-view 的scroll事件

    普通事件绑定

    事件绑定的写法类似于组件的属性,如:

    <view bindtap="handleTap">
        Click here!
    </view>
    

    如果用户点击这个 view ,则页面的 handleTap 会被调用。

    事件绑定函数可以是一个数据绑定,如:

    <view bindtap="{{ handlerName }}">
        Click here!
    </view>
    

    此时,页面的 this.data.handlerName 必须是一个字符串,指定事件处理函数名;如果它是个空字符串,则这个绑定会失效

    绑定并阻止事件冒泡

    除 bind 外,也可以用 catch 来绑定事件。与 bind 不同, catch 会阻止事件向上冒泡。

    例如在下边这个例子中,点击 inner view 会先后调用handleTap3handleTap2(因为tap事件会冒泡到 middle view,而 middle view 阻止了 tap 事件冒泡,不再向父节点传递),点击 middle view 会触发handleTap2,点击 outer view 会触发handleTap1

    <view id="outer" bindtap="handleTap1">
      outer view
      <view id="middle" catchtap="handleTap2">
        middle view
        <view id="inner" bindtap="handleTap3">
          inner view
        </view>
      </view>
    </view>

    点击inner两次,依次触发了handleTap3,
    handleTap2;

     

     多次点击middle,持续触发了handleTap2

     

     多次点击outer,持续触发了handleTap1

     

    互斥事件绑定

    自基础库版本 2.8.2 起,除 bind 和 catch 外,还可以使用 mut-bind 来绑定事件。一个 mut-bind 触发后,如果事件冒泡到其他节点上,其他节点上的 mut-bind 绑定函数不会被触发,但 bind 绑定函数和 catch 绑定函数依旧会被触发。

    换而言之,所有 mut-bind 是“互斥”的,只会有其中一个绑定函数被触发。同时,它完全不影响 bind 和 catch的绑定效果。

     点击inner ,依次触发了handleTap3,handleTap2,handleTap0

     点击midlle,依次触发了handle2,handle1,handle0

    事件的捕获阶段

    自基础库版本 1.5.0 起,触摸类事件支持捕获阶段。捕获阶段位于冒泡阶段之前,且在捕获阶段中,事件到达节点的顺序与冒泡阶段恰好相反。需要在捕获阶段监听事件时,可以采用capture-bindcapture-catch关键字,后者将中断捕获阶段和取消冒泡阶段。

    在下面的代码中,点击 inner view 会先后调用handleTap2handleTap4handleTap3handleTap1

     如果将上面代码中的第一个capture-bind改为capture-catch,将只触发handleTap2

     使用 WXS 函数用来响应小程序事件,目前只能响应内置组件的事件,不支持自定义组件事件。

  • 相关阅读:
    日常工作不常用内容记录:
    python接口自动化(四)——试着实现以下主程序
    python接口自动化(三)——从excel中获取数据
    redis工具类
    Airtest新年“首更”,1.1.7版本抢先看!
    AirtestIDE有哪些好用但是非常隐蔽的小功能?
    年终力荐:网易一站式的自动化测试解决方案
    This和Prototype定义方法的区别
    新版 IDEA 发布,牛逼!网友:内存占用有所好转!
    where 1=1 是什么鬼?
  • 原文地址:https://www.cnblogs.com/playforever/p/12486112.html
Copyright © 2011-2022 走看看