寫小程序時候,經常遇到使用下拉框選項,不過每次都手寫很麻煩,所有我就發一個例子吧,因為我包在其他模塊中,所有樣式不知道有沒有復制全,大家見諒!
小程序也有一個選項組件:picker 這個非常好用, 現在基本都用這個了。挺不錯。后來我才發現的。
·
好了,不啰嗦,如下:
每一個值的高度等你們可以隨意設置,看個人喜好。
變量解釋:
這個原理很簡單,首先準備一些標簽,準備一張圖片(展開與折疊用),數據綁定就不說了。
設置變量:selectShow, 控制下拉框列表是否顯示隱藏,我設置的是高度,顯示就設置高度,不顯示就設置為0; index,設置顯示第幾個數據,默認可以設置為0,根據需求; selectData,你要選擇的數據組[];
js事件:
當點擊三角時候,設置下拉框option選項顯示(高度)。當點擊選項值的時候,設置全局變量的下標值,標簽中會根據下標在數組中選中,綁定數據顯示, 然后設置下拉框option選項不顯示(高度0)。
Page({
data: {
selectShow: false,//控制下拉列表的顯示隱藏,false隱藏、true顯示
selectData: ['15:10','15:15','15:20'],//下拉列表的數據
index: 0,//選擇的下拉列表下標
},
// 點擊下拉顯示框
selectTap() {
this.setData({
selectShow: !this.data.selectShow
});
},
// 點擊下拉列表
optionTap(e) {
let Index = e.currentTarget.dataset.index;//獲取點擊的下拉列表的下標
this.setData({
index: Index,
selectShow: !this.data.selectShow
});
}
})
頁面布局解釋:
option總高度設置,根據你有多少選項以及selectShow值是否顯示,我設置的是小于5個時候默認高度325rpx,超過五個時候,選項組length每一個50rpx,
height:{{selectShow?(selectData.length>5?325:selectData.length50):0}}rpx;
這個是寫的一個樣式,我的圖片是倒三角,當展開時候,添加一個樣式,rotate180度。
class='select_img {{selectShow&&"select_img_rotate"}}' src='../../images/b2.png'
這個是我的選項內容是一組數組,所有我循環出來,順便綁定一個數據到標簽中data-index,也就是這個值在數組中的下標,點擊時候獲取方便用。然后添加一個事件catchtap='optionTap'。
wx:for='{{selectData}}' wx:key='this' data-index='{{index}}' catchtap='optionTap'
<view class='select_box'>
<view class='select' catchtap='selectTap'>
<text class='select_text'>{{selectData[index]}}</text>
<image class='select_img {{selectShow&&"select_img_rotate"}}' src='../../images/b2.png' background-size="contain"></image>
</view>
<view class='option_box' style='height:{{selectShow?(selectData.length>5?325:selectData.length*50):0}}rpx;'>
<text class='option' wx:for='{{selectData}}' wx:key='this' data-index='{{index}}' catchtap='optionTap'>{{item}}</text>
</view>
</view>
wxss樣式:
不解釋,,看設計需求寫樣式。不過大多通用。
.select_box{
width:45%;
height:70%;
border-radius: 14rpx;
position: relative;
}
.select_box .select{
box-sizing: border-box;
width: 100%;
height: 100%;
border-radius: 8rpx;
display: flex;
align-items: center;
padding: 0 10rpx;
}
.select_box .select .select_text{
font-size: 26rpx;
color: #777777;
line-height: 28rpx;
flex: 1;
}
.select_box .select .select_img{
width: 30rpx;
height: 30rpx;
display: block;
transition:transform 0.3s;
}
.select_box .select .select_img_rotate{
transform:rotate(180deg);
}
.select_box .option_box{
position: absolute;
top: calc(100% - 1px);
width: 100%;
box-sizing: border-box;
height: 0;
overflow-y: auto;
background: #fff;
transition: height 0.3s;
border-left:1px solid #efefef;
border-right:1px solid #efefef;
}
.select_box .option_box .option{
display: block;
line-height: 30rpx;
font-size: 26rpx;
border-top: 1px solid #efefef;
border-bottom: 1px solid #efefef;
padding: 10rpx;
}
看一送一:
寫程序時候,很多地方會用到時間選項,送大家一個函數。獲取一天時間分割數組。["00:00","00:05","00:10"....] 參數minute ,設置隔幾分鐘分割。時間格式你們可以自己改。
arrayTime: function (minute) {
var array_t = [];
var n = 60 / minute;
for (var i = 0; i < 24; i++) {
for (var j = 0; j < n; j++) {
var _i=i<10?'0'+i:i;
var _j=(minute * j)<10?'0'+(minute * j):(minute * j);
array_t.push(_i + ':' + _j);
}
}
return array_t;
}