微信小程序双击手势处理

相关文档: 手势系统

渲染框架支持情况:Skyline (使用最新 Nightly 工具调试)

功能描述

双击时触发手势

通用属性

属性 类型 默认值 必填 说明
tag string 否 声明手势协商时的组件标识
worklet:ongesture eventhandler 否 手势识别成功的回调
eventhandler 回调参数 说明
state 手势状态
absoluteX 相对于全局的 X 坐标
absoluteY 相对于全局的 Y 坐标
worklet:should-response-on-move callback 否 手指移动过程中手势是否响应
worklet:should-accept-gesture callback 否 手势是否应该被识别
simultaneous-handlers Array.<string> 否 声明可同时触发的手势节点
native-view string 否 代理的原生节点类型

textarea

基础库 1.0.0 开始支持,低版本需做兼容处理。

微信 Windows 版:支持

微信 Mac 版:支持

微信 鸿蒙 OS 版:支持

渲染框架支持情况:Skyline (使用最新 Nightly 工具调试)、WebView

功能描述

多行输入框。该组件是原生组件,使用时请注意相关限制。

通用属性

属性 类型 默认值 必填 说明 最低版本
value string 否 输入框的内容 1.0.0
placeholder string 否 输入框为空时占位符 1.0.0
placeholder-style string 否 指定 placeholder 的样式,目前仅支持color,font-size,font-weight,line-height 1.0.0
disabled boolean false 否 是否禁用 1.0.0
maxlength number 140 否 最大输入长度,设置为 -1 的时候不限制最大长度 1.0.0
auto-focus boolean false 否 自动聚焦,拉起键盘。 1.0.0
focus boolean false 否 获取焦点 1.0.0
auto-height boolean false 否 是否自动增高,设置auto-height时,style.height不生效 1.0.0
cursor-spacing number 0 否 指定光标与键盘的距离。取textarea距离底部的距离和cursor-spacing指定的距离的最小值作为光标与键盘的距离 1.0.0
cursor number -1 否 指定focus时的光标位置 1.5.0
selection-start number -1 否 光标起始位置,自动聚集时有效,需与selection-end搭配使用 1.9.0
selection-end number -1 否 光标结束位置,自动聚集时有效,需与selection-start搭配使用 1.9.0
adjust-position boolean true 否 键盘弹起时,是否自动上推页面 1.9.90
hold-keyboard boolean false 否 focus时,点击页面的时候不收起键盘 2.8.2
disable-default-padding boolean false 否 是否去掉 iOS 下的默认内边距 2.10.0
confirm-type string return 否 设置键盘右下角按钮的文字 2.13.0
合法值 说明
send 右下角按钮为“发送”
search 右下角按钮为“搜索”
next 右下角按钮为“下一个”
go 右下角按钮为“前往”
done 右下角按钮为“完成”
return 右下角按钮为“换行”
confirm-hold boolean false 否 点击键盘右下角按钮时是否保持键盘不收起 2.16.0
adjust-keyboard-to boolean cursor 否 键盘对齐位置。 2.16.1
合法值 说明
cursor 对齐光标位置
bottom 对齐输入框底部
bindfocus eventhandle 否 输入框聚焦时触发,event.detail = { value, height },height 为键盘高度,在基础库 1.9.90 起支持 1.0.0
bindblur eventhandle 否 输入框失去焦点时触发,event.detail = {value, cursor} 1.0.0
bindlinechange eventhandle 否 输入框行数变化时调用,event.detail = {height: 0, heightRpx: 0, lineCount: 0} 1.0.0
bindinput eventhandle 否 当键盘输入时,触发 input 事件,event.detail = {value, cursor, keyCode},keyCode 为键值,目前工具还不支持返回keyCode参数。**bindinput 处理函数的返回值并不会反映到 textarea 上** 1.0.0
bindconfirm eventhandle 否 点击完成时, 触发 confirm 事件,event.detail = {value: value} 1.0.0
bindkeyboardheightchange eventhandle 否 键盘高度发生变化的时候触发此事件,event.detail = {height: height, duration: duration} 2.7.0

Skyline 特有属性

属性 类型 默认值 必填 说明 最低版本
placeholder-style string 否 需要传入一个对象,格式为 { fontSize: number, fontWeight: string, color: string }
bind:selectionchange eventhandle 否 选区改变事件,返回 {selectionStart, selectionEnd} 3.2.0
bind:keyboardcompositionstart eventhandle 否 输入法开始新的输入时触发(仅当输入法支持时触发) 3.2.0
bind:keyboardcompositionupdate eventhandle 否 输入法输入字符时触发(仅当输入法支持时触发) 3.2.0
bind:keyboardcompositionend eventhandle 否 输入法输入结束时触发(仅当输入法支持时触发) 3.2.0

WebView 特有属性

属性 类型 默认值 必填 说明 最低版本
placeholder-class string textarea-placeholder 否 指定 placeholder 的样式类,目前只支持 color、font-size 和 font-weight 1.0.0
fixed boolean false 否 如果 textarea 是在一个 position:fixed 的区域,需要明确将 fixed 属性设置为 true 1.0.0
show-confirm-bar boolean true 否 是否显示键盘上方带有“完成”按钮的那一栏 1.6.0

Bug & Tip

  1. tip: textarea 的 blur 事件会比页面上的 tap 事件晚触发。如果需要在 button 的点击事件中获取 textarea 的内容,可以使用 form 的 bindsubmit。
  2. tip: 不建议在多行文本上对用户的输入进行修改,所以 textarea 的 bindinput 处理函数不会将返回值反映到 textarea 上。
  3. tip: 键盘高度变化时,keyboardheightchange 事件可能会多次触发。对于相同的 height 值,开发者应该忽略掉。
  4. bug: 在微信版本 6.3.30 中,当 textarea 在列表渲染时,新增加的 textarea 在自动聚焦时的位置计算会出错。

示例代码

在开发者工具中预览效果

<view class="section">
  <textarea bindblur="bindTextAreaBlur" auto-height placeholder="自动变高" />
</view>
<view class="section">
  <textarea placeholder="placeholder颜色是红色的" placeholder-style="color:red;"  />
</view>
<view class="section">
  <textarea placeholder="这是一个可以自动聚焦的textarea" auto-focus />
</view>
<view class="section">
  <textarea placeholder="这个只有在按钮点击的时候才聚焦" focus="{{focus}}" />
  <view class="btn-area">
    <button bindtap="bindButtonTap">使得输入框获取焦点</button>
  </view>
</view>
<view class="section">
  <form bindsubmit="bindFormSubmit">
    <textarea placeholder="form 中的 textarea" name="textarea"/>
    <button form-type="submit"> 提交 </button>
  </form>
</view>
//textarea.js
Page({
  data: {
    height: 20,
    focus: false
  },
  bindButtonTap: function() {
    this.setData({
      focus: true
    })
  },
  bindTextAreaBlur: function(e) {
    console.log(e.detail.value)
  },
  bindFormSubmit: function(e) {
    console.log(e.detail.value.textarea)
  }
})

switch

基础库 1.0.0 开始支持,低版本需做兼容处理。

微信 Windows 版:支持

微信 Mac 版:支持

微信 鸿蒙 OS 版:支持

渲染框架支持情况:Skyline (使用最新 Nightly 工具调试)、WebView

功能描述

开关选择器。

属性说明

属性 类型 默认值 必填 说明 最低版本
checked boolean false 否 是否选中 1.0.0
disabled boolean false 否 是否禁用 1.0.0
type string switch 否 样式,有效值:switch, checkbox 1.0.0
color string #04BE02 否 switch 的颜色,同 css 的 color 1.0.0
bindchange eventhandle 否 点击导致 checked 改变时会触发 change 事件,event.detail={ value} 1.0.0

Bug & Tip

  1. tip: switch类型切换时在iOS自带振动反馈,可在系统设置 -> 声音与触感 -> 系统触感反馈中关闭

示例代码

在开发者工具中预览效果

slider

基础库 1.0.0 开始支持,低版本需做兼容处理。

微信 Windows 版:支持

微信 Mac 版:支持

微信 鸿蒙 OS 版:支持

渲染框架支持情况:Skyline (使用最新 Nightly 工具调试)、WebView

功能描述

滑动选择器。

属性说明

属性 类型 默认值 必填 说明 最低版本
min number 0 否 最小值 1.0.0
max number 100 否 最大值 1.0.0
step number 1 否 步长,取值必须大于 0,并且可被(max – min)整除 1.0.0
disabled boolean false 否 是否禁用 1.0.0
value number 0 否 当前取值 1.0.0
color color #e9e9e9 否 背景条的颜色(请使用 backgroundColor) 1.0.0
selected-color color #1aad19 否 已选择的颜色(请使用 activeColor) 1.0.0
activeColor color #1aad19 否 已选择的颜色 1.0.0
backgroundColor color #e9e9e9 否 背景条的颜色 1.0.0
block-size number 28 否 滑块的大小,取值范围为 12 – 28 1.9.0
block-color color #ffffff 否 滑块的颜色 1.9.0
show-value boolean false 否 是否显示当前 value 1.0.0
bindchange eventhandle 否 完成一次拖动后触发的事件,event.detail = {value} 1.0.0
bindchanging eventhandle 否 拖动过程中触发的事件,event.detail = {value} 1.7.0

示例代码

在开发者工具中预览效果

radio-group

基础库 1.0.0 开始支持,低版本需做兼容处理。

微信 Windows 版:支持

微信 Mac 版:支持

微信 鸿蒙 OS 版:支持

渲染框架支持情况:Skyline (使用最新 Nightly 工具调试)、WebView

功能描述

单项选择器,内部由多个 radio 组成。

属性说明

属性 类型 默认值 必填 说明 最低版本
bindchange EventHandle 否 radio-group中选中项发生改变时触发 change 事件,detail = {value:[选中的radio的value的数组]} 1.0.0

radio

基础库 1.0.0 开始支持,低版本需做兼容处理。

微信 Windows 版:支持

微信 Mac 版:支持

微信 鸿蒙 OS 版:支持

渲染框架支持情况:Skyline (使用最新 Nightly 工具调试)、WebView

功能描述

单选项目。

属性说明

属性 类型 默认值 必填 说明 最低版本
value string 否 radio 标识。当该radio 选中时,radio-group 的 change 事件会携带radio的value 1.0.0
checked boolean false 否 当前是否选中 1.0.0
disabled boolean false 否 是否禁用 1.0.0
color string #09BB07 否 radio的颜色,同css的color 1.0.0

示例代码

在开发者工具中预览效果

picker-view-column

基础库 1.0.0 开始支持,低版本需做兼容处理。

微信 Windows 版:支持

微信 Mac 版:支持

微信 鸿蒙 OS 版:支持

渲染框架支持情况:Skyline (使用最新 Nightly 工具调试)、WebView

功能描述

滚动选择器子项。仅可放置于picker-view中,其孩子节点的高度会自动设置成与picker-view的选中框的高度一致

Bug & Tip

  1. tip: 若当前组件所在的页面或全局开启了 enablePassiveEvent 配置项,该内置组件可能会出现非预期表现(详情参考 enablePassiveEvent 文档)
  2. tip: 子节点建议添加 aria-role=option 和 aria-label 以增强无障碍支持。

picker-view

基础库 1.0.0 开始支持,低版本需做兼容处理。

微信 Windows 版:支持

微信 Mac 版:支持

微信 鸿蒙 OS 版:支持

渲染框架支持情况:Skyline (使用最新 Nightly 工具调试)、WebView

功能描述

嵌入页面的滚动选择器。其中只可放置 picker-view-column 组件,其它节点不会显示。

目前滚动过程中 bindpickstart、bindpickend 会被触发多次,后续 skyline 升级会修复该问题 skyline 支持在 picker-view-column 上设置 indicator-style

通用属性

属性 类型 默认值 必填 说明 最低版本
value Array.<number> 否 数组中的数字依次表示 picker-view 内的 picker-view-column 选择的第几项(下标从 0 开始),数字大于 picker-view-column 可选项长度时,选择最后一项。 1.0.0
mask-class string 否 设置蒙层的类名 1.5.0
indicator-style string 否 设置选择器中间选中框的样式 1.0.0
bindchange eventhandle 否 滚动选择时触发 change 事件,event.detail = {value};value 为数组,表示 picker-view 内的 picker-view-column 当前选择的是第几项(下标从 0 开始) 1.0.0
bindpickstart eventhandle 否 当滚动选择开始时候触发事件 2.3.1
bindpickend eventhandle 否 当滚动选择结束时候触发事件 2.3.1

WebView 特有属性

属性 类型 默认值 必填 说明 最低版本
indicator-class string 否 设置选择器中间选中框的类名 1.1.0
mask-style string 否 设置蒙层的样式 1.5.0
immediate-change boolean false 否 是否在手指松开时立即触发 change 事件。若不开启则会在滚动动画结束后触发 change 事件。 2.21.1

Bug & Tip

  1. tip: 滚动时在 iOS 自带振动反馈,可在系统设置 -> 声音与触感 -> 系统触感反馈中关闭
  2. tip: indicator-style 属性 skyline 从基础库 3.3.4 开始支持,目前支持 height、border、background-color

示例代码

在开发者工具中预览效果

picker

基础库 1.0.0 开始支持,低版本需做兼容处理。

微信 Windows 版:支持

微信 Mac 版:支持

微信 鸿蒙 OS 版:支持

渲染框架支持情况:Skyline (使用最新 Nightly 工具调试)、WebView

功能描述

从底部弹起的滚动选择器。

通用属性

属性 类型 默认值 必填 说明 最低版本
header-text string 否 选择器的标题,仅安卓可用 2.11.0
mode string selector 否 选择器类型 1.0.0
合法值 说明
selector 普通选择器
multiSelector 多列选择器
time 时间选择器
date 日期选择器
region 省市区选择器
disabled boolean false 否 是否禁用 1.0.0
bindcancel eventhandle 否 取消选择时触发 1.9.90

除了上述通用的属性,对于不同的mode,picker拥有不同的属性。

普通选择器:mode = selector

属性名 类型 默认值 说明 最低版本
range array/object array [] mode 为 selector 或 multiSelector 时,range 有效
range-key string 当 range 是一个 Object Array 时,通过 range-key 来指定 Object 中 key 的值作为选择器显示内容
value number 0 表示选择了 range 中的第几个(下标从 0 开始)
bindchange eventhandle value 改变时触发 change 事件,event.detail = {value}

多列选择器:mode = multiSelector

属性名 类型 默认值 说明 最低版本
range array/object array [] mode 为 selector 或 multiSelector 时,range 有效
range-key string 当 range 是一个 Object Array 时,通过 range-key 来指定 Object 中 key 的值作为选择器显示内容
value array [] 表示选择了 range 中的第几个(下标从 0 开始)
bindchange eventhandle value 改变时触发 change 事件,event.detail = {value}
bindcolumnchange eventhandle 列改变时触发

时间选择器:mode = time

属性名 类型 默认值 说明 最低版本
value string 表示选中的时间,格式为”hh:mm”
start string 表示有效时间范围的开始,字符串格式为”hh:mm”
end string 表示有效时间范围的结束,字符串格式为”hh:mm”
bindchange eventhandle value 改变时触发 change 事件,event.detail = {value}

日期选择器:mode = date

属性名 类型 默认值 说明 最低版本
value string 当天 表示选中的日期,格式为”YYYY-MM-DD”
start string 表示有效日期范围的开始,字符串格式为”YYYY-MM-DD”
end string 表示有效日期范围的结束,字符串格式为”YYYY-MM-DD”
fields string day 有效值 year,month,day,表示选择器的粒度
bindchange eventhandle value 改变时触发 change 事件,event.detail = {value}

fields 有效值:

值 说明
year 选择器粒度为年
month 选择器粒度为月份
day 选择器粒度为天

省市区选择器:mode = region 1.4.0

属性名 类型 默认值 说明 最低版本
value array [] 表示选中的省市区,默认选中每一列的第一个值
custom-item string 可为每一列的顶部添加一个自定义的项 1.5.0
level string region 选择器层级 2.21.1
bindchange eventhandle value 改变时触发 change 事件,event.detail = {value, code, postcode},其中字段 code 是统计用区划代码,postcode 是邮政编码

level 的有效值

值 说明
province 省级选择器
city 市级选择器
region 区级选择器
sub-district 街道选择器

示例代码

在开发者工具中预览效果

<view class="section">
  <view class="section__title">普通选择器</view>
  <picker bindchange="bindPickerChange" value="{{index}}" range="{{array}}">
    <view class="picker">
      当前选择:{{array[index]}}
    </view>
  </picker>
</view>
<view class="section">
  <view class="section__title">多列选择器</view>
  <picker mode="multiSelector" bindchange="bindMultiPickerChange" bindcolumnchange="bindMultiPickerColumnChange" value="{{multiIndex}}" range="{{multiArray}}">
    <view class="picker">
      当前选择:{{multiArray[0][multiIndex[0]]}},{{multiArray[1][multiIndex[1]]}},{{multiArray[2][multiIndex[2]]}}
    </view>
  </picker>
</view>
<view class="section">
  <view class="section__title">时间选择器</view>
  <picker mode="time" value="{{time}}" start="09:01" end="21:01" bindchange="bindTimeChange">
    <view class="picker">
      当前选择: {{time}}
    </view>
  </picker>
</view>

<view class="section">
  <view class="section__title">日期选择器</view>
  <picker mode="date" value="{{date}}" start="2015-09-01" end="2017-09-01" bindchange="bindDateChange">
    <view class="picker">
      当前选择: {{date}}
    </view>
  </picker>
</view>
<view class="section">
  <view class="section__title">省市区选择器</view>
  <picker mode="region" bindchange="bindRegionChange" value="{{region}}" custom-item="{{customItem}}">
    <view class="picker">
      当前选择:{{region[0]}},{{region[1]}},{{region[2]}}
    </view>
  </picker>
</view>
Page({
  data: {
    array: ['美国', '中国', '巴西', '日本'],
    objectArray: [
      {
        id: 0,
        name: '美国'
      },
      {
        id: 1,
        name: '中国'
      },
      {
        id: 2,
        name: '巴西'
      },
      {
        id: 3,
        name: '日本'
      }
    ],
    index: 0,
    multiArray: [['无脊柱动物', '脊柱动物'], ['扁性动物', '线形动物', '环节动物', '软体动物', '节肢动物'], ['猪肉绦虫', '吸血虫']],
    objectMultiArray: [
      [
        {
          id: 0,
          name: '无脊柱动物'
        },
        {
          id: 1,
          name: '脊柱动物'
        }
      ], [
        {
          id: 0,
          name: '扁性动物'
        },
        {
          id: 1,
          name: '线形动物'
        },
        {
          id: 2,
          name: '环节动物'
        },
        {
          id: 3,
          name: '软体动物'
        },
        {
          id: 4,
          name: '节肢动物'
        }
      ], [
        {
          id: 0,
          name: '猪肉绦虫'
        },
        {
          id: 1,
          name: '吸血虫'
        }
      ]
    ],
    multiIndex: [0, 0, 0],
    date: '2016-09-01',
    time: '12:01',
    region: ['广东省', '广州市', '海珠区'],
    customItem: '全部'
  },
  bindPickerChange: function(e) {
    console.log('picker发送选择改变,携带值为', e.detail.value)
    this.setData({
      index: e.detail.value
    })
  },
  bindMultiPickerChange: function (e) {
    console.log('picker发送选择改变,携带值为', e.detail.value)
    this.setData({
      multiIndex: e.detail.value
    })
  },
  bindMultiPickerColumnChange: function (e) {
    console.log('修改的列为', e.detail.column, ',值为', e.detail.value);
    var data = {
      multiArray: this.data.multiArray,
      multiIndex: this.data.multiIndex
    };
    data.multiIndex[e.detail.column] = e.detail.value;
    switch (e.detail.column) {
      case 0:
        switch (data.multiIndex[0]) {
          case 0:
            data.multiArray[1] = ['扁性动物', '线形动物', '环节动物', '软体动物', '节肢动物'];
            data.multiArray[2] = ['猪肉绦虫', '吸血虫'];
            break;
          case 1:
            data.multiArray[1] = ['鱼', '两栖动物', '爬行动物'];
            data.multiArray[2] = ['鲫鱼', '带鱼'];
            break;
        }
        data.multiIndex[1] = 0;
        data.multiIndex[2] = 0;
        break;
      case 1:
        switch (data.multiIndex[0]) {
          case 0:
            switch (data.multiIndex[1]) {
              case 0:
                data.multiArray[2] = ['猪肉绦虫', '吸血虫'];
                break;
              case 1:
                data.multiArray[2] = ['蛔虫'];
                break;
              case 2:
                data.multiArray[2] = ['蚂蚁', '蚂蟥'];
                break;
              case 3:
                data.multiArray[2] = ['河蚌', '蜗牛', '蛞蝓'];
                break;
              case 4:
                data.multiArray[2] = ['昆虫', '甲壳动物', '蛛形动物', '多足动物'];
                break;
            }
            break;
          case 1:
            switch (data.multiIndex[1]) {
              case 0:
                data.multiArray[2] = ['鲫鱼', '带鱼'];
                break;
              case 1:
                data.multiArray[2] = ['青蛙', '娃娃鱼'];
                break;
              case 2:
                data.multiArray[2] = ['蜥蜴', '龟', '壁虎'];
                break;
            }
            break;
        }
        data.multiIndex[2] = 0;
        break;
    }
    console.log(data.multiIndex);
    this.setData(data);
  },
  bindDateChange: function(e) {
    console.log('picker发送选择改变,携带值为', e.detail.value)
    this.setData({
      date: e.detail.value
    })
  },
  bindTimeChange: function(e) {
    console.log('picker发送选择改变,携带值为', e.detail.value)
    this.setData({
      time: e.detail.value
    })
  },
  bindRegionChange: function (e) {
    console.log('picker发送选择改变,携带值为', e.detail.value)
    this.setData({
      region: e.detail.value
    })
  }
})

label

基础库 1.0.0 开始支持,低版本需做兼容处理。

微信 Windows 版:支持

微信 Mac 版:支持

微信 鸿蒙 OS 版:支持

渲染框架支持情况:Skyline (使用最新 Nightly 工具调试)、WebView

功能描述

用来改进表单组件的可用性。

使用 for 属性找到对应的 id,或者将控件放在该标签下,当点击时,就会触发对应的控件。 for 优先级高于内部控件,内部有多个控件的时候默认触发第一个控件。 目前可以绑定的控件有:button, checkbox, radio, switch, input。

属性说明

属性 类型 默认值 必填 说明 最低版本
for string 否 绑定控件的 id 1.0.0

示例代码

在开发者工具中预览效果