微信小程序组件 —— 树形下拉框

article/2025/10/8 8:41:50

因为项目需求,需要一个树形下拉选择框,参考了网上的树形结构整理出了这样一个效果图
在这里插入图片描述
下载地址:wx_treeSelect下载

其实主要还是参考了treeview的递归思想 微信小程序实现简单的树形图treeview 绘制出下拉框内的内容,在加个状态判断展开隐藏下拉框,方法回调显示选择值 其实思想还是很容易的 接下来直接上代码

1.首先新建树形菜单组件 —— mytree
在这里插入图片描述
(1) mytree.wxml


<view class="container"><view style="padding:5rpx 0;"><image wx:if='{{ isBranch }}' bindtap='toggle' src="{{ open ? '/image/show_less.png' : '/image/show_more.png'}}"  class='item-sImg'></image><image wx:else src='/image/page_turning_right.png'  class='item-sImg'></image><text bindtap='tapItem' data-itemid='{{ model.id }}' data-value='{{ model.text }}'>{{ model.text }}</text></view><view style='padding-left: 25rpx;' wx:if='{{ isBranch }}' hidden='{{ !open }}'><mytree wx:for='{{ model.nodes }}' wx:key='id' model='{{ item }}'></mytree></view>
</view>

(2) mytree.wxss


.container{font-size: 30rpx;color: #333;
}.item-sImg{width: 40rpx;height: 40rpx;vertical-align: middle;
}

(3) mytree.json


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

(4) mytree.js


Component({properties: {model: Object,},data: {open: true,isBranch: false,},methods: {toggle: function(e) {if (this.data.isBranch) {this.setData({open: !this.data.open,})}},tapItem: function(e) {var itemid = e.currentTarget.dataset.itemid;var value = e.currentTarget.dataset.value;this.triggerEvent('tapitem', { value: value,itemid: itemid }, { bubbles: true, composed: true });}},ready: function(e) {this.setData({isBranch: Boolean(this.data.model.nodes && this.data.model.nodes.length),});}
})

2.再创建下拉树形列表组件 —— treeSelect
(1) treeSelect.wxml


<view class='com-selectBox'><view class='com-sContent' bindtap='selectToggle'><view class='com-sTxt'>{{nowText}}</view><image src='/image/show_more.png'  class='com-sImg'></image></view><view class='com-sList' wx:if="{{selectShow}}"><view wx:if='{{ isBranch }}' hidden='{{ !open }}'><mytree wx:for='{{ model.nodes }}' wx:key='id' model='{{ item }}'  bind:tapitem='tapItem'></mytree></view></view>
</view>

(2) treeSelect.wxss


.com-selectBox{width: 500rpx;
}
.com-sContent{border: 2rpx solid #d3d3d3;background: white;border-radius: 5%;position: relative;padding: 5rpx 30rpx;line-height: 2;height: 60rpx;
}
.com-sImg{position: absolute;right: 0;top: 50%;width: 40rpx;height: 40rpx;transform: translate(-50%,-50%);
}
.com-sTxt{overflow: hidden;text-overflow: ellipsis;white-space: nowrap;
}
.com-sList{background: white;width: inherit;position: absolute;border: 1px solid #e2e2e2;border-top: none;box-sizing: border-box;z-index: 3;height: 200px;overflow: auto;padding: 15rpx;
}
.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;
}.item-sImg{width: 40rpx;height: 40rpx;vertical-align: middle;
}

(3) treeSelect.json


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

(4) treeSelect.js


Component({/*** 组件的属性列表*/properties: {model: Object},/*** 组件的初始数据*/data: {selectShow:false,nowText : "请选择",open: true,isBranch: false,},/*** 组件的方法列表*/methods: {selectToggle:function(){var nowShow=this.data.selectShow;this.setData({selectShow: !nowShow})},toggle: function(e) {if (this.data.isBranch) {this.setData({open: !this.data.open,})}},tapItem: function(e) {var itemid = e.detail.itemid;var value = e.detail.value;this.triggerEvent('tapitem', { value: value,itemid: itemid }, { bubbles: true, composed: true });this.setData({selectShow: false,nowText:value})}},ready: function(e) {this.setData({isBranch: Boolean(this.data.model.nodes && this.data.model.nodes.length)});}
})

3.最后就是创建一个页面测试一下啦 —— index
(1) index.wxml


<!--index.wxml-->
<view class="container"><treeSelect model='{{selectArray}}' bind:tapitem='tapItem'></treeSelect>
</view>

(2) index.wxss


.container{padding: 30rpx;
}

(3) index.json


{"navigationBarTitleText": "树形下拉框","usingComponents": {"treeSelect": "/components/treeSelect/treeSelect"}
}

(4) index.js

//index.js
//获取应用实例
const app = getApp()Page({data: {selectArray: {text: '', id: '',nodes: [{"id": 5,"text": "沈阳市","nodes": []}, {"id": 6,"text": "本溪市","nodes": [{"id": 7,"text": "本溪石街","nodes": []}, {"id": 8,"text": "本溪梨树","nodes": []}, {"id": 9,"text": "辽宁本溪","nodes": []}, {"id": 10,"text": "本溪平山","nodes": []}, {"id": 11,"text": "本溪明山","nodes": []}]}, {"id": 12,"text": "盘锦市","nodes": [{"id": 13,"text": "盘锦辽东湾","nodes": []}]}, {"id": 14,"text": "辽阳市","nodes": [{"id": 15,"text": "辽阳灯塔","nodes": []}]}, {"id": 16,"text": "铁岭市","nodes": [{"id": 17,"text": "铁岭银州","nodes": []}]}, {"id": 18,"text": "鞍山市","nodes": [{"id": 19,"text": "鞍山千山","nodes": []}]}]}},tapItem: function (e) {var itemid = e.detail.itemid;var itemval = e.detail.value;console.log("所选中的分区编号:" + itemid + ", 名称:" + itemval);}
})

index.js中有相应的数据格式,因为项目需要我只用了两级,其实可以很多级,有需要的小伙伴可以自己测试一下。因为另外的需要我要准备在封装个树形数据表格了(꒦_꒦) 所以关于备注还有详细的介绍以后有时间再慢慢补吧。时间紧张具体的细节还没有仔细确认,如果有问题欢迎给我留言啊~

注:本人工作两年的菜鸟前端,代码还是过于稚嫩,出来的效果自己也不是那么满意,如果大家有更好的组件欢迎推荐给我(╹▽╹) 大家一起加油啊! ヾ(◍°∇°◍)ノ゙


http://chatgpt.dhexx.cn/article/LsRf4ACm.shtml

相关文章

微信小程序 一个简单的select下拉框

微信小程序 一个简单的select下拉框 用的是transform过渡&#xff0c;没用动画 看看效果 废话不多说&#xff0c;直接上代码 wxml: <view class"item"><label class"first"><text>*</text>公司/商户类型&#xff1a;</labe…

微信小程序下拉选项框

效果图 test.js /*** 页面的初始数据*/data: {shows: false, //控制下拉列表的显示隐藏&#xff0c;false隐藏、true显示selectDatas: [消费账户, 平台返利账户, 微信钱包], //下拉列表的数据indexs: 0, //选择的下拉列 表下标,},// 点击下拉显示框selectTaps() {this.setDa…

微信小程序select下拉框实现。

小程序中是没有h5中的下拉 标签的 所以要实现下拉功能就必须自己动手写拉 这里为了更清楚的显示层级 就把源码直接复制过来了 <view classlist-msg><view classlist-msg1><text>商品金额</text><text>&#xffe5;99.00</text></view&…

微信小程序之select下拉框

wxml&#xff1a; <view class"classify-kuangjia"><view class"classify-kuangjia2"><view>商品分类:</view><!-- 下拉框 --><view classclassify bindtapbindShowMsg><text>{{grade_name}}</text><…

微信小程序原生的下拉框组件

前言 近日开发微信小程序时&#xff0c;需要一个下拉框的组件&#xff0c;使用和PC端下拉框一样的方式会显得很丑&#xff0c;于是发现微信官方API有个wx.showActionSheet&#xff0c;但是有诸多限制&#xff0c;例如&#xff1a;最大长度只能是6项&#xff0c;多选等等。 由…

微信小程序实现下拉菜单效果

问题 下拉菜单在各类网页&#xff0c;app或者小程序中都是比较常见的输入控件。下拉菜单的下拉选项的多少可以根据自身需求进行调节&#xff0c;常运用于时间范围选择&#xff0c;地点区域选择&#xff0c;价格区间选择&#xff0c;等等。提供下拉菜单的目的是帮助用户更快更准…

使用微信小程序做一个简易的下拉框,无动画效果,纯原生写法(下拉列表框)

最近在开发的时候&#xff0c;需要使用下拉的效果&#xff0c;但是之前并没有进行书写过&#xff0c;今天做一个简单的demo&#xff0c;来记录一下微信小程序开发的下拉框效果。 微信小程序和jquery最大的区别就是是否操作dom&#xff0c; 微信小程序无需操作dom&#xff0c;可…

微信小程序下拉选择

微信小程序中下拉框选择一般的交互方式有以下两种 直接下拉选择点击选择框后&#xff0c;弹出浮层进行选择 下边分别介绍两种方式的实现。在微信小程序中&#xff0c;这两种实现都需要修改三个文件 js 文件&#xff1a;下拉选择逻辑的具体实现 wxml 文件&#xff1a;下拉组件…

小程序——下拉选择框组件

一、效果 二、说明 最近在开发微信小程序&#xff0c;但是用的lin-ui和vant 都没有下拉选择框组件。在网上搜索一番后&#xff0c;发现了一个挺简单且很好用的下拉框组件。 链接在这里&#xff1a;https://blog.csdn.net/WeiflR10/article/details/121494131 原文中是直接写入…

微信小程序实现下拉框功能

微信小程序里没有和HTML里的下拉框一样的组件&#xff0c;想要相同的效果只能自己写一个&#xff0c;先看效果 下面来看一下代码&#xff1a; 首先WXML <view classselect_box><view classselect catchtapselectTap><text classselect_text>{{selectData[i…

小程序登录详解

小程序登录简单分为以下几步&#xff1a; 使用wx.login获取code值获取code值后再加 AppID appsecret code 传给后端后端调接口 拿到 seesion_key openid 返回 token前端存储token 小程序登录的三个角色 小程序 用户使用客户端 由于小程序运行在微信之上 因此小程序可以通过…

一个好看的小程序登录页面

文章目录 前言一、效果图二、实现代码 前言 写一个挺好看的小程序页面&#xff0c;发出来记录一下 一、效果图 登录页面&#xff1a; 注册页面&#xff1a; 通过点击注册和登录按钮切换两个页面淡入淡出效果 二、实现代码 wxml: <!--pages/login/login.wxml--> &…

微信小程序的简单登录

这种在前台直接获取openid的方式已经不可以用了&#xff0c;各位想了解新的登录请去http://blog.csdn.net/m0_37992327/article/details/73469087&#xff0c;不过下面的一些东西还是对大家有帮助的&#xff0c;有兴趣的可以看一下&#xff0c;尤其是ssl证书的申请方式。 最近…

微信小程序登录界面

软件安装 这个就不讲了&#xff0c;没安装的可以自行百度安装一下 创建小程序 点击确认后创建完成&#xff0c;然后 创建登录页 然后点击app.json&#xff0c;将pages中的路径改掉 将pages中的路径修改之后&#xff0c;直接保存&#xff0c;会自动生成login文件夹及下边的文件…

微信小程序实现简单登录界面和登录功能

微信小程序实现简单登录界面和登录功能 问题背景 客户端开发和学习过程中&#xff0c;登录功能是一个很常见的场景。本文将介绍&#xff0c;微信小程序开发过程中是如何实现登录界面和登录功能的。 问题分析 话不多说&#xff0c;直接上代码。 (1)index.js文件&#xff0c;代码…

小程序简单的登录界面

造轮子系列复制粘贴&#xff0c;不多说 <view class""><view class"logo h400 flex jc-ai-center"><image src"../../assets/images/yh.png"></image></view><view class"ipt-wrap"><view cla…

微信小程序登录

前段时间发布了一个微信小程序的简单登录&#xff0c;那段时间我一直在忙着项目&#xff0c;有一天&#xff0c;我清闲下来准备进入小程序群里面看一下来着&#xff0c;刚好有人问问题了&#xff0c;我一看这哥们的问题好像是我写的东西啊&#xff0c;我感觉是时候秀一波了&…

小程序微信小程序设计登录页面

Page({data: {phone: ,password: ,success: false,text: },// 获取输入账号 phoneInput: function (e) {this.setData({phone: e.detail.value})},// 获取输入密码 passwordInput: function (e) {this.setData({password: e.detail.value})},// 登录 login: function () {var t…

微信小程序登录页面的实现

微信小程序登录页面 实现在进入微信小程序首页前的登录验证页面&#xff0c;这里有两种方法&#xff0c;但其实原理都是一样的。 1. 在首页中加入一个弹窗作为登录窗口&#xff0c;效果如下图&#xff1a; (1)index.wxml 登录窗口代码如下&#xff1a; <view class"…

微信小程序实战(一)---实现登录界面

昨天小程序第一天公测&#xff0c;就下载个小程序自带IDE玩了玩&#xff0c;看了看API&#xff0c;撸出了个登录界面给大家分享下。 下面是主界面和代码。 index.wxml <view class"container"><view class"usermotto"><text class"us…