picker-view 和 picker-view-column 自定义可以切换的picker

news/2025/3/14 8:44:37

场景:对于小程序官方提供的picker基本能满足大多数需求,但如果涉及类似于在picker的弹出层上进行两种不同类型的picker切换,还是无法实现的。但官方最近新提供了picker-view ,可根据自己的使用场景来自定义自己的picker。

1.wxml

<!-- 楼层的picker -->
<view class='lcBtn flex flexC'><view class='lcBtn-style bg_white {{currentIndex==1?"on":""}}' data-num='1' bindtap='changeLc'>单层</view><view class='lcBtn-style bg_white {{currentIndex==2?"on":""}}' data-num='2' bindtap='changeLc'>跃层</view>
</view><!--   --><view class='pickerAll' wx:if="{{true}}"><view class='flex' wx:if="{{currentIndex==1}}"><!-- 第一列 --><!-- {{'['+value1[0]+']'}} --><picker-view indicator-style="height: 50px;" style="width: 50%; height: 300px;" value="{{value1[0]}}" data-kind="1" bindchange="bindChange"><picker-view-column><view wx:if="{{dcArr[0].length}}" wx:for='{{dcArr[0]}}' style="line-height: 50px">第 {{item}} 层</view></picker-view-column></picker-view><!-- 第二列 --><picker-view indicator-style="height: 50px;" style="width: 50%; height: 300px;" value="{{value1[1]}}" data-kind="2" bindchange="bindChange"><picker-view-column><view wx:if="{{dcArr[1].length}}" wx:for='{{dcArr[1]}}' style="line-height: 50px">共 {{item}} 层</view></picker-view-column></picker-view></view><view class='flex flexC' wx:if="{{currentIndex==2}}"><!-- 第二列 --><picker-view indicator-style="height: 50px;" style="width: 33%; height: 300px;" value="{{value1[2]}}" data-kind="3" bindchange="bindChange"><picker-view-column><view wx:if="{{dcArr[2].length}}" wx:for='{{dcArr[2]}}' style="line-height: 50px">第 {{item}} 层</view></picker-view-column></picker-view><!-- 第一列 --><picker-view indicator-style="height: 50px;" style="width: 33%; height: 300px;" value="{{value1[3]}}" data-kind="4" bindchange="bindChange"><picker-view-column><view wx:if="{{dcArr[3].length}}" wx:for='{{dcArr[3]}}' style="line-height: 50px">至 {{item}} 层</view></picker-view-column></picker-view><!-- 第二列 --><picker-view indicator-style="height: 50px;" style="width: 33%; height: 300px;" value="{{value1[4]}}" data-kind="5" bindchange="bindChange"><picker-view-column><view wx:if="{{dcArr[4].length}}" wx:for='{{dcArr[4]}}' style="line-height: 50px">共 {{item}} 层</view></picker-view-column></picker-view></view><view class='flex flexC pickerBtn'><view class='pickerBtn-style col_gray' bindtap='goBack'>取消</view><view class='pickerBtn-style col_orange' bindtap='goConfirm'>确认</view></view></view>

2.wxss


page{padding: 0 20rpx;box-sizing: border-box;
}.lcBtn-style{width: 200rpx;height: 50rpx;line-height: 50rpx;text-align: center;border: 1rpx solid orange;font-size: 26rpx;border-radius: 10rpx;margin-right: 10rpx;margin-top: 10rpx;
}.lcBtn-style.bg_orangge{background-color: orange;
}
.lcBtn-style.col_fff{color: #fff;
}.lcBtn-style.bg_white{background-color: white;
}.lcBtn-style.on{color: #fff;background-color: orange;
}picker-view-column{text-align: center;
}.pickerBtn{margin-top: 50rpx;
}.pickerBtn-style{font-size: 26rpx;height: 50rpx;line-height: 50rpx;width: 200rpx;text-align: center;border: 1rpx solid gray;margin-right: 30rpx;border-radius: 10rpx;}.pickerBtn-style.col_gray{color: gray;
}
.pickerBtn-style.col_orange{color: orange;
}.pickerAll{margin-top: 20rpx;
}.flex {display: -webkit-box;display: -moz-box;display: -ms-flexbox;display: -webkit-flex;display: flex;display: box;flex-wrap:wrap;
}.flexC {-webkit-box-pack: center;justify-content: center;-webkit-justify-content: center;-moz-justify-content: center;-ms-justify-content: center;-o-justify-content: center;
}

3.js

var app = getApp();
var that;
var source_arr;
Page({/*** 页面的初始数据*/data: {currentIndex: 1,// 单层dcArr: [[],[],[],[],[]],dcIndex: [[0],[0],[0],[0],[0]],value1: [[0],[0],[0],[0],[0],]},/*** 生命周期函数--监听页面加载*/onLoad: function (options) {that = this;// 数据生成that.sourceArray();},// 原始数组sourceArray() {var arr = []for (var i = -5; i < 50; i++) {if (i) {arr.push(i)}}source_arr = arr;var arr2 = source_arr.slice(0);arr2.pop()var arr3 = source_arr.slice(0);arr3.splice(0, 1);var arr4 = source_arr.slice(0);arr4.splice(0, 1);that.setData({'dcArr[0]': source_arr.slice(0),'dcArr[1]': source_arr.slice(0),'dcArr[2]': arr2,'dcArr[3]': arr3,'dcArr[4]': arr4,});},/*** 生命周期函数--监听页面显示*/onShow: function () {},// 监听,滑动到第几个bindChange(e) {var kind = e.currentTarget.dataset.kind;var value = e.detail.value;// 单层:第一列if (kind == 1) {var arr = source_arr.slice(0);arr.splice(0, value[0]);that.setData({'dcArr[1]': arr,'dcIndex[1]': [0],'value1[1]': [0],'dcIndex[0]': value});} else if (kind == 2) {// 单层:第二列that.setData({'dcIndex[1]': value});} else if (kind == 3) {var arr = source_arr.slice(0);arr.splice(0, (value[0] + 1));var arr_new1 = arr.slice(0);var arr_new2 = arr.slice(0);that.setData({'dcArr[3]': arr_new1,'dcArr[4]': arr_new2,'dcIndex[3]': [0],'dcIndex[4]': [0],'value1[3]': [0],'value1[4]': [0],'dcIndex[2]': value});} else if (kind == 4) {that.setData({'dcIndex[3]': value,});} else if (kind == 5) {that.setData({'dcIndex[4]': value});}},// 取消按钮goBack() {},// 确认按钮goConfirm() {// 点击确认时才储存在全局变量,否则不储存var dcArr = that.data.dcArr;var dcIndex = that.data.dcIndex;var currentIndex = that.data.currentIndex;// 在这里通过不同的下标,可取到,不同的tab下对应的当前项},// 楼层切换changeLc(e) {var num = e.currentTarget.dataset.num;if (num == 1) {that.setData({currentIndex: 1,});} else if (num == 2) {that.setData({currentIndex: 2,});}},
})

4.效果

5.说明

5.1 官方文档:https://developers.weixin.qq.com/miniprogram/dev/component/picker-view.html

5.2 给picker-view绑定 bindchange 事件,监听其变化,通过变量记录其值,当在两种状态切换时,分别记录,保存时看处于哪个tab下,再取值做相应的操作即可。

文章来源:https://blog.csdn.net/hangGe0111/article/details/96486732
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:https://dhexx.cn/news/show-742195.html

相关文章

hyperledger fabric部署总结

之前在有道云笔记上分享过&#xff0c;但想想还是搬到这里来吧&#xff0c;以后统一方便整理自己的知识进入正题.... 之前在调研 hyperledger fabric,其实部署说明官网都有&#xff0c;只是东西都是国外的照着操作也会遇到许多的坑&#xff0c;这里就提前给大家踩雷了&#xff…

小程序swiper制作分门别类的轮播

简单的轮播图在文档中可直接使用&#xff0c;但有写需求可能需要改动一下。例如&#xff0c;在轮播图底部放几个分类的按钮&#xff0c;点击各个按钮&#xff0c;分别跳转到该分类的第一张图&#xff0c;当轮播图在滚动的过程中&#xff0c;由分类1的最后一张图切换为分类2的最…

大漠折戟--记一次不顺利的灾备项目实施经历

本月初&#xff0c;受托前往大漠某供电局实施系统灾备。从烟台起飞&#xff0c;到呼和浩特中转&#xff0c;内蒙古范围内还要坐小飞机。等到目的地机场&#xff0c;是傍晚5点多&#xff0c;天黑了&#xff0c;这是小机场&#xff0c;偏僻&#xff0c;出租车都很少&#xff0c;用…

小程序页面分批次加载(模拟懒加载)

有些情况&#xff0c;例如在详情页&#xff0c;可能涉及的接口个数比较多&#xff0c;因为详情一般数据量比较庞大&#xff0c;如果部分开&#xff0c;一个接口请求&#xff0c;会导致请求时间比较长&#xff0c;用户体验会很差&#xff0c;所以此时就可把这个大接口分开&#…

在经历了6个月的学习后,我终于上架了自己的第一款APP---酷课堂iOS群问答精华整理(201807...

酷课堂iOS交流群 我们是一个什么样的组织&#xff1a;酷课堂iOS交流群&#xff0c;聚集了一群热爱技术、有趣、有料&#xff0c;平均Q龄在10年以上的“老司机”&#xff0c;他们遍布在全国/球各地&#xff0c;有知名企业iOS工程师、高校大学生、自由职业者……如果你也是这样的…

小程序 模拟今日头条导航栏,点击锚点跳转对应楼层

使用场景&#xff0c;顶部导航的个数不确定&#xff0c;会有超出屏幕的情况&#xff0c;在一行展示&#xff0c;每点击一个导航的tab会判断是否向左或者像右滚动一个距离&#xff0c;以使当前的点击的导航能看到。同时点击导航会锚点跳转对应楼层&#xff0c;当前导航会变为激活…

Linux--抓包-连接状态

目录 一、TCP&#xff1a; 1.抓包&#xff1a; 2.工具&#xff1a; 3.状态&#xff1a; 4.命令&#xff1a; 三次握手&#xff1a; 应答确认&#xff1a; 四次挥手 一、TCP&#xff1a; 面向连接、可靠的、流式服务 1.抓包&#xff1a; 三次握手、四次挥手 2.工具&…

1.0-并发编程-进程和线程简介

进程进程是资源&#xff08;CPU、内存等&#xff09;分配的基本单位&#xff0c;它是程序执行时的一个实例。程序运行时系统就会创建一个进程&#xff0c;并为它分配资源&#xff0c;然后把该进程放入进程就绪队列&#xff0c;进程调度器选中它的时候就会为它分配CPU时间&#…

小程序常用组件(video,map,wx.showToast,wx.showModal,button,打电话,text)

1.video&#xff08;官方地址&#xff1a;https://developers.weixin.qq.com/miniprogram/dev/component/video.html&#xff09; 1.1wxml <view class"mask"><view classmask-wrap><video classmask-video id"myVideo" autoplay{{true}}…

hadoop编译过程中遇到的错误

2019独角兽企业重金招聘Python工程师标准>>> 我用的环境&#xff08;错误跟环境没关系&#xff09;&#xff1a;centos6.4,hadoop2.6.4&#xff08;或者hadoop2.7.6或者hadoop2.6.5&#xff09; 【错误1】&#xff1a;mvn clean install -DskipTests中遇到&#xff…