基于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 相关文章推荐
JavaScript 关键字屏蔽实现函数
Aug 02 Javascript
基于jquery的使ListNav兼容中文首字拼音排序的实现代码
Jul 10 Javascript
jquery刷新页面的实现代码(局部及全页面刷新)
Jul 11 Javascript
JavaScript中使用Substring删除字符串最后一个字符
Nov 03 Javascript
JS JSON对象转为字符串的简单实现方法
Nov 18 Javascript
一个奇葩的最短的 IE 版本判断JS脚本
May 28 Javascript
jQuery页面加载初始化常用的三种方法
Jun 04 Javascript
innerHTML动态添加html代码和脚本兼容多个浏览器
Oct 11 Javascript
IE下支持文本框和密码框placeholder效果的JQuery插件分享
Jan 31 Javascript
javascript实现电脑和手机版样式切换
Nov 10 Javascript
Vue 实例事件简单示例
Sep 19 Javascript
JS中箭头函数与this的写法和理解
Jan 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定时执行计划任务的多种方法小结
2011/12/19 PHP
前端必学之PHP语法基础
2016/01/01 PHP
PHP如何搭建百度Ueditor富文本编辑器
2018/09/21 PHP
Javascript/Jquery——简单定时器的多种实现方法
2013/07/03 Javascript
js编码、解码函数介绍及其使用示例
2013/09/05 Javascript
js查找某元素中的所有图片地址的方法
2014/01/16 Javascript
验证码在IE中不刷新而谷歌等浏览器正常的解决方案
2014/03/18 Javascript
Jquery实现遮罩层的方法
2015/06/08 Javascript
JS中的事件委托实例浅析
2018/03/22 Javascript
vue.js中npm安装教程图解
2018/04/10 Javascript
通过vue-cli3构建一个SSR应用程序的方法
2018/09/13 Javascript
关于Vue源码vm.$watch()内部原理详解
2019/04/26 Javascript
微信小程序实现分享商品海报功能
2019/09/30 Javascript
原生javascript的ajax请求及后台PHP响应操作示例
2020/02/24 Javascript
Vue文本模糊匹配功能如何实现
2020/07/30 Javascript
three.js 将图片马赛克化的示例代码
2020/07/31 Javascript
mapboxgl实现带箭头轨迹线的代码
2021/01/04 Javascript
jquery实现广告上下滚动效果
2021/03/04 jQuery
Python模拟登录验证码(代码简单)
2016/02/06 Python
Python中使用Counter进行字典创建以及key数量统计的方法
2018/07/06 Python
python2.7实现邮件发送功能
2018/12/12 Python
Python2和Python3的共存和切换使用
2019/04/12 Python
python实现对服务器脚本敏感信息的加密解密功能
2019/08/13 Python
pandas条件组合筛选和按范围筛选的示例代码
2019/08/26 Python
Python中Unittest框架的具体使用
2019/08/27 Python
python基于event实现线程间通信控制
2020/01/13 Python
详解纯CSS3制作的20种loading动效
2017/07/05 HTML / CSS
HTML5在canvas中绘制复杂形状附效果截图
2014/06/23 HTML / CSS
全球领先的中国制造商品在线批发平台:DHgate
2020/01/28 全球购物
初一体育教学反思
2014/01/29 职场文书
《浅水洼里的小鱼》听课反思
2014/02/28 职场文书
以权谋私检举信范文
2015/03/02 职场文书
汽车车尾标语大全
2015/08/11 职场文书
班主任远程培训研修日志
2015/11/13 职场文书
2016关于预防职务犯罪的心得体会
2016/01/21 职场文书
高三化学教学反思
2016/02/22 职场文书