基于Vue实现支持按周切换的日历


Posted in Javascript onSeptember 24, 2020

基于Vue的日历小功能,可根据实际开发情况按每年、每月、每周、进行切换,具体内容如下

基于Vue实现支持按周切换的日历

<template>
 <div class="date">
  <!-- 年份 月份 -->
  <div class="month">
  <p>{{ currentYear }}年{{ currentMonth }}月</p>
  </div>
  <!-- 星期 -->
  <ul class="weekdays">
  <li>一</li>
  <li>二</li>
  <li>三</li>
  <li>四</li>
  <li>五</li>
  <li>六</li>
  <li>日</li>
  </ul>
  <!-- 日期 -->
  <ul class="days">
  <li @click="pick(day)" v-for="(day, index) in days" :key="index">
   <!--本月-->
   <span v-if="day.getMonth()+1 != currentMonth" class="other-month">{{ day.getDate() }}</span>
   <span v-else>
   <!--今天-->
   <span v-if="day.getFullYear() == new Date().getFullYear() && day.getMonth() == new Date().getMonth() && day.getDate() == new Date().getDate()" class="active">{{ day.getDate() }}</span>
   <span v-else>{{ day.getDate() }}</span>
   </span>
  </li>
  </ul>
 </div>
</template>

js部分:目前默认显示一周,可根据实际情况更改

<script>


 export default {
 name: 'date',

 data () {
  return {
  currentYear: 1970, // 年份
  currentMonth: 1, // 月份
  currentDay: 1, // 日期
  currentWeek: 1, // 星期
  days: [],
  }
 },

 mounted () {

 },

 created () {
  this.initData(null)
 },

 methods: {
  formatDate (year, month, day) {
  const y = year
  let m = month
  if (m < 10) m = `0${m}`
  let d = day
  if (d < 10) d = `0${d}`
  return `${y}-${m}-${d}`
  },

  initData (cur) {
  let date = ''
  if (cur) {
   date = new Date(cur)
  } else {
   date = new Date()
  }
  this.currentDay = date.getDate()   // 今日日期 几号
  this.currentYear = date.getFullYear()  // 当前年份
  this.currentMonth = date.getMonth() + 1 // 当前月份
  this.currentWeek = date.getDay() // 1...6,0 // 星期几
  if (this.currentWeek === 0) {
   this.currentWeek = 7
  }
  const str = this.formatDate(this.currentYear, this.currentMonth, this.currentDay)// 今日日期 年-月-日
  this.days.length = 0
  // 今天是周日,放在第一行第7个位置,前面6个 这里默认显示一周,如果需要显示一个月,则第二个循环为 i<= 35- this.currentWeek
  /* eslint-disabled */
  for (let i = this.currentWeek - 1; i >= 0; i -= 1) {
   const d = new Date(str)
   d.setDate(d.getDate() - i)
   // console.log(y:" + d.getDate())
   this.days.push(d)
  }
  for (let i = 1; i <= 7 - this.currentWeek; i += 1) {
   const d = new Date(str)
   d.setDate(d.getDate() + i)
   this.days.push(d)
  }
  },

  // 上个星期
  weekPre () {
  const d = this.days[0] // 如果当期日期是7号或者小于7号
  d.setDate(d.getDate() - 7)
  this.initData(d)
  },

  // 下个星期
  weekNext () {
  const d = this.days[6] // 如果当期日期是7号或者小于7号
  d.setDate(d.getDate() + 7)
  this.initData(d)
  },

  // 上一??月 传入当前年份和月份
  pickPre (year, month) {
  const d = new Date(this.formatDate(year, month, 1))
  d.setDate(0)
  this.initData(this.formatDate(d.getFullYear(), d.getMonth() + 1, 1))
  },


  // 下一??月 传入当前年份和月份
  pickNext (year, month) {
  const d = new Date(this.formatDate(year, month, 1))
  d.setDate(35)
  this.initData(this.formatDate(d.getFullYear(), d.getMonth() + 1, 1))
  },

  // 当前选择日期
  pick (date) {
  alert(this.formatDate(date.getFullYear(), date.getMonth() + 1, date.getDate()))
  },
 },
 }
</script>
<style lang="scss">
 @import "~base";

 .date {
 height: px2rem(180);
 color: #333;

 .month {
  font-size: px2rem(24);
  text-align: center;
  margin-top: px2rem(20);
 }

 .weekdays {
  display: flex;
  font-size: px2rem(28);
  margin-top: px2rem(20);

  li {
  flex: 1;
  text-align: center;
  }
 }

 .days {
  display: flex;

  li {
  flex: 1;
  font-size: px2rem(30);
  text-align: center;
  margin-top: px2rem(10);
  line-height: px2rem(60);

  .active {
   display: inline-block;
   width: px2rem(60);
   height: px2rem(60);
   color: #fff;
   border-radius: 50%;
   background-color: #fa6854;
  }

  .other-month {
   color: #e4393c;
  }
  }
 }
 }
</style>

相关参考链接:Vue.js创建Calendar日历效果

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
使用POST方式弹出窗口的两种方法示例介绍
Jan 29 Javascript
javascript中字符串拼接详解
Sep 26 Javascript
浅谈javascript中基本包装类型
Jun 03 Javascript
深入浅析Bootstrap列表组组件
May 03 Javascript
Javascript中判断一个值是否为undefined的方法详解
Sep 28 Javascript
浅谈js键盘事件全面控制
Dec 01 Javascript
js操作浏览器的参数方法
Jan 21 Javascript
JS实现合并json对象的方法
Oct 10 Javascript
vue拖拽排序插件vuedraggable使用方法详解
Aug 21 Javascript
使用VScode 插件debugger for chrome 调试react源码的方法
Sep 13 Javascript
解决Antd Table组件表头不对齐的问题
Oct 27 Javascript
用webAPI实现图片放大镜效果
Nov 23 Javascript
JS中正则表达式要注意lastIndex属性
Aug 08 #Javascript
vue+mockjs模拟数据实现前后端分离开发的实例代码
Aug 08 #Javascript
React Native如何消除启动时白屏的方法
Aug 08 #Javascript
react native带索引的城市列表组件的实例代码
Aug 08 #Javascript
React Native仿美团下拉菜单的实例代码
Aug 08 #Javascript
React-Native 组件之 Modal的使用详解
Aug 08 #Javascript
基于jQuery对象和DOM对象和字符串之间的转化实例
Aug 08 #jQuery
You might like
PHP+AJAX实现无刷新注册(带用户名实时检测)
2007/01/02 PHP
让PHP支持页面回退的两种方法[转]
2007/02/14 PHP
实例介绍PHP的Reflection反射机制
2014/08/05 PHP
smarty内置函数capture用法分析
2015/01/22 PHP
php版微信自动获取收货地址api用法示例
2016/09/22 PHP
PHP const定义常量及global定义全局常量实例解析
2020/05/28 PHP
用javascript编写的第一人称射击游戏
2007/02/25 Javascript
jquery改变tr背景色的示例代码
2013/12/28 Javascript
JavaScript中判断页面关闭、页面刷新的实现代码
2014/08/27 Javascript
JS简单操作select和dropdownlist实例
2014/11/26 Javascript
jQuery购物车插件jsorder用法(支持后台处理程序直接转换成DataTable处理)
2016/06/08 Javascript
分享十三个最佳JavaScript数据网格库
2017/04/07 Javascript
vue中SPA单页面应用程序详解
2017/11/07 Javascript
jQuery实现基本动画效果的方法详解
2018/09/06 jQuery
详解基于webpack&amp;gettext的前端多语言方案
2019/01/29 Javascript
JS前端广告拦截实现原理解析
2020/02/17 Javascript
javascript实现电商放大镜效果
2020/11/23 Javascript
详解Vue3.0 + TypeScript + Vite初体验
2021/02/22 Vue.js
Python实现的微信好友数据分析功能示例
2018/06/21 Python
python接口自动化(十七)--Json 数据处理---一次爬坑记(详解)
2019/04/18 Python
详解python3中用HTMLTestRunner.py报ImportError: No module named 'StringIO'如何解决
2019/08/27 Python
python实现单目标、多目标、多尺度、自定义特征的KCF跟踪算法(实例代码)
2020/01/08 Python
python手机号前7位归属地爬虫代码实例
2020/03/31 Python
django创建超级用户时指定添加其它字段方式
2020/05/14 Python
给ubuntu18安装python3.7的详细教程
2020/06/08 Python
一款CSS3实现多功能下拉菜单(带分享按)的教程
2014/11/05 HTML / CSS
澳大利亚男士西服品牌:M.J.Bale
2018/02/06 全球购物
护理专业本科生自荐信
2013/10/01 职场文书
开朗女孩的自我评价
2014/02/10 职场文书
企业趣味活动方案
2014/08/21 职场文书
个人廉政承诺书
2015/04/28 职场文书
感恩教育观后感
2015/06/17 职场文书
采购部2015年度工作总结
2015/07/24 职场文书
Python Matplotlib绘制条形图的全过程
2021/10/24 Python
python3 字符串str和bytes相互转换
2022/03/23 Python
MySQL的意向共享锁、意向排它锁和死锁
2022/07/15 MySQL