前言
picker选择器分为三种,普通选择器,时间选择器, 日期选择器 用mode属性区分,默认是普通选择器。
属性 |
类型 |
默认值 |
必填 |
说明 |
最低版本 |
header-text |
string |
|
否 |
选择器的标题,仅安卓可用 |
2.11.0 |
mode |
string |
selector |
否 |
选择器类型 |
1.0.0 |
disabled |
boolean |
false |
否 |
是否禁用 |
1.0.0 |
bindcancel |
eventhandle |
|
否 |
取消选择时触发 |
1.9.90 |
一、普通选择器: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
属性名 |
类型 |
默认值 |
说明 |
最低版本 |
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 |
街道选择器 |
六、picker 案例
<import src="../../../common/head.wxml" />
<import src="../../../common/foot.wxml" />
<view class="container page" data-weui-theme="{{theme}}">
<template is="head" data="{{title: 'picker'}}"/>
<view class="page-body">
<view class="page-section">
<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>
</view>
</view>
<template is="foot" />
</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: 3,
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
})
}
})
七、picker-view 案例
嵌入页面的滚动选择器。其中只可放置 picker-view-column组件,其它节点不会显示。
属性 |
类型 |
默认值 |
必填 |
说明 |
最低版本 |
value |
Array.<number> |
|
否 |
数组中的数字依次表示 picker-view 内的 picker-view-column 选择的第几项(下标从 0 开始),数字大于 picker-view-column 可选项长度时,选择最后一项。 |
1.0.0 |
indicator-style |
string |
|
否 |
设置选择器中间选中框的样式 |
1.0.0 |
indicator-class |
string |
|
否 |
设置选择器中间选中框的类名 |
1.1.0 |
mask-style |
string |
|
否 |
设置蒙层的样式 |
1.5.0 |
mask-class |
string |
|
否 |
设置蒙层的类名 |
1.5.0 |
immediate-change |
boolean |
false |
否 |
是否在手指松开时立即触发 change 事件。若不开启则会在滚动动画结束后触发 change 事件。 |
2.21.1 |
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 |
<import src="../../../common/head.wxml" />
<import src="../../../common/foot.wxml" />
<view class="container page" data-weui-theme="{{theme}}">
<template is="head" data="{{title: 'picker-view'}}"/>
<view class="page-body">
<view class="selected-date">{{year}}年{{month}}月{{day}}日{{isDaytime ? "白天" : "夜晚"}}</view>
<picker-view indicator-style="height: 50px;" style="width: 100%; height: 300px;" value="{{value}}" bindchange="bindChange">
<picker-view-column>
<view wx:for="{{years}}" wx:key="{{years}}" style="line-height: 50px; text-align: center;">{{item}}年</view>
</picker-view-column>
<picker-view-column>
<view wx:for="{{months}}" wx:key="{{months}}" style="line-height: 50px; text-align: center;">{{item}}月</view>
</picker-view-column>
<picker-view-column>
<view wx:for="{{days}}" wx:key="{{days}}" style="line-height: 50px; text-align: center;">{{item}}日</view>
</picker-view-column>
<picker-view-column>
<view class="icon-container">
<image class="picker-icon" src="../../../resources/kind/daytime.png" />
</view>
<view class="icon-container">
<image class="picker-icon" src="../../../resources/kind/night.png" />
</view>
</picker-view-column>
</picker-view>
</view>
<template is="foot" />
</view>
const date = new Date()
const years = []
const months = []
const days = []
for (let i = 1990; i <= date.getFullYear(); i++) {
years.push(i)
}
for (let i = 1; i <= 12; i++) {
months.push(i)
}
for (let i = 1; i <= 31; i++) {
days.push(i)
}
Page({
onShareAppMessage() {
return {
title: 'picker-view',
path: 'packageComponent/pages/form/picker-view/picker-view'
}
},
data: {
theme: 'light',
years,
year: date.getFullYear(),
months,
month: 2,
days,
day: 2,
value: [9999, 1, 1],
isDaytime: true,
},
bindChange(e) {
const val = e.detail.value
this.setData({
year: this.data.years[val[0]],
month: this.data.months[val[1]],
day: this.data.days[val[2]],
isDaytime: !val[3]
})
},
onLoad() {
this.setData({
theme: wx.getSystemInfoSync().theme || 'light'
})
if (wx.onThemeChange) {
wx.onThemeChange(({theme}) => {
this.setData({theme})
})
}
}
})
八、slider 滑动选择器
滑动选择器。
属性 |
类型 |
默认值 |
必填 |
说明 |
最低版本 |
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 |
const pageData = {
data: {
theme: 'light'
},
onShareAppMessage() {
return {
title: 'slider',
path: 'packageComponent/pages/form/slider/slider'
}
},
onLoad() {
this.setData({
theme: wx.getSystemInfoSync().theme || 'light'
})
if (wx.onThemeChange) {
wx.onThemeChange(({theme}) => {
this.setData({theme})
})
}
}
}
for (let i = 1; i < 5; ++i) {
(function (index) {
pageData[`slider${index}change`] = function (e) {
console.log(`slider${index}发生change事件,携带值为`, e.detail.value)
}
}(i))
}
Page(pageData)
<import src="../../../common/head.wxml" />
<import src="../../../common/foot.wxml" />
<view class="container page" data-weui-theme="{{theme}}">
<template is="head" data="{{title: 'slider'}}"/>
<view class="page-body">
<view class="page-section page-section-gap">
<view class="page-section-title">设置step</view>
<view class="body-view">
<slider value="60" bindchange="slider2change" step="5"/>
</view>
</view>
<view class="page-section page-section-gap">
<view class="page-section-title">显示当前value</view>
<view class="body-view">
<slider value="50" bindchange="slider3change" show-value/>
</view>
</view>
<view class="page-section page-section-gap">
<view class="page-section-title">设置最小/最大值</view>
<view class="body-view">
<slider value="100" bindchange="slider4change" min="50" max="200" show-value/>
</view>
</view>
</view>
<template is="foot" />
</view>
评论(0)