微信小程序之自定义下拉列表

在achun完成某个小程序作业的途中需要用到一个类似android spiner下拉列表的组件,发现在小程序文档里并木有,so百度了看到一个比较好的,调用超简单

效果图

代码如下

在wxml添加

<view class='top'>
  <view class='top-text'> 选择班别</view>
  <!-- 下拉框 -->
  <view class='top-selected' bindtap='bindShowMsg'>
    <text>{{grade_name}}</text>
  </view>
  <!-- 下拉需要显示的列表 -->
  <view class="select_box" wx:if="{{select}}">
    <view wx:for="{{grades}}" wx:key="unique">
      <view class="select_one" bindtap="mySelect" data-name="{{item}}">{{item}}</view>
    </view>
  </view>
</view>

在wxss添加

/* 顶部 */

.top {
  width: 100vw;
  height: 80rpx;
  padding: 0 20rpx;
  line-height: 80rpx;
  font-size: 34rpx;
  border-bottom: 1px solid #000;
}

.top-text {
  float: left;
}

/* 下拉框 */

.top-selected {
  width: 50%;
  display: flex;
  float: right;
  align-items: center;
  justify-content: space-between;
  border: 1px solid #ccc;
  padding: 0 10rpx;
  font-size: 30rpx;
}

/* 下拉内容 */

.select_box {
  background-color: #fff;
  padding: 0 20rpx;
  width: 50%;
  float: right;
  position: relative;
  right: 0;
  z-index: 1;
  overflow: hidden;
  text-align: left;
  animation: myfirst 0.5s;
  font-size: 30rpx;
}

.select_one {
  padding-left: 20rpx;
  width: 100%;
  height: 60rpx;
  position: relative;
  line-height: 60rpx;
  border-bottom: 1px solid #ccc;
}

/* 下拉过度效果 */

@keyframes myfirst {
  from {
    height: 0rpx;
  }

  to {
    height: 210rpx;
  }
}

/* 下拉图标 */

.top-selected image {
  height: 50rpx;
  width: 50rpx;
  position: absolute;
  right: 0rpx;
  top: 20rpx;
}

js页添加

Page({
data: {
    select: false,
    grade_name: '--请选择--',
    grades: ['1班', '2班', '3班', ]
  },
  bindShowMsg() {
    this.setData({
      select: !this.data.select
    })
  },
  mySelect(e) {
    console.log(e)
    var name = e.currentTarget.dataset.name
    this.setData({
      grade_name: name,
      select: false
    })
  }
)}

使用指南

1.可以在onload方法里将你的数组数据setdata给grades数组,这样打开就是加载你的数组了
2.在mySelect接收点击的项,并调用所携带的数据