基于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 相关文章推荐
jQuery timers计时器简单应用说明
Oct 28 Javascript
javascript一些实用技巧小结
Mar 18 Javascript
模拟一个类似百度google的模糊搜索下拉列表
Apr 15 Javascript
理解javascript中的with关键字
Feb 15 Javascript
jQuery处理XML文件的几种方法
Jun 14 Javascript
浅谈jquery之on()绑定事件和off()解除绑定事件
Oct 26 Javascript
ES6新数据结构Map功能与用法示例
Mar 31 Javascript
讲解vue-router之什么是动态路由
May 28 Javascript
学习jQuery中的noConflict()用法
Sep 28 jQuery
mock.js模拟前后台交互
Jul 25 Javascript
Vue项目中如何使用Axios封装http请求详解
Oct 23 Javascript
手把手教你从零开始react+antd搭建项目
Jun 03 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常用编译参数中文说明
2014/09/27 PHP
php实现图片转换成ASCII码的方法
2015/04/03 PHP
PHP编辑器PhpStrom运行缓慢问题
2017/02/21 PHP
PHP抽象类基本用法示例
2018/12/28 PHP
DWR Ext 加载数据
2009/03/22 Javascript
js 与或运算符 || &amp;&amp; 妙用
2009/12/09 Javascript
javascript 验证日期的函数
2010/03/18 Javascript
纯js实现背景图片切换效果代码
2010/11/14 Javascript
JavaScript中清空数组的三种方法分享
2011/04/07 Javascript
Three.js源码阅读笔记(基础的核心Core对象)
2012/12/27 Javascript
基于JavaScript 声明全局变量的三种方式详解
2013/05/07 Javascript
js打开windows上的可执行文件示例
2014/05/27 Javascript
深入理解JavaScript系列(49):Function模式(上篇)
2015/03/04 Javascript
angular.js之路由的选择方法
2016/09/24 Javascript
基于jPlayer三分屏的制作方法
2016/12/21 Javascript
详解能在多种前端框架下使用的表格控件
2017/01/11 Javascript
原生JavaScript来实现对dom元素class的操作方法(推荐)
2017/08/16 Javascript
vue通过指令(directives)实现点击空白处收起下拉框
2018/12/06 Javascript
JS浮点数运算结果不精确的Bug解决
2019/08/01 Javascript
简单使用webpack打包文件的实现
2019/10/29 Javascript
[02:25]DOTA2英雄基础教程 生死判决瘟疫法师
2013/12/06 DOTA
python迭代器实例简析
2014/09/25 Python
使用Python进行二进制文件读写的简单方法(推荐)
2016/09/12 Python
Python 多线程实例详解
2017/03/25 Python
详解Python在七牛云平台的应用(一)
2017/12/05 Python
python如何实现int函数的方法示例
2018/02/19 Python
使用OpCode绕过Python沙箱的方法详解
2019/09/03 Python
python判断正负数方式
2020/06/03 Python
聊聊python中的异常嵌套
2020/09/01 Python
韩国知名的家庭购物网站:CJmall
2016/08/01 全球购物
教师自我评价范文
2013/12/16 职场文书
医院竞聘演讲稿
2014/05/16 职场文书
节能环保口号
2014/06/12 职场文书
2014年房地产销售工作总结
2014/12/01 职场文书
2014年审计人员工作总结
2014/12/19 职场文书
城南旧事观后感
2015/06/11 职场文书