首页 > 编程 > JavaScript > 正文

vue实现日历备忘录功能

2019-11-19 11:16:20
字体:
来源:转载
供稿:网友

用vue写了个日历备忘录的功能,省略了备忘录的增删改查功能。 

 

直接上代码

<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>备忘录</title> <style type="text/css">  #box{   width: 469px;  }  /*日历*/   *{    padding: 0;    margin: 0;   }   li{    list-style: none;   }   #calendar{    width:380px;    margin: 40px auto 0;    padding-bottom: 30px;    border-bottom: 1px solid #eee;   }   .pickDay{    margin: 0 auto;    width: 100px;    height: 65px;    text-align: center;   }   .pickDay span{    font-size: 12px;    color: #989898;   }   .pickDay span:first-of-type{    font-size: 72px;    color: #789AF7;   }   .month {    width: 100%;   }    .month ul {    margin: 29px 0 25px;    display: flex;    justify-content: center;   }    .year-month {    width: 180px;    display: flex;    align-items: center;    justify-content: center;   }   .choose-year {    font-size: 14px;    color: #989898;   }   .choose-month {    text-align: center;    color: #989898;    font-size: 14px;   }   .arrow {    width: 28px;    height: 28px;    text-align: center;   }   .arrow:hover {    background: rgba(100, 2, 12, 0.1);    cursor: pointer;   }   .month ul li {    color: #789AF7;    font-size: 20px;   }   .weekdays {    width: 270px;    margin: 0 auto 7.5px;    display: flex;    flex-wrap: wrap;    color: #808080;    justify-content: space-around;   }   .weekdays li {    display: inline-block;    font-size: 16px;    color: #808080;     width: 26px;    text-align: center;   }   .days {    width: 270px;     margin: 0 auto;    display: flex;    flex-wrap: wrap;    justify-content: space-around;    background: #FFFFFF;   }   .days li {    position: relative;    display: inline-block;    width: 14.2%;    text-align: center;    padding-bottom: 7.5px;    padding-top: 7.5px;      color: #999;    cursor: pointer;   }   .days .momo_mark{    position: absolute;    right: 0;    top: 10px;    width: 5px;    height: 5px;    border-radius: 50%;    background: #7699F8;   }   .days li span{    font-size: 16px;   }   .days li .active {    color: #789AF7;   }    .days li .other-month {    padding: 5px;    color: #E6E6E6;   }   .days li:hover{    color: #789AF7;   }    .days li:hover .other-month{    color: #789AF7;   }  /*备忘录*/   #memo{    width: 400px;    margin: 30px 0 0 20px;   }   #memo h4{    text-indent: 20px;    height: 20px;    line-height: 20px;    font-size: 14px;    color: #7699F8;   }   .memo_list li{    margin-top: 12px;   }   .memo_list .memo_list_s{    width: 399px;    }   .memo_list .memo_list_s:hover{    background: #EEE;   }   .memo_list .memo_list_s:hover .circle{    background: #F84848;   }   .memo_list .memo_list_s:hover #edit_memo{    background: url(../assets/edit_active.png) no-repeat;   }   .memo_list .memo_list_s:hover #del_memo{    background: url(../assets/del_active.png) no-repeat;   }   .circle{    display: inline-block;    width: 5px;    height: 5px;    border-radius: 50%;    background: #7699F8;    vertical-align: top;    margin: 12px 5px 0px 9px;   }   .memo_list_mont{    display: inline-block;    width: 323px;    min-height: 30px;    line-height: 30px;    font-size: 14px;    color: #666666;   }   .memo_operate{    display: inline-block;    vertical-align: top;    font-size: 0;    padding-top: 9px;   }   .memo_operate button{    width: 12px;    height: 12px;    margin-right: 10px;    background: #fff;    border: none;   }   #addMemo{    width: 96px;    height: 28px;    line-height: 28px;    color: #789BF8;    background: #fff;    border: 1px solid #789BF8;    border-radius: 2px;    margin: 25px 0 0 20px;   }   .memo_cont{    width: 310px;    background: #7699F8;    border-radius: 2px;    margin-left: 20px;    margin-top: 15px;    padding: 37px 30px 24px 30px;   }   .memo_edit{    width: 100%;    min-height: 140px;    line-height: 28px;    color: #fff;    font-size: 14px;    background: url(../assets/bgborder.png) repeat-y;    outline: none;    border: none;    resize:none;   }   .edit_operate{    padding-top: 20px;    display: flex;    justify-content: flex-end;   }   .edit_operate button{    width: 20px;    height: 20px;    margin-left: 16px;   }   #cancel_edit{    background: url(../assets/error.png) center center no-repeat;   }   #save_edit{    background: url(../assets/right.png) center center no-repeat;   }  /*动画*/   .fade-enter-active, .fade-leave-active {    transition: all 0.5s ease-in;   }   .fade-enter, .fade-leave-to{    opacity: 0;   } </style></head><body> <div id="box">  <div id="calendar" v-if="pickDay != null">   <div class="pickDay">    <span>{{pickDay}}</span><span>日</span>   </div>   <!-- 年份 月份 -->   <div class="month">    <ul>     <li class="arrow" @click="pickPre(currentYear,currentMonth)">❮</li>     <li class="year-month" @click="pickYear(currentYear,currentMonth)">     <span class="choose-year">{{ currentYear }}</span>     <span class="choose-month"> - {{ currentMonth }}</span>     </li>     <li class="arrow" @click="pickNext(currentYear,currentMonth)">❯</li>    </ul>   </div>   <!-- 星期 -->   <ul class="weekdays">    <li>MO</li>    <li>TU</li>    <li>WE</li>    <li>TH</li>    <li>FR</li>    <li style="color:red">SA</li>    <li style="color:red">SU</li>   </ul>   <!-- 日期 -->   <ul class="days">    <li @click="pick(day.day)" v-for="day in days">     <!--本月-->     <span class="momo_mark" v-if="day.memo_type"></span>     <span v-if="day.day.getMonth()+1 != currentMonth" class="other-month">{{ day.day.getDate() }}</span>     <span v-else>      <!--今天-->      <span v-if="day.day.getFullYear() == new Date().getFullYear() && day.day.getMonth() == new Date().getMonth() && day.day.getDate() == new Date().getDate()" class="active">{{ day.day.getDate() }}</span>      <span v-else>{{ day.day.getDate() }}</span>     </span>    </li>   </ul>  </div>  <div id="memo">   <h4>备忘录</h4>   <ul class="memo_list" v-if="currentMemo">    <li v-for="(memo,index) in currentMemo" :key="index">     <div class="memo_list_s">      <span class="circle"></span>      <div class="memo_list_mont">{{memo.cont}}</div>     </div>    </li>   </ul>  </div> </div></body> <script src="https://cdn.bootcss.com/vue/2.5.11/vue.js"></script> <script type="text/javascript">  var vm = new Vue({   el : "#box",   data : {    currentDay: 1,    currentMonth: 1,    currentYear: 1970,    currentWeek: 1,    days: [],    pickDay : null,    currentMemo : null,    memo_list :["2018-05-11","2018-05-31"]//时间格式必须为xxxx-xx-xx;   },   created: function() {    this.initCalendar(null);    },   methods:{    initCalendar: function(cur){     if (cur) {      var date = new Date(cur);     } else {      var date = new Date();      this.pickDay = date.getDate();     }     this.currentYear = date.getFullYear();     this.currentMonth = date.getMonth() + 1;          var str = this.formatDate(this.currentYear , this.currentMonth, 1);     this.currentWeek = new Date(str).getDay() == 0 ? 7 : new Date(str).getDay();     this.days.length = 0;//初始化数组     for (var i = this.currentWeek - 1; i >= 0; i--) {        var d = new Date(str);      var memo_type = false;      d.setDate(d.getDate() - i);           for (var j = 0; j < this.memo_list.length; j++) {       var memoTime = new Date(this.memo_list[j]).getTime();       if( d.getTime() == memoTime){        memo_type = true;       }           }      this.days.push({day:d,memo_type:memo_type});     }     for (var i = 1; i <= 35 - this.currentWeek; i++){      var d = new Date(str);      d.setDate(d.getDate() + i);      var memo_type = false;      for (var j = 0; j < this.memo_list.length; j++) {       var memoTime = new Date(this.memo_list[j]).getTime()       if( d.getTime() == memoTime){        memo_type = true;       }           }      this.days.push({day:d,memo_type:memo_type});     }    },    pick: function(date){     this.pickDay = date.getDate();     this.initCalendar(this.formatDate(date.getFullYear() , date.getMonth() + 1, 1));     var curPickDay = this.formatDate(date.getFullYear() , date.getMonth() + 1, date.getDate())     // 数据发送请求拿回即可,这里我就写死了,随便写两个样例     if(curPickDay == "2018-05-11"){            this.currentMemo = [{       cont :"setDate() 方法用于设置一个月的某一天。该方法什么都不返回"      },{       cont :"getTime() 方法可返回距 1970 年 1 月 1 日之间的毫秒数。"      }]     }else if(curPickDay == "2018-05-31"){      this.currentMemo = [{       cont :"getDay() 方法可返回表示星期的某一天的数字。返回值是 0(周日) 到 6(周六) 之间的一个整数"      },{       cont :"setDate(0); 上月最后一天;setDate(-1); 上月倒数第二天;setDate(dx) 参数dx为 上月最后一天的前后dx天"      }]     }else{      this.currentMemo= null;     }    },    pickPre: function(year, month){     // setDate(0); 上月最后一天     // setDate(-1); 上月倒数第二天     // setDate(dx) 参数dx为 上月最后一天的前后dx天     var d = new Date(this.formatDate(year , month , 1));     d.setDate(0);     this.initCalendar(this.formatDate(d.getFullYear(),d.getMonth() + 1,1));    },    pickNext: function(year, month){     var d = new Date(this.formatDate(year , month , 1));     d.setDate(35);     this.initCalendar(this.formatDate(d.getFullYear(),d.getMonth() + 1,1));    },    // 返回 类似 2016-01-02 格式的字符串    formatDate: function(year,month,day){     var y = year;     var m = month;     if(m<10) m = "0" + m;     var d = day;     if(d<10) d = "0" + d;     return y+"-"+m+"-"+d    }   }  }) </script></html>

欢迎大家提意见,提BUG

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持武林网。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表