uni——月份选择(横向滑动tab,横向滚动选择日期)

news2024/9/25 23:17:06

案例展示

在这里插入图片描述

案例代码

已封装成组件使用
<template>
	<view>
		<view class="tabBox">
			<scroll-view scroll-x="true" :scroll-left="scrollLeft" :scroll-with-animation="true">
				<view class="box">
					<view class="tabItem" v-for="(item,index) in monthList" :key="index"
						:class="{'ac':tabCurrent == index}" @click="tabChange(index)">
						{{item.month}}
					</view>
				</view>
			</scroll-view>
		</view>
	</view>
</template>

<script>
	export default {
		data() {
			return {
				itemWidth: 0, //每个item的宽度
				scrollLeft: 0, //滑动距离
				tabCurrent: 0, //默认当前月份
				sendMonth:'',
				monthList: [{
					id: 1,
					month: '1月'
				}, {
					id: 2,
					month: '2月'
				}, {
					id: 3,
					month: '3月'
				}, {
					id: 4,
					month: '4月'
				}, {
					id: 5,
					month: '5月'
				}, {
					id: 6,
					month: '6月'
				}, {
					id: 7,
					month: '7月'
				}, {
					id: 8,
					month: '8月'
				}, {
					id: 9,
					month: '9月'
				}, {
					id: 10,
					month: '10月'
				}, {
					id: 11,
					month: '11月'
				}, {
					id: 12,
					month: '12月'
				}]
			}
		},
		mounted() {
			// 先获取当前时间的月份
			let date = new Date();
			this.tabCurrent = date.getMonth(); // getMonth()返回的月份从0开始  正好符合tabCurrent  不用再加1了
			this.sendMonth = date.getMonth()+1; // 初次加载,传当前月份

			this.$nextTick(() => {
				const query = uni.createSelectorQuery().in(this);
				query.select('.tabItem').boundingClientRect(data => {
					// item宽度 = 自身宽度 + 8px右边距
					this.itemWidth = data.width + 8;
					this.scrollLeft = this.itemWidth * (this.tabCurrent - 1);
				}).exec();
			})
		},
		methods: {
			// 点击tab切换高亮,并进行滑动,(index-1)是为了点击项显示在第二栏的位置
			tabChange(index) {
				this.tabCurrent = index;
				// 传参的月份
				this.sendMonth = this.monthList[index].id
				this.scrollLeft = this.itemWidth * (index - 1);
				console.log(this.scrollLeft);
				this.$emit('tabChange',this.sendMonth)
			},
		}
	}
</script>
<style lang="scss">
	.tabBox {
		background: #ffffff;

		/* 隐藏滚动条样式 */
		::-webkit-scrollbar {
			width: 0;
			height: 0;
		}

		.box {
			width: 1400rpx;
			margin: 0 24rpx;
			display: flex;
			align-items: center;
			height: 90rpx;

			.tabItem {
				flex-shrink: 0;
				text-align: center;
				width: 100rpx;
				height: 60rpx;
				line-height: 60rpx;
				color: #636363;
				font-size: 28rpx;
				margin-right: 8px;
				border-radius: 50rpx;
			}

			.ac {
				background: #F9682A;
				font-size: 28rpx;
				color: #FFFFFF;
			}
		}
	}
</style>

参考网址

https://uniapp.dcloud.net.cn/component/scroll-view.html

2.年月按钮,从某个范围开始到当前的所有的月份。

案例展示

在这里插入图片描述

<template>
	<view>
		<view class="tabBox">
			<scroll-view scroll-x="true" :scroll-left="scrollLeft" :scroll-with-animation="true" class="scrollBox">
				<view class="box">
					<view class="tabItem" v-for="(item,index) in monthList" :key="index"
						:class="{'ac':tabCurrent == index}" @click="tabChange(item,index)">
						{{item}}
					</view>
				</view>
			</scroll-view>
		</view>
	</view>
</template>

<script>
	export default {
		data() {
			return {
				itemWidth: 0, //每个item的宽度
				scrollLeft: 0, //滑动距离
				tabCurrent: 0, //默认当前月份
				sendMonth: '',
				monthList: [{}]
			}
		},
		mounted() {
			let date = new Date();
			let year = date.getFullYear();
			let month = date.getMonth() + 1;
			let day = date.getDate();
			let currentDate = `${year}-${month < 10 ? '0' + month : month}-${day < 10 ? '0' + day : day}`;
			this.getMonthsInRange('2020-01-01', currentDate);

			this.$nextTick(() => {
				const query = uni.createSelectorQuery().in(this);
				query.select('.tabItem').boundingClientRect(data => {
					this.itemWidth = data.width;
					this.scrollLeft = this.itemWidth * (this.tabCurrent - 1);
				}).exec();
			})
		},
		methods: {
			tabChange(item, index) {
				this.tabCurrent = index;
				this.sendMonth = item
				this.scrollLeft = this.itemWidth * (index - 1);
				this.$emit('tabChange', this.sendMonth)
			},
			getMonthsInRange(start, end) {
				var startMonth = new Date(start).getMonth();
				var endMonth = new Date(end).getMonth();
				var startYear = new Date(start).getFullYear();
				var endYear = new Date(end).getFullYear();
				var months = [];

				for (var i = startYear; i <= endYear; i++) {
					var monthStart = i === startYear ? startMonth : 0;
					var monthEnd = i === endYear ? endMonth : 11;

					for (var j = monthStart; j <= monthEnd; j++) {
						var month = j + 1;
						months.push(i + '-' + (month < 10 ? '0' + month : month));
					}
				}
				this.monthList = months
				this.tabCurrent = this.monthList.length - 1 // 初次加载默认显示
			}
		}
	}
</script>
<style lang="scss">
	.tabBox {
		background: #ffffff;

		.scrollBox {
			margin: 0 24rpx;
			width: 700rpx;
		}

		/* 隐藏滚动条样式 */
		::-webkit-scrollbar {
			width: 0;
			height: 0;
		}

		.box {
			// width: 1400rpx;
			display: flex;
			align-items: center;
			height: 90rpx;

			.tabItem {
				flex-shrink: 0;
				text-align: center;
				width: 140rpx;
				height: 60rpx;
				line-height: 60rpx;
				color: #636363;
				font-size: 28rpx;
				border-radius: 50rpx;
			}

			.ac {
				background: #F9682A;
				font-size: 28rpx;
				color: #FFFFFF;
			}
		}
	}
</style>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/854005.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

AtcoderABC313场

A - To Be SaikyoA - To Be Saikyo 题目大意 有N个人&#xff0c;编号从1到N。每个人有一个整数分数&#xff0c;称为编程能力&#xff1b;第i个人的编程能力是Pi分。人1需要多少分才能成为最强者&#xff1f;换句话说&#xff0c;最小非负整数x是多少&#xff0c;使得对于所有…

10万SUV大魔王?市场再添新成员,北汽新魔方正式上市,鸿蒙加持

根据报道&#xff0c;北京汽车宣布新一款名为新魔方的车型已经在位于北京汽车株洲基地的超级工厂开始大规模生产。这款车型是继北京新EU5 PLUS之后的又一重要产品&#xff0c;被认为将对10万级SUV市场带来颠覆性影响。 据报道&#xff0c;北汽魔方是首款搭载鸿蒙HarmonyOS智能操…

【UE4 RTS】05-Fixing Camera Movement

前言 本篇实现了两个功能&#xff1a;一是解决CameraPawn旋转后&#xff0c;前进方向没变的问题&#xff1b;二是玩家可选择提高CameraPawn的移动速度 效果 一、解决CameraPawn旋转后&#xff0c;前进方向没变的问题 二、玩家可提高CameraPawn移动速度 步骤 一、解决Camera…

IDEA离线安装插件

一、背景 有时&#xff0c;在ideal中我们无法获取到插件&#xff0c;可能是因为内网或者无法访问插件库等原因&#xff0c;此时我们需要离线安装插件 IDEA离线仓库&#xff1a;https://plugins.jetbrains.com/ 二、步骤 2.1 下载插件&#xff1a;https://plugins.jetbrains.…

20230809在WIN10下使用python3处理Google翻译获取的SRT格式字幕(DOCX)

20230809在WIN10下使用python3处理Google翻译获取的SRT格式字幕&#xff08;DOCX&#xff09; 2023/8/9 19:02 由于喜欢看纪录片等外文视频&#xff0c;通过剪映/PR2023/AUTOSUB识别字幕之后&#xff0c;可以通过google翻译识别为简体中文的DOCX文档。 DOCX文档转换为TXT文档之…

收藏!新增6省!2023年度杰青、优青名单汇总(附下载)

2023省级自然科学基金项目名单 杰青、优青项目是国家及各省市为促进青年科学和技术人才的成长&#xff0c;加速培养造就一批进入世界科技前沿的优秀学术带头人而特别设立的科学基金&#xff0c;是各个科研单位竞相争夺的青年科技人才。 按照惯例&#xff0c;2023年国家自然基…

百度资深PMO阚洁受邀为第十二届中国PMO大会演讲嘉宾

百度在线网络技术&#xff08;北京&#xff09;有限公司资深PMO阚洁女士受邀为由PMO评论主办的2023第十二届中国PMO大会演讲嘉宾&#xff0c;演讲议题&#xff1a;运筹于股掌之间&#xff0c;决胜于千里之外 —— 360斡旋项目干系人。大会将于8月12-13日在北京举办&#xff0c;…

Java基础(八)二维数组

数组 二、二维数组 1. 二维数组使用步骤 定义二维数组 格式&#xff1a;数据类型 数组名[][]; 或 数据类型[][] 数组名; int scores[][]; int[][] scores;为二维数组元素分配内存 格式&#xff1a;数据类型 数组名[][]; 或 数据类型[][] 数组名; int scores[][]; scores …

MinGW-w64的安装详细步骤(c/c++的编译器gcc、g++的windows版,win10、win11真实可用)

文章目录 1、MinGW的定义2、MinGW的主要组件3、MinGW-w64下载与安装3.1、下载解压安装地址3.2、MinGW-w64环境变量的设置 4、验证MinGW是否安装成功5、编写一段简单的代码验证下6、总结 1、MinGW的定义 MinGW&#xff08;Minimalist GNU for Windows&#xff09; 是一个用于 W…

无菌车间ar实景巡检为企业带来了诸多好处

随着科技的不断发展&#xff0c;AR增强现实技术逐渐渗透到各个行业&#xff0c;为生产制造带来了前所未有的便捷。特别是在制造业中&#xff0c;AR增强现实技术的应用正逐步改变着传统的生产模式&#xff0c;为企业带来了诸多优势。 传统的巡视方式往往需要人工实地查看设备&am…

多进程利用TCP进行信息群发功能

/服务器的代码 #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include <unistd.h> #include <string.h> #include <stdio.h> #include <stdlib.h> #define SEVER_IP &quo…

抖音商品上架有攻略:详细介绍步骤与注意事项

抖音是一款非常流行的短视频分享平台&#xff0c;也是一个非常适合进行商品销售的平台。上架商品是在抖音上进行电商销售的重要一环&#xff0c;下面不若与众将介绍抖音商品的上架流程和注意事项。 1. 注册账号和认证&#xff1a;首先&#xff0c;你需要在抖音平台上注册一个账…

同步辐射散射数据处理分析方法及实验过程

同步辐射散射数据处理分析方法及过程 同步辐射散射测试是一种先进的材料表征技术&#xff0c;已广泛应用于材料科学、生物学、化学等领域。同步辐射散射技术利用同步辐射光源产生的高亮度辐射&#xff0c;通过散射实验来研究样品的结构、形态和动态行为。 同步辐射散射处理分析…

ThreadLLocal的学习

ThreadLocal的学习 ThreadLocal的学习1.ThreadLocal是什么&#xff1f;2.ThreadLocal的数据结构Java的四种引用类型 3.ThreadLocal为什么会出现内存泄露&#xff1f;既然会出现内存泄露为什么Entry的key还要使用弱引用&#xff1f;如何避免内存泄露&#xff1f; ThreadLocal的学…

数据分析案例《共享单车使用量综合分析案例》上新啦

《共享单车使用量综合分析案例》是一门数据分析和统计学的课程&#xff0c;旨在教学生如何综合运用数据分析技术&#xff0c;研究共享单车使用量的变化和影响因素&#xff0c;从真实的数据中探索有关共享单车使用量的问题&#xff0c;并通过数据挖掘、统计分析等方法&#xff0…

详解推送Git分支时发生的 cannot lock ref 错误

在码云上建了一个项目仓库,分支模型使用 git-flow ,并在本地新建了一个功能分支 feature/feature-poll。后来在推送时发生错误,提示 cannot lock ref ...... 这样的错误信息。下面复盘一下具体过程和解决办法,以供参考。 在码云中建立仓库时,考虑到想按照 GitFlow 的模式…

怎么把两个pdf合并成一个?这几种方法值得了解

怎么把两个pdf合并成一个&#xff1f;在日常工作中&#xff0c;我们经常需要合并两个或多个PDF文件成一个。但是&#xff0c;对于不熟悉PDF编辑器的人来说&#xff0c;这可能是一个棘手的问题。在本文中&#xff0c;我们将介绍一些合并PDF文件的方法&#xff0c;有需要的小伙伴…

音视频--视频数据传输

参考文献 H264码流RTP封装方式详解&#xff1a;https://blog.csdn.net/water1209/article/details/126019272H264视频传输、编解码----RTP协议对H264数据帧拆包、打包、解包过程&#xff1a; https://blog.csdn.net/wujian946110509/article/details/79129338H264之NALU解析&a…

【Leetcode】对称二叉树||递归(击败100%)

step by step. 题目&#xff1a; 给你一棵二叉树的根节点 root &#xff0c;翻转这棵二叉树&#xff0c;并返回其根节点。 示例 1&#xff1a; 输入&#xff1a;root [4,2,7,1,3,6,9] 输出&#xff1a;[4,7,2,9,6,3,1]示例 2&#xff1a; 输入&#xff1a;root [2,1,3] 输出…

lc2536.子矩阵元素加1

暴力解法&#xff1a;直接按照题目所示在矩阵的相应位置加一 时间复杂度&#xff1a;O(n2 * queries.length) 空间复杂度&#xff1a;O(1) 二维差分&#xff1a;创建二维差分数组&#xff0c;通过对差分数组的修改来影响原来的数组&#xff0c;最后还原 时间复杂度&#x…