首页/心系八方/正文
微信小程序自定义select下拉选项框的详细代码及操作步骤分享

 2025年08月27日  阅读 1

摘要:创建组件所需的文件在微信小程序中开发自定义下拉选项框组件时,首先需要创建组件所需的四个基本文件。这四个文件分别是组件的配置文件(.json)、模板文件(.wxml)、样式文件(.wxss)和逻辑文件(.js)。在项目目录中新建一个components文件夹,...

创建组件所需的文件

在微信小程序中开发自定义下拉选项框组件时,首先需要创建组件所需的四个基本文件。这四个文件分别是组件的配置文件(.json)、模板文件(.wxml)、样式文件(.wxss)和逻辑文件(.js)。在项目目录中新建一个components文件夹,然后在其中创建名为dropdown的文件夹,将四个文件放入其中。

配置组件.json文件

组件的.json配置文件是定义组件特性的重要文件。在这个文件中,需要将"component"字段设置为true,表示这是一个自定义组件。同时可以在"usingComponents"字段中声明需要使用的其他组件。配置示例如下:

{

"component": true,

"usingComponents": {}

}

自定义组件样式及功能实现

.wxml文件用于定义组件的结构布局,可以使用view、text等基础组件构建下拉框的界面。在.wxss文件中编写样式代码,设置下拉框的外观样式,如宽度、高度、颜色等。.js文件是实现组件逻辑的核心,需要定义properties接收外部传入的数据,在methods中编写展开/收起下拉框的方法,并通过triggerEvent触发自定义事件。

{
  "component": true,
  "usingComponents": {
    "select": "./select"
  }
}

引入组件并使用

在使用自定义下拉框组件的页面中,首先需要在页面的.json配置文件中声明组件引用:

{

"usingComponents": {

"dropdown": "/components/dropdown/dropdown"


    
        {{nowText}}
        
    
    
        {{item.text}}
    

}

}

然后在页面的.wxml文件中添加组件标签,并通过bind监听组件触发的事件:

.com-selectBox{
  width: 200px;
}
.com-sContent{
  border: 1px solid #e2e2e2;
  background: white;
  font-size: 16px;
  position: relative;
  height: 30px;
  line-height: 30px;
}
.com-sImg{
  position: absolute;
  right: 10px;
  top: 11px;
  width: 16px;
  height: 9px;
  transition: all .3s ease;
}
.com-sTxt{
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
  padding:0 20px 0 6px;
  font-size: 14px;
}
.com-sList{
  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;
}
.com-sItem{
  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;
}
.com-sItem:first-child{
  border-top: none;
}

options="{{options}}"

bind:select="handleSelect"

Component({
  /**
   * 组件的属性列表
   */
  properties: {
    propArray: {
      type: Array,
    }
  },
  /**
   * 组件的初始数据
   */
  data: {
    selectShow: false, //初始option不显示
    nowText: "请选择", //初始内容
    animationData: {} //右边箭头的动画
  },
  /**
   * 组件的方法列表
   */
  methods: {
    //option的显示与否
    selectToggle: function () {
      var nowShow = this.data.selectShow; //获取当前option显示的状态
      //创建动画
      var animation = wx.createAnimation({
        timingFunction: "ease"
      })
      this.animation = animation;
      if (nowShow) {
        animation.rotate(0).step();
        this.setData({
          animationData: animation.export()
        })
      } else {
        animation.rotate(180).step();
        this.setData({
          animationData: animation.export()
        })
      }
      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; //当前点击的内容
      //子组件触发事件
      var nowDate = {
        id: nowIdx,
        text: nowText
      }
      this.triggerEvent('myget', nowDate)
      //再次执行动画,注意这里一定,一定,一定是this.animation来使用动画
      this.animation.rotate(0).step();
      this.setData({
        selectShow: false,
        nowText: nowText,
        animationData: this.animation.export()
      })
    }
  }
})

/>

最后在页面的.js文件中定义options数据和handleSelect方法:

Page({

data: {

options: ['选项1', '选项2', '选项3']

{
  "usingComponents": {
    "Select": "../../components/select/select"
  },
  "navigationBarTitleText": ""
}

},

handleSelect(e) {

console.log('选中项:', e.detail)

})

注意事项与优化建议

在实际开发中需要注意组件样式的隔离问题,建议使用外部样式类或添加样式前缀。对于性能优化,可以在下拉框展开时使用wx.createSelectorQuery获取节点信息进行准确定位。同时要处理好组件与页面滚动时的交互问题,避免出现显示异常的情况。

以上就是微信小程序自定义下拉选项框组件的完整实现方法。通过这种组件化的开发方式,可以提高代码复用性,保持项目结构清晰。开发者可以根据实际需求对组件功能进行扩展,例如添加搜索过滤、多级联动等更复杂的功能。

版权声明:本文为 “博览广文网” 原创文章,转载请附上原文出处链接及本声明;

原文链接:http://wen.bjhwtx.com/post/35900.html

标签:

博览广文网

博览广文网为所有文学爱好者、新闻爱好者、关注生活多方面内容的观众朋友提供多方位的内容呈现、提升阅读空间、填充碎片时间,开阔读者的视野、增长见识、了解民生、一个让您不出户尽知天下事的网站平台!
热门标签
关于我们
广文舒阅网—让天下读者有家可归!这里汇聚了各类优质文化信息,无论是全球热点、历史故事,还是实用百科、趣味探索,您都能轻松获取。我们希望用阅读点亮您的世界,让每一次浏览都充满收获和乐趣。
导航栏A标题
广文舒阅网
扫码关注
联系方式
全国服务热线:0755-88186625
Q Q:8705332
Email:admin@lanyu.com
地址:深圳市福田区海雅缤纷国际大厦5层501
Copyright 深圳市蓝宇科技有限公司 版权所有 备案号:京ICP备20013102号-1