vue3 setup+Taro3 调用原生小程序自定义年月日时分多列选择器,NutUI改造
vue3 setup+Taro3 调用原生小程序自定义年月日时分多列选择器,NutUI改造
NutUI 有日期时间选择器,但是滑动效果太差,卡顿明显。换成 原生小程序 很顺畅

上代码:
<template><view><pickermode="multiSelector"@change="confirmPicker"@columnChange="scrollColumnChange":value="columnVal":range="multiArray"><nut-celltitle="选择时间":desc="showVal"@click="copyColumnVal = columnVal"></nut-cell><!-- <view @click="copyColumnVal = columnVal">当前选择:{{ showVal }}</view> --></picker></view>
</template><script setup>
import { ref, onMounted, watch } from "vue";
const multiArray = ref(undefined); // 列可选列表
const columnVal = ref(undefined); // 列当前选中值
const copyColumnVal = ref(undefined); // 记录滚动中数据
const showVal = ref(undefined); // 显示:后年月日时分// 个位数时 补0
const add0 = (num) => String(num > 9 ? num : "0" + num);// 判断平年闰年
const resYearType = (year) =>(year % 4 == 0) & (year % 100 != 0) || year % 400 == 0;// 获取当前时间
const getNowT = (timeInfo) => {// timeInfo 为 年月日字符串 或者 时间戳var nowT = new Date(timeInfo);return {year: nowT.getFullYear(),month: nowT.getMonth() + 1,day: nowT.getDate(),hour: nowT.getHours(),minute: nowT.getMinutes(),second: nowT.getSeconds(),};
};// 设置当前时间 - columnVal:每列索引数组集合
function setNowTime(timeStr) {const timeObj = getNowT(timeStr); // timeObj 为: { year, month, day... }const { year, month, day, hour, minute } = timeObj;// 获取滚动列表数据const [years,months,days,hours,minutes,] = multiArray.value;const yearsIdx = years.findIndex((item) => item == year);const monthsIdx = months.findIndex((item) => item == month);const daysIdx = days.findIndex((item) => item == day);const hoursIdx = hours.findIndex((item) => item == hour);const minutesIdx = minutes.findIndex((item) => item == minute);columnVal.value = [yearsIdx, monthsIdx, daysIdx, hoursIdx, minutesIdx];showVal.value = `${year}/${add0(month)}/${add0(day)} ${add0(hour)}:${add0(minute)}`;// 根据当前时间,初始化可选择日期时间setDaysList(columnVal.value)
}// 初始化时间
function initColumn(daysNum = 31) {// 年const yearStart = 2000; // 年 - 开始时间const yearLength = 100; // 年 - 列表长度const years = Array.from({ length: yearLength }).map((i, idx) =>add0((idx += yearStart)));// 月const months = Array.from({ length: 12 }).map((i, idx) => add0((idx += 1)));// 日const days = Array.from({ length: daysNum }).map((i, idx) =>add0((idx += 1)));// 时const hours = Array.from({ length: 24 }).map((i, idx) => add0((idx += 0)));// 分const minutes = Array.from({ length: 60 }).map((i, idx) => add0((idx += 0)));multiArray.value = [years,months,days,hours,minutes,];
}// 滚动设置可选天数 28 - 29 - 30 - 31
function setDays(daysNum = 31) {multiArray.value[2] = Array.from({ length: daysNum }).map((i, idx) =>add0((idx += 1)));// 深拷贝下,否则不动态修改列multiArray.value = JSON.parse(JSON.stringify(multiArray.value));
}// 修改每月的天数
function setDaysList(columnArr) {const [yearsIdx, monthsIdx] = columnArr;const [years] = multiArray.value;// 当选择2月if (monthsIdx == 1) {// 如果闰年if (resYearType(years[yearsIdx])) {setDays(29);} else {setDays(28);}} else if ([1, 3, 5, 7, 8, 10, 12].includes(monthsIdx + 1)) {// 当选择1, 3, 5, 7, 8, 10, 12月setDays(31);} else {setDays(30);}
}// 确认选中结果
function confirmPicker(e) {columnVal.value = e.detail.value;const [yearsIdx, monthsIdx, daysIdx, hoursIdx, minutesIdx] = e.detail.value;const [years, months, days, hours, minutes] = multiArray.value;showVal.value = `${years[yearsIdx]}/${months[monthsIdx]}/${days[daysIdx]} ${hours[hoursIdx]}:${minutes[minutesIdx]}`;
}// 滚动事件(未点击确定)
function scrollColumnChange(e) {const { column, value } = e.detail;copyColumnVal.value[column] = value;setDaysList(copyColumnVal.value);console.log("修改的列为", column, ",值为", value);
}// 初始化
onMounted(() => {initColumn();// 回显时间setNowTime(new Date().getTime());
});// 监听传递日期
const props = defineProps({propsTime: {type: String,default: ''}
})
watch(props.propsTime, (newValue, oldValue) => {console.log('值发生了变更', newValue, oldValue);// 回显时间setNowTime(newValue);
});</script>
若需要自定义年开始时间,见 initColumn 方法

如作为组件,通过父级传递,可使用:

相关文章:
vue3 setup+Taro3 调用原生小程序自定义年月日时分多列选择器,NutUI改造
vue3 setupTaro3 调用原生小程序自定义年月日时分多列选择器,NutUI改造 NutUI 有日期时间选择器,但是滑动效果太差,卡顿明显。换成 原生小程序 很顺畅 上代码: <template><view><pickermode"multiSelector&…...
git命令使用
君子拙于不知己,而信于知己。——司马迁 清屏:clear 查看当前面板的路径:pwd 查看当前面板的文件:ls 创建文件夹:mkdir 文件夹名 创建文件:touch 文件名 删除文件夹:rm -rf 文件夹名 删除文件:r…...
每日记--前端解决方案--el-select下拉样式-el-option内容过长-鼠标悬停到文字不修改光标样式-设置透明
文章目录 el-select下拉样式el-select中el-option内容过长解决办法鼠标悬停到文字不修改光标样式设置透明 el-select下拉样式 element-ui自带样式设置popper-class el-select中el-option内容过长解决办法 问题:像这样选项太长了,不好看 解决…...
Windows系统Git安装教程(详细Git安装过程)
获取Git安装程序 到Git官网下载,网站地址:https://git-scm.com/downloads,如下图: 因为我们是用Windows系统上的浏览器访问的,Git官网自动之别到了我使用的操作系统,所以右侧直接显示下载使用Windows系统的…...
前后端分离------后端创建笔记(11)用户删除
B站视频:30-用户删除&结束语_哔哩哔哩_bilibili 1、现在我们要做一个删除的功能 1.1 首先做一个删除的功能接口,第一步先来到后端,做一个删除的接口 2、删除我们用Delete请求 3、方法名我给他改一下 3.1这里给他调一下删除方法…...
24、springboot的自动配置01--类条件注解@ConditionalOnClass、bean条件注解@ConditionalOnBean
springboot的自动配置 ★ 自动配置 Spring Boot的自动配置通常可根据依赖库自动触发——当Spring Boot检测到项目中包含某些框架的JAR包时,Spring Boot就会触发自动配置。其实通过EnableAutoConfiguration注解来启动▲ 其实你用到SpringBootApplication࿰…...
婚恋交友h5多端小程序开源版开发
婚恋交友h5多端小程序开源版开发 以下是婚恋交友H5多端小程序的功能列表: 用户注册和登录:用户可以通过手机号码或第三方账号注册和登录。个人信息填写:用户可以填写个人基本信息,包括姓名、性别、年龄、身高、体重、学历、职业等…...
uniapp案例30余种实战项目
uniapp案例30余种实战项目 mpvue框架仿滴滴出行didi-masteruni-app自定义导航栏title-customvue-mpvue-ChatRobot聊天机器人vue-mpvue-ChatRobot-master一款播课类小程序, 基于 mpvue 构建mp-podcast-mpvue-mastermpVue高仿美团小程序教程mpvue-meituan-masteruni-app 二维码生…...
回归预测 | MATLAB实现GRNN广义回归神经网络多输入多输出预测
回归预测 | MATLAB实现GRNN广义回归神经网络多输入多输出预测 目录 回归预测 | MATLAB实现GRNN广义回归神经网络多输入多输出预测预测效果基本介绍程序设计往期精彩参考资料 预测效果 基本介绍 MATLAB实现GRNN广义回归神经网络多输入多输出预测,输入10个特征&#x…...
从零开始学习VBA(一)
前置配置设置 首先配置开发设置(不同版本的配置方法会有差异,可根据自己使用的EXCEL版本到网络上找对应的方法,比如直接搜索Excel2010 开发工具) 以下为excel2016配置方法: 操作路径:文件-选项-自定义功…...
Kotlin Executors线程池newSingleThreadExecutor单线程
Kotlin Executors线程池newSingleThreadExecutor单线程 import java.util.concurrent.Executorsfun main() {val mExecutorService Executors.newSingleThreadExecutor()for (i in 1..5) {mExecutorService.execute {println("seq-$i tid:${Thread.currentThread().threa…...
ZooKeeper介绍
ZooKeeper是一个开放源代码的分布式协调服务。ZooKeeper的设计目标是将那些复杂且容易出错的分布式一致性服务封装起来,构成一个高效可靠的原语集,并以一系列简单易用的接口提供给用户使用。 ZooKeeper是一个典型的分布式数据一致性的解决方案࿰…...
首起针对国内金融企业的开源组件投毒攻击事件
简述 2023年8月9日,墨菲监控到用户名为 snugglejack_org (邮件地址:SnuggleBearrxxhotmail.com)的用户发布到 NPM 仓库中的 ws-paso-jssdk 组件包具有发向 https://ql.rustdesk[.]net 的可疑流量,经过确认该组件包携带远控脚本&a…...
源于传承,擎领未来,新架构、新工艺下的“换心工程”——金融电子化访中电金信副总经理、研究院院长况文川
当前,商业银行的经营环境正在发生着深刻而复杂的变化,在深化改革主旋律的指引下,数字化转型已成为我国商业银行普遍认同、广泛采用的战略性举措。核心系统作为承载银行业务的关键支柱系统,一直是各银行在金融科技建设中重点关注和…...
pytest数据驱动(最简单)
目录 第一种:通过yaml文件获取数据(一维列表) 第二种:通过yaml文件获取数据(二维列表) 第三种:通过yaml文件获取数据(pytest.fixture) 资料获取方法 第一种ÿ…...
分布式 - 服务器Nginx:一小时入门系列之代理缓冲与缓存
官方文档:https://nginx.org/en/docs/http/ngx_http_proxy_module.html 1. 代理缓冲 proxy_buffer 代理缓冲用于临时存储从后端服务器返回的响应数据。通过使用代理缓冲,Nginx可以在接收完整的响应后再将其发送给客户端,从而提高性能和效率…...
什么是集成学习算法
目录 什么是集成学习算法 集成学习发展史 集成学习组织方式 1) 并联组织关系...
springboot多模块打包方式
明确子父模块结构 父目录是带modules 大致结构如下: <modules><module>ruoyi-admin</module><module>ruoyi-framework</module><module>ruoyi-system</module><module>ruoyi-quartz</module><module>…...
【爬虫】Urllib让我们的 python 假装是浏览器
在 Python 这个内置的 Urllib 库中,有这么 4 个模块: request,request模块是我们用的比较多的,就是用它来发起请求,所以我们重点说说这个模块。error,error模块呢,就是当我们在使用 request 模…...
java基础面试
java深拷贝和浅拷贝的区别 深拷贝和浅拷贝最根本的区别在于是否真正获取一个对象的复制实体,而不是引用。 假设B复制了A,修改A的时候,看B是否发生变化: 如果B跟着也变了,说明是浅拷贝,拿人手短ÿ…...
IO、NIO、Netty实战
目标 客户端和服务端互相通信,本文主要是实战练习,照着敲,然后debug看为什么就行 前置理解模型核心类特点简述BIOServerSocket / Socket一个连接一个线程,accept() 和 read() 都会阻塞简单但连接多了线程爆炸NIOSelector / Server…...
交互形态的深层迭代:从文本到具象化表达
行业在探索智能交互形态时,会发现一个共性现象:不少智能体的逻辑与生成能力已经成熟,但对外交互始终局限在文本对话框。 过去一年,行业主流做法高度趋同:大模型对接知识库、工具调用、流程编排,最终收敛为文…...
CANN 显存优化深度解析:梯度累积、混合精度与显存回收实战
CANN 显存优化深度解析:梯度累积、混合精度与显存回收实战显存不够跑不了大模型?这篇讲清楚昇腾上的显存优化技术,从原理到实践。显存问题诊断流程 OOM 报错 → 检查模型大小 → 分析梯度占用 → 定位瓶颈 → 选择优化方案显存问题是大模型训…...
ESP32连接阿里云物联网平台实战:从设备创建到APP控制,一个教程全搞定(避坑指南)
ESP32连接阿里云物联网平台实战:从设备创建到APP控制全流程解析 在智能硬件产品开发中,物联网平台的选择与集成往往是决定项目成败的关键环节。阿里云物联网平台凭借其稳定的服务、丰富的功能生态和本土化优势,已成为国内物联网开发者的首选。…...
华硕笔记本性能控制新选择:G-Helper轻量化控制中心完全指南
华硕笔记本性能控制新选择:G-Helper轻量化控制中心完全指南 【免费下载链接】g-helper Lightweight Armoury Crate alternative for Asus laptops with nearly the same functionality. Works with ROG Zephyrus, Flow, TUF, Strix, Scar, ProArt, Vivobook, Zenboo…...
如何快速上手Udeler:新手必看的完整Udemy课程下载指南
如何快速上手Udeler:新手必看的完整Udemy课程下载指南 【免费下载链接】udemy-downloader-gui A desktop application for downloading Udemy Courses 项目地址: https://gitcode.com/gh_mirrors/ud/udemy-downloader-gui 想要随时随地学习你购买的Udemy课程…...
【ChatGPT×Slack企业级整合实战指南】:20年SRE亲授零代码接入、权限治理与合规审计全流程
更多请点击: https://kaifayun.com 第一章:ChatGPTSlack企业级整合的战略价值与落地全景 将ChatGPT深度集成至Slack平台,已从技术实验演进为驱动组织协同效能跃迁的核心基础设施。该整合并非简单Bot接入,而是通过语义理解、上下文…...
5分钟搞定Windows风扇控制:Fan Control终极免费散热优化方案
5分钟搞定Windows风扇控制:Fan Control终极免费散热优化方案 【免费下载链接】FanControl.Releases This is the release repository for Fan Control, a highly customizable fan controlling software for Windows. 项目地址: https://gitcode.com/GitHub_Trend…...
长期使用Taotoken后对账单清晰度与成本预测的体会
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 长期使用Taotoken后对账单清晰度与成本预测的体会 效果展示类,分享作为长期用户,如何依赖Taotoken提供的详…...
对比直接使用厂商API,Taotoken在用量观测与账单管理上的便利性
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 对比直接使用厂商API,Taotoken在用量观测与账单管理上的便利性 当开发者或团队同时接入多个大模型厂商的原生API时&…...
