学堂 学堂 学堂公众号手机端

微信小程序下拉框用什么实现,方法是什么

lewis 1年前 (2024-04-01) 阅读数 4 #技术
这篇文章主要讲解了“微信小程序下拉框用什么实现,方法是什么”,文中的讲解内容简单、清晰、详细,对大家学习或是工作可能会有一定的帮助,希望大家阅读完这篇文章能有所收获。下面就请大家跟着小编的思路一起来学习一下吧。

小程序有时需要使用下拉框选项,通常我会使用 picker 组件实现。pick 组件使用 mode 来区分类别,默认使用普通选择器就行。

除了上述方式,我们也可以通过自定义组件实现,代码如下:


//index.js
Component({
 /**
 * 组件的属性列表
 */
 properties: {
  propArray: {
   type: Array,
  }
 },
 /**
 * 组件的初始数据
 */
 data: {
  selectShow: false,//初始option不显示
  selectText: "请选择",//初始内容
 },
 /**
 * 组件的方法列表
 */
 methods: {
  //option的显示与否
  selectToggle: function () {
   var nowShow = this.data.selectShow;//获取当前option显示的状态

   this.setData({
    selectShow: !nowShow
   })
  },
  //设置内容
  setText: function (e) {
   var nowData = this.properties.propArray;//当前option的数据是引入组件的页面传过来的,所以这里获取数据只有通过this.properties
   var nowIdx = e.target.dataset.index;//当前点击的索引
   var nowText = nowData[nowIdx].text || nowData[nowIdx].value || nowData[nowIdx];//当前点击的内容
   //再次执行动画,注意这里一定,一定,一定是this.animation来使用动画
   this.setData({
    selectShow: false,
    selectText: nowText,
   })
   this.triggerEvent('select', nowData[nowIdx])
  }
 }
})

代码如下:

<view class='ms-content-box'>
  <view class='ms-content' bindtap='selectToggle'>
    <view class='ms-text'>{{selectText}}</view>
    <view class="{{selectShow ? 'icon-up' : 'icon-down'}}"></view>
  </view>
  <view class='ms-options' wx:if="{{selectShow}}">
    <view wx:for="{{propArray}}" data-index="{{index}}" wx:key='index' class='ms-option' bindtap='setText'>{{item.text || item.value || item}}</view>
  </view>
</view>

样式实现:

/* components/single-dropdown-select/index.wxss */

.ms-content-box {
 width: 120px;
}
.ms-content {
 border: 1px solid #e2e2e2;
 background: white;
 font-size: 16px;
 position: relative;
 height: 30px;
 line-height: 30px;
}
.ms-text {
 overflow: hidden;
 text-overflow: ellipsis;
 white-space: nowrap;
 padding: 0 40px 0 6px;
 font-size: 14px;
}
.ms-options {
 background: white;
 width: inherit;
 position: absolute;
 border: 1px solid #e2e2e2;
 border-top: none;
 box-sizing: border-box;
 z-index: 3;
 max-height: 120px;
 overflow: auto;
}
.ms-option {
 height: 30px;
 line-height: 30px;
 border-top: 1px solid #e2e2e2;
 padding: 0 6px;
 text-align: left;
 overflow: hidden;
 text-overflow: ellipsis;
 white-space: nowrap;
 font-size: 14px;
}
.ms-item:first-child {
 border-top: none;
}
.icon-right, .icon-down, .icon-up {
 display: inline-block;
 padding-right: 13rpx;
 position: absolute;
 right: 20rpx;
 top: 10rpx;
}
.icon-right::after, .icon-down::after, .icon-up::after {
 content: "";
 display: inline-block;
 position: relative;
 bottom: 2rpx;
 margin-left: 10rpx;
 height: 10px;
 width: 10px;
 border: solid #bbb;
 border-width: 2px 2px 0 0;
}
.icon-right::after {
 -webkit-transform: rotate(45deg);
 transform: rotate(45deg);
}
.icon-down::after {
 bottom: 14rpx;
 -webkit-transform: rotate(135deg);
 transform: rotate(135deg);
}
.icon-up::after {
 bottom: 0rpx;
 -webkit-transform: rotate(-45deg);
 transform: rotate(-45deg);
}

如何使用呢?首先在引用组件的页面,引入组件:

{
 "usingComponents": {
  "single-dropdown-select": "/components/single-dropdown-select/index"
 }
}

在页面中,直接使用 引入的组件,代码如下:

<view>
  <single-dropdown-select prop-array='{{selectArray}}' bind:select='select' />
</view>

同时传入数据和监听子组件向父组件传递的 select 方法。

Page({
 data: {
  selectArray: [{
   "id": "10",
   "value": "会计类"
  }, {
   "id": "21",
   "text": "工程类"
  }, '技术类', {'value': '其他'}]
 },
 select: function(e) {
  console.log(e.detail)
 }
})

现在大家对于微信小程序下拉框用什么实现,方法是什么的内容应该都有一定的认识了吧,希望这篇能对大家有所帮助。最后,想要了解更多,欢迎关注博信,博信将为大家推送更多相关的文章。
版权声明

本文仅代表作者观点,不代表博信信息网立场。

热门