WeChatミニプログラムイベント


イベントとは


  • イベントはビュー層からロジック層への通信方法です。
  • イベントは、ユーザーの行動をロジック層にフィードバックして処理できます。
  • イベントはコンポーネントにバインドでき、トリガーイベントに達すると、ロジック層の対応するイベント処理関数が実行されます。
  • イベント オブジェクトは、ID、データセット、タッチなどの追加情報を運ぶことができます。

イベントの使用方法


  • コンポーネント内でイベントハンドラー関数をバインドします。

bindtap など、ユーザーがコンポーネントをクリックすると、対応するイベント処理関数がページの対応するページで見つかります。 bindtap,当用户点击该组件的时候会在该页面对应的Page中找到相应的事件处理函数。

<view id="tapTest" data-hi="MINA" bindtap="tapName"> Click me! </view>
  • 在相应的Page定义中写上相应的事件处理函数,参数是event。
Page({
  tapName: function(event) {    console.log(event)
  }
})
  • 可以看到log出来的信息大致如下
    {
    "type": "tap",
    "timeStamp": 1252,
    "target": {
      "id": "tapTest",
      "offsetLeft": 0,
      "offsetTop": 0,
      "dataset": {
       "hi": "MINA"
      }
    },
    "currentTarget": {
      "id": "tapTest",
      "offsetLeft": 0,
      "offsetTop": 0,
      "dataset": {
        "hi": "MINA"
      }
    },
    "touches": [{
      "pageX": 30,
      "pageY": 12,
      "clientX": 30,
      "clientY": 12,
      "screenX": 112,
      "screenY": 151
    }],
    "detail": {
      "x": 30,
      "y": 12
    }
    }

事件详解

事件分类

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

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

WXML的冒泡事件列表:

QQ截图20170208100738.png

注:除上表之外的其他组件自定义事件都是非冒泡事件,如<form/>submit事件,<input/>input事件,<scroll-view/>scroll事件,(详见各个组件)

事件绑定


事件绑定的写法同组件的属性,以key、value的形式。

  • key以bindcatch开头,然后跟上事件的类型,如bindtap, catchtouchstart
  • value是一个字符串,需要在对应的Page中定义同名的函数。不然当触发事件的时候会报错。

bind事件绑定不会阻止冒泡事件向上冒泡,catch事件绑定可以阻止冒泡事件向上冒泡。

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

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

対応するページ定義に対応するイベント処理関数を記述し、パラメータはeventです。


<view data-alpha-beta="1" data-alphaBeta="2" bindtap="bindViewTap"> DataSet Test </view>

ログ情報は大まかに以下のとおりであることがわかります
Page({  bindViewTap:function(event){
    event.target.dataset.alphaBeta === 1 // - 会转为驼峰写法
    event.target.dataset.alphabeta === 2 // 大写会转为小写
  }
})

イベント詳細

イベント分類

イベントが分かれていますバブル イベントと非バブル イベントに分割します🎜
    🎜バブル イベント: コンポーネント上のイベントがトリガーされると、イベントは親ノードに配信されます。 🎜🎜非バブリング イベント: コンポーネント上のイベントがトリガーされると、イベントは親ノードに配信されません。 🎜
🎜WXML バブリング イベント リスト: 🎜🎜🎜QQ スクリーンショット 20170208100738.png🎜🎜🎜🎜注: 上の表を除き、他のコンポーネントのカスタム イベントは、<form/> submit イベント、<input/>input イベント、<scroll-view/> の < code>scroll イベント、(詳細は各コンポーネントを参照)🎜🎜

イベントバインディング🎜🎜🎜イベントバインディングの書き方はコンポーネントの属性と同じで、keyそして価値観。 🎜🎜🎜キーは bind または catch で始まり、その後に bindtapcatchtouchstart などのイベントのタイプが続きます。 🎜 🎜value は文字列であり、対応するページに同じ名前の関数を定義する必要があります。そうしないと、イベントがトリガーされたときにエラーが報告されます。 🎜🎜🎜bind イベント バインディングは、バブリング イベントが上向きにバブリングすることを妨げませんが、catch イベント バインディングは、バブリング イベントが上向きにバブリングすることを防ぐことができます。 🎜🎜以下の例では、内側のビューをクリックすると handleTap3handleTap2 がトリガーされます (タップ イベントが中央のビューまでバブルアップし、中央のビューがタップをブロックするため)イベント バブル。親ノードには渡されなくなりました)、中央のビューをクリックすると handleTap2 がトリガーされ、外側のビューをクリックすると handleTap1 がトリガーされます。 🎜rrreee🎜Event object🎜🎜🎜 特に指定がない限り、コンポーネントがイベントをトリガーすると、ロジック層によってイベントにバインドされたハンドラー関数がイベント オブジェクトを受け取ります。 🎜🎜🎜イベントオブジェクトのプロパティリスト:🎜🎜

QQ截图20170208100751.png

CustomEvent カスタムイベントオブジェクトのプロパティリスト (BaseEvent を継承):

QQ截图20170208100804.png

TouchEvent タッチイベントオブジェクトのプロパティリスト (BaseEvent を継承):

QQ截图20170208100804.png

特殊イベント: タッチイン

イベントはできませんバブルなので、currentTarget はありません。 <canvas/>


type

ユニバーサルイベントタイプ

timeStamp

ページが開かれてからイベントがトリガーされるまでに経過したミリ秒数。

target

イベントをトリガーするソースコンポーネント。

QQ截图20170208100821.png

currentTarget

イベントがバインドされている現在のコンポーネント。

QQ截图20170208100833.png

説明: target と currentTarget は上記の例を参照できます。内側のビューをクリックすると、handleTap3 によって受信されるイベント オブジェクト target と currentTarget は両方とも内側ですが、handleTap2 受信したイベントオブジェクトのターゲットはinner、currentTargetはmiddleです。 handleTap3 收到的事件对象 target 和 currentTarget 都是 inner,而 handleTap2 收到的事件对象 target 就是 inner,currentTarget 就是 middle。

dataset

在组件中可以定义数据,这些数据将会通过事件传递给 SERVICE。 书写方式: 以data-开头,多个单词由连字符-链接,不能有大写(大写会自动转成小写)如data-element-type,最终在 event.target.dataset 中会将连字符转成驼峰elementType

< /h5>

dataset

データはコンポーネント内で定義でき、これらのデータはイベントを通じて SERVICE に渡されます。 書き方:data-で始まり、複数の単語はハイフン-で結ばれ、大文字は使用できません(大文字は自動的に小文字に変換されます)。のように>data-element-type の場合、ハイフンは最終的に、event.target.dataset のキャメルケースの elementType に変換されます。

例:

rrreeerrreee

touches

touches は配列であり、各要素は Touch オブジェクトです (キャンバス タッチ イベントで運ばれるタッチは CanvasTouch 配列です)。 現在画面上のタッチポイントを示します。 QQ截图20170208100850.png

Touchオブジェクト

QQ截图20170208100900.png

CanvasTouchオブジェクト

changedTouches

changedTouchesのデータ形式はタッチと同じです。 無から何かへの変化(touchstart)、位置の変更(touchmove)、何かから無への変化(touchend、touchcancel)など、変化したタッチポイントを示します。

詳細

たとえば、フォームコンポーネントの送信イベントはユーザーの入力を運び、メディアのエラーイベントはエラー情報を運びます。詳細については、各イベントの定義を参照してください。コンポーネントの定義。 🎜🎜🎜🎜