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 相关文章推荐
阻止子元素继承父元素事件具体思路及实现
May 02 Javascript
加随机数引入脚本不让浏览器读取缓存
Sep 04 Javascript
jquery mobile页面跳转后样式丢失js失效的解决方法
Sep 06 Javascript
jQuery实现textarea自动增长宽高的方法
Dec 18 Javascript
关于数据与后端进行交流匹配(点亮星星)
Aug 03 Javascript
Vue.js Ajax动态参数与列表显示实现方法
Oct 20 Javascript
浅谈jQuery hover(over, out)事件函数
Dec 03 Javascript
vue-ajax小封装实例
Sep 18 Javascript
让bootstrap的carousel支持滑动滚屏的实现代码
Nov 27 Javascript
element ui table 增加筛选的方法示例
Nov 02 Javascript
vue 实现强制类型转换 数字类型转为字符串
Nov 07 Javascript
JavaScript实现队列结构过程
Dec 06 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
php和js如何通过json互相传递数据相关问题探讨
2013/02/26 PHP
解析PHP中intval()等int转换时的意外异常情况
2013/06/21 PHP
CentOS6.5 编译安装lnmp环境
2014/12/21 PHP
php中的钩子理解及应用实例分析
2019/08/30 PHP
javascript replace()正则替换实现代码
2010/02/26 Javascript
ImageZoom 图片放大镜效果(多功能扩展篇)
2010/04/14 Javascript
jquery 提交值不为空的元素示例代码
2013/05/10 Javascript
JavaScript创建对象的写法
2013/08/29 Javascript
JavaScript实现点击按钮就复制当前网址
2015/12/14 Javascript
javascript新闻跑马灯实例代码
2020/07/29 Javascript
分享JS数组求和与求最大值的方法
2016/08/11 Javascript
Node.js的基本知识简单汇总
2016/09/19 Javascript
ionic选择多张图片上传的示例代码
2017/10/10 Javascript
深入浅析Vue.js中 computed和methods不同机制
2018/03/22 Javascript
如何使用50行javaScript代码实现简单版的call,apply,bind
2019/08/14 Javascript
layui动态表头的实现代码
2019/08/22 Javascript
微信小程序实现同时上传多张图片
2020/02/03 Javascript
浅谈Python浅拷贝、深拷贝及引用机制
2016/12/15 Python
Python编程实现删除VC临时文件及Debug目录的方法
2017/03/22 Python
使用 Python 实现微信公众号粉丝迁移流程
2018/01/03 Python
python查询mysql,返回json的实例
2018/03/26 Python
django 发送手机验证码的示例代码
2018/04/25 Python
pycharm: 恢复(reset) 误删文件的方法
2018/10/22 Python
OpenCV python sklearn随机超参数搜索的实现
2020/01/17 Python
关于Python字符串显示u...的解决方式
2020/03/06 Python
Python爬虫获取豆瓣电影并写入excel
2020/07/31 Python
使用scrapy ImagesPipeline爬取图片资源的示例代码
2020/09/28 Python
基于python爬取梨视频实现过程解析
2020/11/09 Python
HTML5 Canvas如何实现纹理填充与描边(Fill And Stroke)
2013/07/15 HTML / CSS
PHP两种查询函数array/row的区别
2013/06/03 面试题
员工年终自我评价
2014/09/14 职场文书
2014年教师党员自我评价范文
2014/09/22 职场文书
市委常委班子党的群众路线教育实践活动整改措施
2014/10/02 职场文书
银行党员批评与自我批评
2014/10/15 职场文书
熟背这些句子,让您的英语口语突飞猛进(135句)
2019/09/06 职场文书
教你部署vue项目到docker
2022/04/05 Vue.js