微信小程序——picker组件

picker组件应用比较广泛,可以做普通的选择器,也可以单独专门做一个时间选择器。这里我们先用一个时间选择器作为例子使用,时间选择器中比较重要的属性如下

  • value:表示选中的时间,格式为“hh:mm”,默认为空。
  • start:有效范围开始时间
  • end:有效范围结束时间
  • bindchange:value改变时触发change事件
  • disable:是否禁用,默认为false
代码如下:

a.wxml

<picker value='{{selectTime}}' mode="time" start="{{startTime}}" end="{{endTime}}" bindchange="change"> 
  <view class="picker">
    当前选中:{{selectTime}}
  </view>
</picker>

a.js
Page({
change:function(e)
{
  this.setData({
    selectTime:e.detail.value
  });
},
data: {
  startTime:"00:00",
  endTime:"24:00",
  selectTime:"11:00",
}
});
a.wxss

.picker{border:solid 1px #ddd;background-color: #fafafa; padding:10px}





手写Picker组件主要包括以下几个步骤: 1. 创建一个组件文件夹,命名为picker,并在该文件夹下创建两个文件:picker.wxml 和 picker.js。 2. 在 picker.js 中定义组件的属性和方法,包括: - properties: 定义传入组件的属性,如选项数组、默认选中值等。 - data: 定义组件内部的数据,如选中的值、是否显示等。 - methods: 定义组件的方法,如打开/关闭选择器、选择某一项等。 3. 在 picker.wxml 中编写组件的结构和样式,包括: - 使用<view>标签包裹整个组件,并设置样式; - 根据传入的选项数组,使用<scroll-view>标签渲染出所有选项,并设置样式; - 根据选中的值,使用<view>标签显示当前选中的项,并设置样式; - 可以使用<cover-view>标签覆盖在滚动列表上面,实现点击遮罩关闭选择器的效果。 4. 在外部页面中引用该组件,并传入选项数组等属性。 下面是一个简单的手写Picker组件代码示例: picker.js ``` Component({ // 组件的属性列表 properties: { options: { type: Array, value: [] }, value: { type: String, value: '' } }, // 组件的初始数据 data: { showPicker: false, selectedIndex: 0, selectedValue: '' }, // 组件的方法列表 methods: { // 打开选择器 openPicker: function() { this.setData({ showPicker: true }); }, // 关闭选择器 closePicker: function() { this.setData({ showPicker: false }); }, // 选择某一项 selectItem: function(e) { var index = e.currentTarget.dataset.index; var value = this.data.options[index].value; this.setData({ selectedIndex: index, selectedValue: value }); this.triggerEvent('change', { value: value }); } } }) ``` picker.wxml ``` <view class="picker"> <view class="mask" wx:if="{{showPicker}}" bindtap="closePicker"></view> <view class="picker-container" wx:if="{{showPicker}}"> <scroll-view class="options" scroll-y="true"> <view class="option" wx:for="{{options}}" wx:key="{{index}}" data-index="{{index}}" bindtap="selectItem">{{item.label}}</view> </scroll-view> <view class="selected" bindtap="closePicker">{{selectedValue}}</view> </view> <view class="trigger" bindtap="openPicker">{{selectedValue}}</view> </view> ``` picker.wxss ``` .picker { position: relative; } .mask { position: fixed; top: 0; left: 0; right: 0; bottom: 0; background: rgba(0, 0, 0, 0.5); } .picker-container { position: fixed; bottom: 0; left: 0; right: 0; background: #fff; } .options { max-height: 200rpx; overflow-y: scroll; } .option { padding: 10rpx; } .selected { padding: 10rpx; font-size: 16rpx; text-align: center; border-top: 1rpx solid #eee; } .trigger { padding: 10rpx; font-size: 16rpx; text-align: center; border-top: 1rpx solid #eee; } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值