基于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 全选效果实现代码
Mar 23 Javascript
JS 判断undefined的实现代码
Nov 26 Javascript
js Function类型
Dec 04 Javascript
innerHTML与jquery里的html()区别介绍
Oct 12 Javascript
基于JQuery的列表拖动排序实现代码
Oct 01 Javascript
jQuery实现的省市县三级联动菜单效果完整实例
Aug 01 Javascript
js自定义Tab选项卡效果
Jun 05 Javascript
详解React中传入组件的props改变时更新组件的几种实现方法
Sep 13 Javascript
Node.js如何对SQLite的async/await封装详解
Feb 14 Javascript
基于vue 实现表单中password输入的显示与隐藏功能
Jul 19 Javascript
Vue实现数据请求拦截
Oct 23 Javascript
在vue中利用v-html按分号将文本换行的例子
Nov 14 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对文件进行加锁、解锁实例
2015/01/23 PHP
php实现向javascript传递数组的方法
2015/07/27 PHP
laravel实现图片上传预览,及编辑时可更换图片,并实时变化的例子
2019/11/14 PHP
jQuery Ajax之load()方法
2009/10/12 Javascript
javascript在事件监听方面的兼容性小结
2010/04/07 Javascript
一个奇葩的最短的 IE 版本判断JS脚本
2014/05/28 Javascript
node.js中的fs.futimes方法使用说明
2014/12/17 Javascript
JS实现3D图片旋转展示效果代码
2015/09/22 Javascript
纯JavaScript代码实现文本比较工具
2016/02/17 Javascript
jQuery继承extend用法详解
2016/10/10 Javascript
js制作支付倒计时页面
2016/10/21 Javascript
微信小程序之ES6与事项助手的功能实现
2016/11/30 Javascript
javascript中replace使用方法总结
2017/03/01 Javascript
Javascript实现一个简单的输入关键字添加标签效果实例
2017/06/01 Javascript
JS 判断某变量是否为某数组中的一个值的3种方法(总结)
2017/07/10 Javascript
使用JSON格式提交数据到服务端的实例代码
2018/04/01 Javascript
vue动态配置模板 'component is'代码
2019/07/04 Javascript
利用H5api实现时钟的绘制(javascript)
2020/09/13 Javascript
[03:37]2016完美“圣”典 风云人物:Mikasa专访
2016/12/07 DOTA
[04:09]2018年度DOTA2社区贡献奖-完美盛典
2018/12/16 DOTA
TensorFlow实现简单卷积神经网络
2018/05/24 Python
pyqt5移动鼠标显示坐标的方法
2019/06/21 Python
python使用itchat模块给心爱的人每天发天气预报
2019/11/25 Python
Python3搭建http服务器的实现代码
2020/02/11 Python
pytorch之Resize()函数具体使用详解
2020/02/27 Python
对python中return与yield的区别详解
2020/03/12 Python
pycharm远程连接服务器并配置python interpreter的方法
2020/12/23 Python
运动会领导邀请函
2014/01/10 职场文书
学校介绍信范文
2014/01/14 职场文书
《夸父追日》教学反思
2014/02/26 职场文书
意外伤害赔偿协议书
2014/09/16 职场文书
领导班子作风建设年个人整改措施
2014/09/29 职场文书
中学生检讨书1000字
2014/10/28 职场文书
2015年文明创建工作总结
2015/04/30 职场文书
活动费用申请报告
2015/05/15 职场文书
爱的教育读书笔记
2015/06/26 职场文书