• Welcome to Journal web site.

我是 PHP 程序员

- 开发无止境 -

Next
Prev

微信小程序--事件

Data: 2019-05-28 17:47:42Form: JournalClick: 8

# 微信小程序--事件


# 一、什么是事件

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

事件

  • UI 界面的程序需要和用户互动,例如用户可能会点击你界面上某个按钮,又或者长按某个区域,这类反馈应该通知给开发者的逻辑层,需要将对应的处理状态呈现给用户
  • 我们把这种“用户在渲染层的行为反馈”以及“组件的部分状态反馈”抽象为渲染层传递给逻辑层的“事件”

# 二、自定义事件

  • bindtap 在组件中绑定一个事件处理函数
  • 事件对象可以携带额外信息,data- 自定义传值
<view bindtap="one">点击执行one事件</view>
<view bindtap="two" id="aaa" data-hi="bbb">点击执行two事件,带id,带传值</view>
Page({
  one() {
    console.log("欧阳克");
  },
  two(e) {
    console.log(e);
  },
});

# 三、事件对象

  • BaseEvent 基础事件对象属性列表:
编号属性类型说明
1typeString事件类型
2timeStampInteger事件生成时的时间戳
3targetObject触发事件的组件的一些属性值集合
4currentTargetObject当前组件的一些属性值集合
5markObject事件标记数据
  • CustomEvent 自定义事件对象属性列表(继承 BaseEvent)
编号属性类型说明
1detailObject额外的信息
  • TouchEvent 触摸事件对象属性列表(继承 BaseEvent)
编号属性类型说明
1touchesArray触摸事件,当前停留在屏幕中的触摸点信息的数组
2changedTouchesArray触摸事件,当前变化的触摸点信息的数组

# 四、组件事件 input

编号属性类型默认值必填说明
1valuestring输入框的初始内容
2typestringtextinput 的类型
3passwordbooleanfalse是否是密码类型
4placeholderstring输入框为空时占位符
5placeholder-stylestring指定 placeholder 的样式
6placeholder-classstringinput-placeholder指定 placeholder 的样式类
7disabledbooleanfalse是否禁用
8maxlengthnumber140最大输入长度,设置为 -1 的时候不限制最大长度
9cursor-spacingnumber0指定光标与键盘的距离,取 input 距离底部的距离和 cursor-spacing 指定的距离的最小值作为光标与键盘的距离
10auto-focusbooleanfalse(即将废弃,请直接使用 focus )自动聚焦,拉起键盘
11focusbooleanfalse获取焦点
12confirm-typestringdone设置键盘右下角按钮的文字,仅在 type='text'时生效
13confirm-holdbooleanfalse点击键盘右下角按钮时是否保持键盘不收起
14cursornumber指定 focus 时的光标位置
15selection-startnumber-1光标起始位置,自动聚集时有效,需与 selection-end 搭配使用
16selection-endnumber-1光标结束位置,自动聚集时有效,需与 selection-start 搭配使用
17adjust-positionbooleantrue键盘弹起时,是否自动上推页面
18hold-keyboardbooleanfalsefocus 时,点击页面的时候不收起键盘
19bindinputeventhandle键盘输入时触发,event.detail = {value, cursor, keyCode},keyCode 为键值,2.1.0 起支持,处理函数可以直接 return 一个字符串,将替换输入框的内容。
20bindfocuseventhandle输入框聚焦时触发,event.detail = { value, height },height 为键盘高度,在基础库 1.9.90 起支持
21bindblureventhandle输入框失去焦点时触发,event.detail = {value: value}
22bindconfirmeventhandle点击完成按钮时触发,event.detail = {value: value}
23bindkeyboardheightchangeeventhandle键盘高度发生变化的时候触发此事件,event.detail = {height: height, duration: duration}
<input bindinput="two" style="margin:20rpx;border:1px solid red;" value="输入时触发"></input>
<input bindfocus="two" style="margin:20rpx;border:1px solid red;" value="聚焦时触发"></input>
<input bindconfirm="two" style="margin:20rpx;border:1px solid red;" value="完成时触发"></input>

备:很多组件都有独立的事件


# 五、currentTarget 和 target 区别

  • target 触发事件的源组件
编号属性类型说明
1idString事件源组件的 id
2datasetObject事件源组件上由 data-开头的自定义属性组成的集合
  • currentTarget 事件绑定的当前组件
编号属性类型说明
1idString事件源组件的 id
2datasetObject事件源组件上由 data-开头的自定义属性组成的集合
  • currentTarget 始终是监听事件者,而 target 是事件的真正发出者
<view bindtap="two" id="aaa">点击执行two事件,带id,带传值</view>
<view bindtap="two" id="ccc"
  >点击执行two事件,id是ccc
  <view id="eee">点击执行three事件,id是eee</view>
</view>
<view bindtap="two" id="fff"
  >点击执行two事件,id是fff
  <view bindtap="three" id="ggg">点击执行three事件,id是ggg</view>
</view>

# 六、事件分类

  • 事件分为冒泡事件和非冒泡事件:
    • 冒泡事件:当一个组件上的事件被触发后,该事件会向父节点传递。
    • 非冒泡事件:当一个组件上的事件被触发后,该事件不会向父节点传递。

WXML 的冒泡事件列表

编号类型触发条件
1touchstart手指触摸动作开始
2touchmove手指触摸后移动
3touchcancel手指触摸动作被打断,如来电提醒,弹窗
4touchend手指触摸动作结束
5tap手指触摸后马上离开
6longpress手指触摸后,超过 350ms 再离开,如果指定了事件回调函数并触发了这个事件,tap 事件将不被触发
7longtap手指触摸后,超过 350ms 再离开(推荐使用 longpress 事件代替)
8transitionend会在 WXSS transition 或 wx.createAnimation 动画结束后触发
9animationstart会在一个 WXSS animation 动画开始时触发
10animationiteration会在一个 WXSS animation 一次迭代结束时触发
11animationend会在一个 WXSS animation 动画完成时触发
12touchforcechange在支持 3D Touch 的 iPhone 设备,重按时会触发

备:除上表之外的其他组件自定义事件如无特殊声明都是非冒泡事件

<view id="one" bindtap="one">
  第一级
  <view id="two" bindtap="two">
    第二级
    <view id="three" bindtap="three">
      第三级
    </view>
  </view>
</view>
  • 除 bind 外,也可以用 catch 来绑定事件。与 bind 不同, catch 会阻止事件向上冒泡。
<view id="one" bindtap="one">
  第一级
  <view id="two" catchtap="two">
    第二级
    <view id="three" bindtap="three">
      第三级
    </view>
  </view>
</view>
Name:
<提交>