使用Vue实现简单日历效果

2022-08-30 11:11:45

使用Vue实现简单的日历,供大家参考,具体内容如下原理分析:1.获取当前时间2.显示当前时间3.点击增加和减少月份4.大月和小月的天数效果演示初始样式(显示现在的日期时间)增加一个月在程序开始之前一定...

使用vue实现简单的日历,供大家参考,具体内容如下

原理分析:

1.获取当前时间
2.显示当前时间
3.点击增加和减少月份
4.大月和小月的天数

效果演示

初始样式(显示现在的日期时间)

使用Vue实现简单日历效果

增加一个月

使用Vue实现简单日历效果

在程序开始之前一定注意:

引入Vue.js架包

代码演示

Body内容

<script type="text/x-template" id="calendar">
 <!-- 年份-->
  <div id="year">
     <!--月份 -->
        <div class="month">
          <ul>
            <li class="arrow" @click="pickPre(currentYear,currentMonth)">❮</li>
            <li class="year-month" @click="pickYear(currentYear,currentMonth)">
              <span class="choosen-year" style="color:blue">{{ currentYear }}</span>
              <span class="choosen-month" style="color:blue">{{ currentMonth }}月</span>
            </li>
            <li class="arrow" @click="pickNext(currentYear,currentMonth)">❯</li>
          </ul>
        </div>
        <!-- 星期 -->
        <ul class="weekdays">
          <li>一</li>
          <li>二</li>
          <li>三</li>
          <li>四</li>
          <li>五</li>
          <li style="color:red">六</li>
          <li style="color:red">日</li>
        </ul>
        <!-- 日期 -->
        <ul class="days">
          <!-- 循环-->
          <li v-for="dayobject in days">
            <!--本月-->
  
            <span v-if="dayobject.day.getMonth()+1 != currentMonth" class="other-month">{{ dayobject.day.getDate() }}</span>
  
            <!--判断天数是否正确-->
            <span v-else>
              <!--今天-->
              <span v-if="dayobject.day.getFullYear() == new Date().getFullYear() && dayobject.day.getMonth() == new Date().getMonth() && dayobject.day.getDate() == new Date().getDate()"
                class="active">{{ dayobject.day.getDate() }}</span>
              <span v-else>{{ dayobject.day.getDate() }}</span>
            </span>
  
          </li>
        </ul>
      </div>
    </script>
<div id="app">
  <calendar></calendar>
</div>

css样式

* {
    margin: 0;
    padding: 0;
  }
  
  
  /*日历*/
  
  #calendar {
    width: 98%;
    border: 2px solid #A4A7B0;
    height: 335px;
    marginandroid-left: 0.5%;
  }
  
  .month {
    width: 92%;
    height: 48px;
    border: 2px solid #FFFFFF;
    margin-left: 3%;
    margin-top: 20px;
  }
  
  .month ul {
    margin: 0;
    padding: 0;
    display: Flex;
    margin-top: 11px;
    justify-content: space-between;
  }
  
  .year-month {
    flex-direction: column;
    align-items: center;
    justify-content: space-around;
  }
  
  .choosen-year {
    padding: 0 20px;
    font-size: 16px;
    font-weight: 200;
  }
  
  .choosen-month {
    text-align: center;
    font-size: 16px;
    font-weight: 200;
  }
  
  .arrow {
    width: 3%;
    height: 25px;
  }
  
  .arrow1 {
    background: url(left.png) no-repeat 0 0 /100% 100%;
    margin-left: 44px;
  }
  
  .arrow2 {
    background: url(right.png) no-repeat 0 0 /100% 100%;
    margin-right: 44px;
  }
  
  .month ul li {
    color: #999;
    font-size: 20px;
    text-transform: uppercase;
    letter-spacing: 3px;
    list-style: none;
  }
  
  .weekdays {
    margin: 0;
    color: #FFFFFF;
    background: #A4A7B0;
    width: 96.6%;
    margin-top: 26px;
    height: 34px;
    line-height: 34px;
    margin-left: 2.2%;
  }
  
  .weekdays li {
    display: inline-block;
    text-align: center;
    color: #11616f;
    font-size: 14px;
    font-weight: 100;
    width: 12.7%;
  }
  
  .days {
    padding: 0;
    margin: 0;
    display: flex;
    flex-wrap: wrap;
    justify-content: space-around;
  }
  
  .days li {
    list-style-type: none;
    display: inline-block;
    width: 14.2%;
    text-align: center;
    padding-bottom: 3px;
    padding-top: 7px;
    font-size: 12.78px;
    color: rgb(14, 220, 235);
    font-weight: 200;
  }
  
  .days li span span {
    height: 29.5px;
    width: 27px;
    line-height: 29.5px;
    display: inline-block;
  }
  
  .days li .class-30 {
    background: url(bg_30.png) no-repeat 0 0 /100% 100%;
  }
  
  .days li .class-60 {
    background: url(bg_60.png) no-repeat 0 0 /100% 100%;
  }
  
  .days li .class-3060 {
    background: url(bg_3060.png) no-repeat 0 0 /100% 100%;
  }
  
  .days li .other-month {
    padding: 5px;
    color: #84a8ae;
  }

Vue.js内容

Vue.component("calendar", {
   template: "#calendar",
   data: function() {
    return {
     currentDay: 1,
     currentMonth: 1,
     currentYear: 1970,
     currentWeek: 1,
     days: [],
    }
   },
   created() {
    let that = this;
    that.initData(null);
   },
   methods: {
    initData: function(cur) {
     let that = this;
     let leftcount = 0;
     let date;
     if (cur) {
      date = new Date(cur);
     } else {
      let now = new Date();
      let d = new Date(that.formatDate(now.getFullYear(), now.getMonth(), 1));
      d.setDate(35);
      date = new Date(that.formatDate(d.getFullYear(), d.getMonth() + 1, 1));
     }
     that.currentDay = date.getDate();
     that.currentYear = date.getFullYear();
     that.currentMonth = date.getMonth() + 1;
     that.currentWeek = date.getDay(); // 1...6,0
     if (that.currentWeek == 0) {
      that.currentWeek = 7;
     }
     let str = that.formatDate(that.currentYear, that.currentMonth, that.currentDay);
     that.days.length = 0;
     //初始化
http://www.cppcns.com     for (let i = that.currentWeek - 1; i >= 0; i--) {
      let d = new Date(str);
      d.setDate(d.getDate() - i);
      let dayobject = {};
      dayobject.day = d;
      that.days.push(dayobject);
     }
     for (let i = 1; i <= 35 - that.currentWeek; i++) {
      let d = new Date(str);
      d.setDate(d.getDate() + i);
      let dayobject = {};
      dayobject.day = d;
      that.days.push(dayobject);
     }

    },
    pickPre: function(year, month) {
     let that = this;
  javascript   let d = new Date(that.formatDate(year, month, 1));
     d.setDate(0);
     that.initData(that.formatDate(d.getFullYear(), d.getMonth() + 1, 1));
    },
    pickNext: function(year, month) {
     let that = this;
     let d = new Date(that.formatDate(year, month, 1));
     d.setDate(35);
     that.initData(that.formatDate(d.getFullYear(), d.getMonth() + 1, 1));
    },
    pickYear: function(year, month) {
     alert(year + "," + month);
    },
    // 返回 类似 2016-01-02 格式的字符串
    formatDate: function(year, month, day) {
     let y = year;
     let m = month;
     if (m < 10) m = "0" + m;
     let d = day;
     if (d < 10) d = "0" + d;
     return y + "-" + m + "-" + d
    },
   }
  })
  let vm = new Vue({
   el: '#app',
  })

到此程序结束。

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