vue+elementUI实现简单日历功能


Posted in Javascript onSeptember 24, 2020

vue+elementUI简单的实现日历功能,供大家参考,具体内容如下

<div class="calender2">
  <div class="date-headers">
  <div class="date-header">
    <div><el-button type="primary" @click="handlePrev"><i class="el-icon-arrow-left"></i>上一月</el-button></div>
    <div>{{ year }}年{{ month }}月{{ day }}日</div>
    <div><el-button type="primary" @click="handleNext">下一月<i class="el-icon-arrow-right"></i></el-button></div>
    <div><el-button type="primary" icon="el-icon-refresh-left" @click="refresh"></el-button></div>
  </div>
  </div>
  <div class="date-content">
    <div class="week-header">
      <div
       v-for="item in ['日','一','二','三','四','五','六']"
       :key=item
      >{{ item }}
      </div>
    </div>
    <div class="week-day">
      <div
       class="every-day"
       v-for="item in 42"
       :key="item"
       @click="handleClickDay(item - beginDay)"
      >
        <div v-if="item - beginDay > 0 && item - beginDay <= curDays"   :class="`${year}-${month}-${item - beginDay}` === `${year}-${month}-${day}` ? 'nowDay':''"
        >{{ item - beginDay }}</div>
        <div class="other-day" v-else-if="item - beginDay <= 0">{{ item - beginDay + prevDays }}</div>
        <div class="other-day" v-else>{{ item - beginDay -curDays }}</div>
      </div>
    </div>
  </div>
</div>

## javascript

<script>
  export default {
    name: "HelloWorld",
    data() {
      return {
        year: null,
        month: null,
        day: null,
        currentDay: null,
        currentYearMonthTimes: null,//当前年的月的天数
        monthOneDay: null,//一个月中的某一天
        curDate: null,
        prevDays: null,//上一月天数
      }
    },
    computed: {
      curDays() {
        return new Date(this.year, this.month, 0).getDate();
      },
      // 设置该月日期起始值(找到一号是在哪里)
      beginDay() {
        return new Date(this.year, this.month - 1, 1).getDay();
      }
    },
    created() {
      this.getInitDate();
      this.currentYearMonthTimes = this.mGetDate(this.year, this.month); //本月天数
      this.prevDays = this.mGetDate(this.year, this.month - 1);
      this.curDate = `${this.year}-${this.month}-${this.day}`
      console.log(this.curDate)
    },
    methods: {
      refresh(){ //强制刷新页面
        location. reload()
      },
      handleClickDay(day){ //点击这一天,绑定点击事件
        console.log( '形参传进来的',day)
        console.log( 'data里面的this.day',this.day)
        console.log( 'data里面的currentYearMonthTimes',this.currentYearMonthTimes)
        this.day = day
        if(this.day > this.currentYearMonthTimes){
          this.$message.warning('不能选择超出本月的日期');
        }
        console.log(day)
      },
      computedDay() {
        const allDay = new Date(this.year, this.month, 0).getDate();
        if (this.day > allDay) {
          this.day = allDay;
        }
      },
      //设置页头显示的年月日
      getInitDate() {
        const date = new Date();
        this.year = date.getFullYear();
        this.month = date.getUTCMonth() + 1;
        this.day = date.getDate();
      },
      // 如果要获取当前月份天数:
      mGetDate() {
        var date = new Date();
        var year = date.getFullYear();
        var month = date.getMonth() + 1;
        var d = new Date(year, month, 0);
        return d.getDate();
      },
      handlePrev() {
        if (this.month == 1) {
          this.month = 12
          this.year--
        } else {
          this.month--
        }
        this.computedDay()
      },
      handleNext() {
        if (this.month == 12) {
          this.month = 1
          this.year++
        } else {
          this.month++
        }
        this.computedDay()
      }
    }
  }
</script>
<style scoped>
  * {
    margin: 0px;
    border: 0px;
    list-style: none;
  }

  .calender2 {
    border-radius: 4px;
    position: absolute;
    top: 50%;
    left: 50%;
    transform: translate(-50%, -50%);
    height: 396px;
    width: 420px;
    border: 1px solid #ccc;
    box-shadow: 0 2px 4px rgba(0, 0, 0, .12), 0 0 6px rgba(0, 0, 0, .04)
  }

  .date-header {
    height: 60px;
    width: 422px;
    display: flex;
    align-items: center;
    justify-content: space-around;
  }
  .date-headers {
    height: 60px;
    width: 422px;
    display: flex;
  }

  .pre-month {
    position: absolute;
    display: inline-block;
    height: 0px;
    width: 0px;
    border: 15px solid;
    border-color: transparent rgb(35, 137, 206) transparent transparent;
  }

  .next-month {
    position: absolute;
    display: inline-block;
    height: 0px;
    width: 0px;
    border: 15px solid;
    border-color: transparent transparent transparent rgb(35, 137, 206);
  }

  .show-date {
    margin-left: 40px;
    margin-top: 0px;
    display: inline-block;
    line-height: 30px;
    text-align: center;
    width: 310px;
    color: rgb(35, 137, 206);
  }

  .week-header {
    color: #000000;
    font-size: 14px;
    text-align: center;
    line-height: 30px;
  }

  .week-header div {
    margin: 0;
    padding: 0;
    display: inline-block;
    height: 20px;
    width: 60px;
  }

  .every-day {
    display: inline-block;
    height: 50px;
    width: 60px;
    text-align: center;
    line-height: 50px;
  }

  .other-day {
    color: #ccc;
  }

  .nowDay {
    background: rgb(121, 35, 206);
    border: 1px solid #87c66d;
  }

  .active-day {
    /* padding: 2px */
    /* border-sizing:content-box; */
    border: 2px solid rgb(35, 137, 206);
  }
</style>

完成后的效果

vue+elementUI实现简单日历功能

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

Javascript 相关文章推荐
Javascript面向对象设计一 工厂模式
Dec 20 Javascript
使用JavaScript判断图片是否加载完成的三种实现方式
May 04 Javascript
JS+CSS实现自动改变切换方向图片幻灯切换效果的方法
Mar 02 Javascript
学习AngularJs:Directive指令用法(完整版)
Apr 26 Javascript
JavaScript希尔排序、快速排序、归并排序算法
May 08 Javascript
JS数组操作(数组增加、删除、翻转、转字符串、取索引、截取(切片)slice、剪接splice、数组合并)
May 20 Javascript
jQuery使用正则表达式替换dom元素标签用法示例
Jan 16 Javascript
jQuery返回定位插件详解
May 15 jQuery
React Native仿美团下拉菜单的实例代码
Aug 08 Javascript
vue源码学习之Object.defineProperty对象属性监听
May 30 Javascript
Js中使用正则表达式验证输入是否有特殊字符
Sep 07 Javascript
vue+vant 上传图片需要注意的地方
Jan 03 Vue.js
JavaScript获取时区实现过程解析
Sep 24 #Javascript
小程序点餐界面添加购物车左右摆动动画
Sep 23 #Javascript
原生js实现购物车功能
Sep 23 #Javascript
详解微信小程序动画Animation执行过程
Sep 23 #Javascript
原生js实现分页效果
Sep 23 #Javascript
原生js实现购物车
Sep 23 #Javascript
javascript实现简易计算器功能
Sep 23 #Javascript
You might like
缓存技术详谈―php
2006/12/14 PHP
php feof用来识别文件末尾字符的方法
2010/08/01 PHP
Codeigniter+PHPExcel实现导出数据到Excel文件
2014/06/12 PHP
无需数据库在线投票调查php代码
2016/07/20 PHP
关于Javascript 的 prototype问题。
2007/01/03 Javascript
JS中confirm,alert,prompt函数区别分析
2011/01/17 Javascript
浅析Js(Jquery)中,字符串与JSON格式互相转换的示例(直接运行实例)
2013/07/09 Javascript
js中键盘事件实例简析
2015/01/10 Javascript
js基于myFocus实现轮播图效果
2017/02/14 Javascript
jQuery日程管理控件glDatePicker用法详解
2017/03/29 jQuery
Vue.js学习笔记之常用模板语法详解
2017/07/25 Javascript
VUE+Element UI实现简单的表格行内编辑效果的示例的代码
2018/10/31 Javascript
vue-cli3使用mock数据的方法分析
2020/03/16 Javascript
基于进程内通讯的python聊天室实现方法
2015/06/28 Python
Python可变参数函数用法实例
2015/07/07 Python
python网络编程调用recv函数完整接收数据的三种方法
2017/03/31 Python
详细解读tornado协程(coroutine)原理
2018/01/15 Python
python 脚本生成随机 字母 + 数字密码功能
2018/05/26 Python
解决tensorflow测试模型时NotFoundError错误的问题
2018/07/27 Python
Python使用sklearn库实现的各种分类算法简单应用小结
2019/07/04 Python
python 进程的几种创建方式详解
2019/08/29 Python
python dict如何定义
2020/09/02 Python
pycharm中leetcode插件使用图文详解
2020/12/07 Python
CSS3田字格列表的样式编写方法
2018/11/22 HTML / CSS
东南亚冒险旅行与活动:Adventoro
2019/10/16 全球购物
英国电信商店:BT Shop
2019/12/17 全球购物
size?荷兰官方网站:英国高级运动鞋精品店
2020/07/24 全球购物
Java如何获得ResultSet的总行数
2016/09/03 面试题
网络工程系信息安全技术专业大学生求职信
2013/10/22 职场文书
写给老师的表扬信
2014/01/21 职场文书
班干部竞选演讲稿
2014/04/24 职场文书
教师职位说明书
2014/07/29 职场文书
2015高考寄语集锦
2015/02/27 职场文书
2015年农村党员干部主题教育活动总结
2015/03/25 职场文书
Pytorch 如何实现LSTM时间序列预测
2021/05/17 Python
浅谈GO中的Channel以及死锁的造成
2022/03/18 Golang