基于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基础知识filter()和find()实例说明
Jul 06 Javascript
自己动手制作jquery插件之自动添加删除行的实现
Oct 13 Javascript
使用apply方法处理数组的三个技巧[译]
Sep 20 Javascript
Javascript中设置默认参数值示例
Sep 11 Javascript
JavaScript DOM事件(笔记)
Apr 08 Javascript
javascript框架设计之浏览器的嗅探和特征侦测
Jun 23 Javascript
javascript监听页面刷新和页面关闭事件方法详解
Jan 09 Javascript
vue 1.0 结合animate.css定义动画效果
Jul 11 Javascript
js根据json数据中的某一个属性来给数据分组的方法
Oct 08 Javascript
vue项目中引入Sass实例方法
Aug 27 Javascript
微信小程序实现导航栏和内容上下联动功能代码
Jun 29 Javascript
详解JavaScript的this指向和绑定
Sep 08 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
SONY ICF-SW7600的电路分析
2021/03/02 无线电
PHP上传文件时文件过大$_FILES为空的解决方法
2013/11/26 PHP
用HTML/JS/PHP方式实现页面延时跳转的简单实例
2016/07/18 PHP
thinkPHP框架整合tcpdf插件操作示例
2018/08/07 PHP
Laravel validate error处理,ajax,json示例
2019/10/25 PHP
JQuery 写的个性导航菜单
2009/12/24 Javascript
javaScript 动态访问JSon元素示例代码
2013/08/30 Javascript
JavaScript中使用Substring删除字符串最后一个字符
2013/11/03 Javascript
Knockout数组(observable)使用详解示例
2013/11/15 Javascript
把jQuery的类、插件封装成seajs的模块的方法
2014/03/12 Javascript
jQuery获得子元素个数的方法
2015/04/14 Javascript
AngularJS的表单使用详解
2015/06/17 Javascript
JS实现可拖曳、可关闭的弹窗效果
2015/09/26 Javascript
JavaScript实现ASC转汉字及汉字转ASC的方法
2016/01/23 Javascript
基于JavaScript实现瀑布流布局(二)
2016/01/26 Javascript
jQuery中$.ajax()方法参数解析
2016/10/22 Javascript
js事件源window.event.srcElement兼容性写法(详解)
2016/11/25 Javascript
canvas实现爱心和彩虹雨效果
2017/03/09 Javascript
[js高手之路]单例模式实现模态框的示例
2017/09/01 Javascript
微信小程序滑动选择器的实现代码
2018/08/10 Javascript
一篇文章弄懂javascript中的执行栈与执行上下文
2019/08/09 Javascript
Vue清除定时器setInterval优化方案分享
2020/07/21 Javascript
[00:59]DOTA2英雄背景故事——上古巨神
2020/06/28 DOTA
Python学习笔记之os模块使用总结
2014/11/03 Python
Python正则表达式实现截取成对括号的方法
2017/01/06 Python
Pycharm中切换pytorch的环境和配置的教程详解
2020/03/13 Python
Python接口测试数据库封装实现原理
2020/05/09 Python
Django中template for如何使用方法
2021/01/31 Python
美国知名的女性服饰品牌:LOFT(洛芙特)
2016/08/05 全球购物
美国折扣网站:jClub
2017/08/07 全球购物
十八届三中全会宣传方案
2014/02/21 职场文书
大学开学计划书
2014/04/30 职场文书
党员年度个人总结
2015/02/14 职场文书
2016年庆“七一”主题党日活动总结
2016/04/05 职场文书
员工升职自我评价
2019/03/26 职场文书
适合青年人白手起家的创业项目分享
2019/08/16 职场文书