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

Vue3.x 封装一个简单的日历

Vue3.x 封装一个简单的日历

  • 技术栈

Vue3.x + Vite

效果

在这里插入图片描述

初始化一个基于 Vue.3x 的 demo

npm create vite@latest

npm i less -D

开发组件

  • 展示为 6*7 的布局
  • 6 行 7 列

获取指定时间或者当前时间的年,月,日

const date = modelValue.value ? new Date(modelValue.value) : new Date()
const [y, m, d] = [date.getFullYear(), date.getMonth() + 1, date.getDate()]

获取当月开始星期用于计算前面填充时间

const curDays = []
/**
 * 当月开始星期
 */
const startW = new Date(y, m, 1).getDay()
let nm = m - 1
let ny = y
if (nm === 0) {
  nm = 12
  ny--
}
/**
 * 上月总天数
 */
const prevTotalDay = getMonthDay(ny, nm)
Array.from({ length: startW }, (_, i) => {
  const newDay = prevTotalDay - i
  const tempDate = `${ny}-${nm}-${newDay}`
  curDays.push({ y: ny, m: nm, d: newDay, value: addZero(newDay), disabled: true, today: tempDate === nowDate })
})

填充当月总天数

/**
 * 当月总天数
 */
const totalDay = getMonthDay(y, m)
Array.from({ length: totalDay }, (_, i) => {
  const nd = i + 1
  const tempDate = `${y}-${addZero(m)}-${addZero(nd)}`
  const today = tempDate === nowDate
  const selected = modelValue.value ? tempDate === modelValue.value : false
  curDays.push({ y, m, d: nd, value: addZero(nd), today, selected })
})

计算后面的填充时间

/**
 * 下月
 */
let nextM = m + 1
let nextY = y
if (nextM > 12) {
  nextM = 1
  nextY++
}
Array.from({ length: total - curDays.length }, (_, i) => {
  const nd = i + 1
  const tempDate = `${nextY}-${nextM}-${nd}`
  curDays.push({ y: nextY, m: nextM, d: nd, value: addZero(nd), disabled: true, today: tempDate === nowDate })
})

总结

  • 这样6*7的数据计算完成
  • 把这个计算封装一个方法,然后切换月和切换年时调用这个方法,这样日历就封装完成
  • 演示地址
  • 源码地址,支持平台:
    • Vue3.x
    • Vue2.x
    • 微信小程序

相关文章:

  • 《操作系统 - 清华大学》 9 -2:进程调度:调度原则
  • 嵌入式系统中总线、指令集与ARM架构解析
  • 智慧校园平台在学生学习与生活中的应用
  • 一周热点:基于向量的推理,而非文本
  • 【最后203篇系列】010 关于矩阵的一点思考
  • PostgreSQL 创建表格
  • JDK17安装方法/如何安装JDK17/环境变量配置
  • Android Activity启动流程详解
  • 第四章 activiti流程 “BPMN2.0规范解密室”
  • Transformer 代码剖析10 - TransformerEmbedding (pytorch实现)
  • 大白话css第五章CSS新特性与前沿技术、跨平台与跨设备适配
  • FakeApp 技术浅析(二):生成对抗网络
  • 传承式的传统企业新零售数字化转型的逆袭之路!
  • 在已安装二进制movit2的情况下使用自编译moveit2
  • Redis分布式锁的实现(Redission)
  • 弱监督语义分割学习计划(2)-使用CoT进行Open Vocabulary Label简单实现类激活图
  • 【AD】3-10 原理图PDF导出
  • 【多模态大模型论文精读】MOSHI:双工实时语音对话大模型
  • java之运算符
  • 大白话TypeScript 第九章:TypeScript 项目的优化、测试与发布
  • 做采集网站赚钱吗/最经典最常用的网站推广方式
  • 苏州专业做网站公司电话/百度指数是搜索量吗
  • 哈尔滨关键词优化方式/aso优化排名
  • 动力风网站建设及软件开发合同/重庆seo网络营销
  • 西安网站建设公司都有哪些/网络培训
  • 用linux做网站/东莞seo网站排名优化公司