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 相关文章推荐
JQuery Tips(3) 关于$()包装集内元素的改变
Dec 14 Javascript
ASP.NET jQuery 实例16 通过控件CustomValidator验证RadioButtonList
Feb 03 Javascript
JavaScript判断页面加载完之后再执行预定函数的技巧
May 17 Javascript
最全的Javascript编码规范(推荐)
Jun 22 Javascript
详细解读Jquery各Ajax函数($.get(),$.post(),$.ajax(),$.getJSON())
Aug 15 Javascript
详解在WebStorm中添加Vue.js单文件组件的高亮及语法支持
Oct 21 Javascript
Vue自定义toast组件的实例代码
Aug 15 Javascript
详解使用jest对vue项目进行单元测试
Sep 07 Javascript
highCharts提示框中显示当前时间的方法
Jan 18 Javascript
vue悬浮可拖拽悬浮按钮的实例代码
Aug 20 Javascript
原生js+css调节音量滑块
Jan 15 Javascript
利用H5api实现时钟的绘制(javascript)
Sep 13 Javascript
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
CodeIgniter框架中_remap()使用方法2例
2014/03/10 PHP
递归实现php数组转xml的代码分享
2015/05/14 PHP
PHP使用xpath解析XML的方法详解
2017/05/20 PHP
利用javascript/jquery对上传文件格式过滤的方法
2009/07/25 Javascript
在父页面调用子页面的JS方法
2013/09/29 Javascript
关于Javascript作用域链的八点总结
2013/12/06 Javascript
浅析jquery的js图表组件highcharts
2014/03/06 Javascript
JQuery实现展开关闭层的方法
2015/02/17 Javascript
jQuery使用$.get()方法从服务器文件载入数据实例
2015/03/25 Javascript
jquery插件star-rating.js实现星级评分特效
2015/04/15 Javascript
Node.js实现JS文件合并小工具
2016/02/02 Javascript
JS实现隐藏同级元素后只显示JS文件内容的方法
2016/09/04 Javascript
jQuery在ie6下无法设置select选中的解决方法详解
2016/09/20 Javascript
jQuery插件DataTable使用方法详解(.Net平台)
2016/12/22 Javascript
js装饰设计模式学习心得
2018/02/17 Javascript
js中Array对象的常用遍历方法详解
2019/01/17 Javascript
小程序根据手机机型设置自定义底部导航距离
2019/06/04 Javascript
typescript nodejs 依赖注入实现方法代码详解
2019/07/21 NodeJs
Vue Extends 扩展选项用法完整实例
2019/09/17 Javascript
vue组件传值的实现方式小结【三种方式】
2020/02/05 Javascript
如何通过JS实现转码与解码
2020/02/21 Javascript
ES6箭头函数和扩展实例分析
2020/05/23 Javascript
使用python BeautifulSoup库抓取58手机维修信息
2013/11/21 Python
python使用Berkeley DB数据库实例
2014/09/26 Python
使用PyInstaller将Python程序文件转换为可执行程序文件
2016/07/08 Python
Python调用C语言的方法【基于ctypes模块】
2018/01/22 Python
Python中常用信号signal类型实例
2018/01/25 Python
Python实现爬虫爬取NBA数据功能示例
2018/05/28 Python
Python格式化字符串f-string概览(小结)
2019/06/18 Python
Python线程协作threading.Condition实现过程解析
2020/03/12 Python
Python坐标轴操作及设置代码实例
2020/06/04 Python
自荐信需注意事项
2014/01/25 职场文书
青年教师典范事迹材料
2014/01/31 职场文书
读书活动总结
2014/04/28 职场文书
学校课外活动总结
2014/05/08 职场文书
使用Pytorch实现two-head(多输出)模型的操作
2021/05/28 Python