当前位置: 首页 > news >正文

uniapp手写滚动选择器

在这里插入图片描述

文章目录

      • 效果展示
      • HTML/Template部分:
      • JavaScript部分:
      • CSS部分:
      • 完整代码


没有符合项目要求的选择器 就手写了一个

效果展示

在这里插入图片描述

实现一个时间选择器的功能,可以选择小时和分钟:

HTML/Template部分:

<picker-viewclass="sleepPage-time-picker":indicator-style="indicatorStyle":value="timeValue"@change="handleTimeChange"
><!-- 第一列:小时选择 --><picker-view-column><viewv-for="(hour, index) in hours":key="index":class="['sleepPage-time-picker_item',{ selected: timeValue[0] === index },]">{{ hour }}<spanclass="sleepPage-time-picker_item-span"v-if="timeValue[0] === index"></span></view></picker-view-column><!-- 第二列:分钟选择 --><picker-view-column><viewv-for="(minute, index) in minutes":key="index":class="['sleepPage-time-picker_item',{ selected: timeValue[1] === index },]">{{ minute }}<spanclass="sleepPage-time-picker_item-span"v-if="timeValue[1] === index"></span></view></picker-view-column>
</picker-view>
  • <picker-view> 是一个小程序中的组件,用于实现滚动选择器效果。
  • :indicator-style:value 是组件的属性绑定,分别用来设置选择器的样式和当前选择的值。
  • @change 是一个事件监听器,当选择器的值发生改变时会触发 handleTimeChange 方法。

JavaScript部分:

data() {return {timeValue: [0, 0],  // 默认选中的时间值,[小时索引, 分钟索引]indicatorStyle: "height: 30px;background: rgba(237, 252, 249, 1);z-index: 0;",hours: [...Array(24).keys()].map((n) => n.toString().padStart(2, "0")),  // 生成小时选项数组minutes: [...Array(60).keys()].map((n) => n.toString().padStart(2, "0")),  // 生成分钟选项数组};
},
methods: {handleTimeChange(e) {this.timeValue = e.detail.value;  // 更新选择的时间值// 处理选择后的逻辑,例如更新界面显示的时间console.log("Selected Time:",this.hours[this.timeValue[0]],":",this.minutes[this.timeValue[1]]);},
}
  • data() 中定义了组件的数据状态,包括 timeValue 表示当前选择的小时和分钟的索引,hoursminutes 分别是小时和分钟的选项数组。
  • handleTimeChange(e) 方法是一个事件处理器,用来响应选择器数值改变事件。它更新 timeValue 并可以执行相应的逻辑,例如打印或更新界面上显示的选择结果。

CSS部分:

.sleepPage-time-picker-box {display: flex;margin-bottom: 10px;
}
.sleepPage-time-picker {height: 90px;  /* 设置选择器的高度 */width: 50%;  /* 设置选择器的宽度 */margin: 2px;
}
.selected {color: rgba(40, 184, 129, 1);  /* 设置选中项的文字颜色 */
}
.sleepPage-time-picker_item {text-align: center;height: 30px;line-height: 30px;position: relative;
}
.sleepPage-time-picker_item-span {padding-left: 10px;position: absolute;right: 15px;
}
  • CSS 部分定义了选择器和其子元素的样式,包括选择器的整体布局和每个选项的样式,以及选中项的特殊样式。

完整代码

     <picker-viewclass="sleepPage-time-picker":indicator-style="indicatorStyle":value="timeValue"@change="handleTimeChange"><picker-view-column><viewv-for="(hour, index) in hours":key="index":class="['sleepPage-time-picker_item',{ selected: timeValue[0] === index },]">{{ hour }}<spanclass="sleepPage-time-picker_item-span"v-if="timeValue[0] === index"></span></view></picker-view-column><picker-view-column><viewv-for="(minute, index) in minutes":key="index":class="['sleepPage-time-picker_item',{ selected: timeValue[1] === index },]">{{ minute }}<spanclass="sleepPage-time-picker_item-span"v-if="timeValue[1] === index"></span></view></picker-view-column></picker-view>timeValue: [0, 0],indicatorStyle:"height: 30px;background: rgba(237, 252, 249, 1);z-index: 0;",hours: [...Array(24).keys()].map((n) => n.toString().padStart(2, "0")),minutes: [...Array(60).keys()].map((n) => n.toString().padStart(2, "0")),handleTimeChange(e) {this.timeValue = e.detail.value;// 这里可以处理时间选择后的逻辑,例如更新界面显示的时间console.log("Selected Time:",this.hours[this.timeValue[0]],":",this.minutes[this.timeValue[1]]);},.sleepPage-time-picker-box {display: flex;margin-bottom: 10px;.sleepPage-time-picker {// height: 300px;height: 90px;width: 50%;margin: 2px;}.selected {color: rgba(40, 184, 129, 1);}.sleepPage-time-picker_item {text-align: center;height: 30px;line-height: 30px;position: relative;}.sleepPage-time-picker_item-span {padding-left: 10px;position: absolute;right: 15px;}}

您好,我是肥晨。
欢迎关注我获取前端学习资源,日常分享技术变革,生存法则;行业内幕,洞察先机。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 开机WiFi没了只能宽带,连声音都有问题,服务里系统还原等一堆错误无法调试!——DHCP服务器常见的故障影响这么大?
  • Go 语言中如何使用指针
  • ABAP+json格式数据转换时参数为空没传值
  • Python 3.12新功能(1)
  • 【北京迅为】《i.MX8MM嵌入式Linux开发指南》-第四篇 嵌入式Linux系统移植篇-第七十三章内核添加网卡驱动
  • 布隆过滤器
  • 组蛋白乳酸化和RNA甲基化如何联动?请大数据把这个思路推给科研人
  • 五粮液提价获渠道积极反馈:增强信心、促进动销、利好产业
  • 医疗器械产品没有互联网连接,就不适用于网络安全要求吗?
  • Llama 3.1:Meta 的开源 AI 巨兽,智能新高度
  • Java中常用的配置类:最佳实践与示例
  • [C++] 容器适配器:深入理解Stack与Queue的底层原理
  • 使用 Elasticsearch 和 LlamaIndex 保护 RAG 中的敏感信息和 PII 信息
  • vue 双向绑定原理
  • 【文件解析漏洞】实战详解!
  • 【RocksDB】TransactionDB源码分析
  • ABAP的include关键字,Java的import, C的include和C4C ABSL 的import比较
  • docker-consul
  • JavaScript 是如何工作的:WebRTC 和对等网络的机制!
  • js继承的实现方法
  • MD5加密原理解析及OC版原理实现
  • NSTimer学习笔记
  • Python学习笔记 字符串拼接
  • session共享问题解决方案
  • Vue源码解析(二)Vue的双向绑定讲解及实现
  • WePY 在小程序性能调优上做出的探究
  • 前端临床手札——文件上传
  • 问题之ssh中Host key verification failed的解决
  • 移动端解决方案学习记录
  • 用Canvas画一棵二叉树
  • 从如何停掉 Promise 链说起
  • 继 XDL 之后,阿里妈妈开源大规模分布式图表征学习框架 Euler ...
  • ​LeetCode解法汇总2696. 删除子串后的字符串最小长度
  • #{}和${}的区别是什么 -- java面试
  • #includecmath
  • (1)(1.13) SiK无线电高级配置(五)
  • (152)时序收敛--->(02)时序收敛二
  • (16)UiBot:智能化软件机器人(以头歌抓取课程数据为例)
  • (C++17) std算法之执行策略 execution
  • (vue)el-tabs选中最后一项后更新数据后无法展开
  • (阿里巴巴 dubbo,有数据库,可执行 )dubbo zookeeper spring demo
  • (待修改)PyG安装步骤
  • (二开)Flink 修改源码拓展 SQL 语法
  • (免费领源码)python#django#mysql校园校园宿舍管理系统84831-计算机毕业设计项目选题推荐
  • (实测可用)(3)Git的使用——RT Thread Stdio添加的软件包,github与gitee冲突造成无法上传文件到gitee
  • (四)库存超卖案例实战——优化redis分布式锁
  • (限时免费)震惊!流落人间的haproxy宝典被找到了!一切玄妙尽在此处!
  • ******之网络***——物理***
  • .net core使用EPPlus设置Excel的页眉和页脚
  • .NET Framework 3.5中序列化成JSON数据及JSON数据的反序列化,以及jQuery的调用JSON
  • .NET Windows:删除文件夹后立即判断,有可能依然存在
  • .net 提取注释生成API文档 帮助文档
  • .NetCore部署微服务(二)
  • .Net程序猿乐Android发展---(10)框架布局FrameLayout
  • .so文件(linux系统)