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 } }
事件详解
事件分类
事件分为冒泡事件和非冒泡事件
- 冒泡事件:当一个组件上的事件被触发后,该事件会向父节点传递。
- 非冒泡事件:当一个组件上的事件被触发后,该事件不会向父节点传递。
WXML的冒泡事件列表:
注:除上表之外的其他组件自定义事件都是非冒泡事件,如<form/>
的submit
事件,<input/>
的input
事件,<scroll-view/>
的scroll
事件,(详见各个组件)
事件绑定
事件绑定的写法同组件的属性,以key、value的形式。
- key以
bind
或catch
开头,然后跟上事件的类型,如bindtap
,catchtouchstart
- value是一个字符串,需要在对应的Page中定义同名的函数。不然当触发事件的时候会报错。
bind
事件绑定不会阻止冒泡事件向上冒泡,catch
事件绑定可以阻止冒泡事件向上冒泡。
如在下边这个例子中,点击inner view会先后触发handleTap3
和handleTap2
(因为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 // 大写会转为小写 } })
イベント詳細
イベント分類
イベントが分かれていますバブル イベントと非バブル イベントに分割します🎜- 🎜バブル イベント: コンポーネント上のイベントがトリガーされると、イベントは親ノードに配信されます。 🎜🎜非バブリング イベント: コンポーネント上のイベントがトリガーされると、イベントは親ノードに配信されません。 🎜
<form/>
submit
イベント、<input/>
の input
イベント、<scroll-view/>
の < code>scroll イベント、(詳細は各コンポーネントを参照)🎜🎜イベントバインディング🎜🎜🎜イベントバインディングの書き方はコンポーネントの属性と同じで、keyそして価値観。 🎜🎜🎜キーは bind
または catch
で始まり、その後に bindtap
や catchtouchstart
などのイベントのタイプが続きます。 🎜 🎜value は文字列であり、対応するページに同じ名前の関数を定義する必要があります。そうしないと、イベントがトリガーされたときにエラーが報告されます。 🎜🎜🎜bind
イベント バインディングは、バブリング イベントが上向きにバブリングすることを妨げませんが、catch
イベント バインディングは、バブリング イベントが上向きにバブリングすることを防ぐことができます。 🎜🎜以下の例では、内側のビューをクリックすると handleTap3
と handleTap2
がトリガーされます (タップ イベントが中央のビューまでバブルアップし、中央のビューがタップをブロックするため)イベント バブル。親ノードには渡されなくなりました)、中央のビューをクリックすると handleTap2
がトリガーされ、外側のビューをクリックすると handleTap1
がトリガーされます。 🎜rrreee🎜Event object🎜🎜🎜 特に指定がない限り、コンポーネントがイベントをトリガーすると、ロジック層によってイベントにバインドされたハンドラー関数がイベント オブジェクトを受け取ります。 🎜🎜🎜イベントオブジェクトのプロパティリスト:🎜🎜
CustomEvent カスタムイベントオブジェクトのプロパティリスト (BaseEvent を継承):
TouchEvent タッチイベントオブジェクトのプロパティリスト (BaseEvent を継承): 特殊イベント: タッチイン イベントはできませんバブルなので、currentTarget はありません。 <canvas/>
type
ユニバーサルイベントタイプ
timeStamp
ページが開かれてからイベントがトリガーされるまでに経過したミリ秒数。
target
イベントをトリガーするソースコンポーネント。
currentTarget
イベントがバインドされている現在のコンポーネント。
説明: target と currentTarget は上記の例を参照できます。内側のビューをクリックすると、handleTap3
によって受信されるイベント オブジェクト target と currentTarget は両方とも内側ですが、handleTap2 code> 受信したイベントオブジェクトのターゲットは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
に変換されます。
例:
rrreeerrreeetouches
touches は配列であり、各要素は Touch オブジェクトです (キャンバス タッチ イベントで運ばれるタッチは CanvasTouch 配列です)。 現在画面上のタッチポイントを示します。
TouchオブジェクトCanvasTouchオブジェクトchangedTouches
changedTouchesのデータ形式はタッチと同じです。 無から何かへの変化(touchstart)、位置の変更(touchmove)、何かから無への変化(touchend、touchcancel)など、変化したタッチポイントを示します。
詳細
たとえば、フォームコンポーネントの送信イベントはユーザーの入力を運び、メディアのエラーイベントはエラー情報を運びます。詳細については、各イベントの定義を参照してください。コンポーネントの定義。 🎜🎜🎜🎜
イベントはできませんバブルなので、currentTarget はありません。 <canvas/>
type
ユニバーサルイベントタイプ
timeStamp
ページが開かれてからイベントがトリガーされるまでに経過したミリ秒数。
target
イベントをトリガーするソースコンポーネント。
currentTarget
イベントがバインドされている現在のコンポーネント。
説明: target と currentTarget は上記の例を参照できます。内側のビューをクリックすると、handleTap3
によって受信されるイベント オブジェクト target と currentTarget は両方とも内側ですが、handleTap2 code> 受信したイベントオブジェクトのターゲットは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
に変換されます。
例:
rrreeerrreeetouches
touches は配列であり、各要素は Touch オブジェクトです (キャンバス タッチ イベントで運ばれるタッチは CanvasTouch 配列です)。 現在画面上のタッチポイントを示します。
TouchオブジェクトCanvasTouchオブジェクトchangedTouches
changedTouchesのデータ形式はタッチと同じです。 無から何かへの変化(touchstart)、位置の変更(touchmove)、何かから無への変化(touchend、touchcancel)など、変化したタッチポイントを示します。
詳細
たとえば、フォームコンポーネントの送信イベントはユーザーの入力を運び、メディアのエラーイベントはエラー情報を運びます。詳細については、各イベントの定義を参照してください。コンポーネントの定義。 🎜🎜🎜🎜
data-
で始まり、複数の単語はハイフン-
で結ばれ、大文字は使用できません(大文字は自動的に小文字に変換されます)。のように>data-element-type
の場合、ハイフンは最終的に、event.target.dataset のキャメルケースの elementType
に変換されます。