站長資訊網
        最全最豐富的資訊網站

        教你用js實現日歷功能(附代碼示例)

        教你用js實現日歷功能(附代碼示例)


        示例代碼

        <template>   <div id="calendar">     <!-- 年份 月份 -->     <div class="month">       <ul>         <!--點擊會觸發pickpre函數,重新刷新當前日期 @click(vue v-on:click縮寫) -->         <li           class="arrow hands el-icon-arrow-left"           @click="pickPre(currentYear, currentMonth)"         ></li>         <li class="year-month">           <span class="choose-year">{{ currentYear }}年</span>           <span class="choose-month">{{ currentMonth }}月</span>         </li>         <li           class="arrow hands el-icon-arrow-right"           @click="pickNext(currentYear, currentMonth)"         ></li>       </ul>     </div>     <!-- 星期 -->     <ul class="weekdays">       <li>日</li>       <li>一</li>       <li>二</li>       <li>三</li>       <li>四</li>       <li>五</li>       <li>六</li>     </ul>     <!-- 日期 -->     <ul class="days">       <!-- 核心 v-for循環 每一次循環用<li>標簽創建一天 -->       <li v-for="(dayobject, i) in days" :key="i">         <!--本月-->         <!--如果不是本月  改變類名加灰色-->         <span           v-if="dayobject.day.getMonth() + 1 != currentMonth"           class="other-month"           @click="getDayTime(dayobject.day)"         >           {{ 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="newDate == newsss ? 'active' : ''"             @click="getDayTime(dayobject.day, i)"           >             {{ dayobject.day.getDate() }}           </span>           <span             v-else             @click="getDayTime(dayobject.day, i)"             :class="newDate == dayobject.day ? 'active' : ''"           >             {{ dayobject.day.getDate() }}           </span>         </span>       </li>     </ul>   </div> </template> <script> export default {   data() {     return {       currentDay: 1,       currentMonth: 1,       currentYear: 2021,       currentWeek: 1,       days: [],       newDate: this.$formatDateYMD(new Date()),       newsss: this.$formatDateYMD(new Date()),     };   },   created: function () {     // 在vue初始化時調用     this.initData(null);   },   methods: {     initData: function (cur) {       // var leftcount = 0 // 存放剩余數量       var date;       if (cur) {         date = new Date(cur);       } else {         var now = new Date();         var d = new Date(this.formatDate(now.getFullYear(), now.getMonth(), 1));         d.setDate(35);         date = new Date(this.formatDate(d.getFullYear(), d.getMonth() + 1, 1));       }       this.currentDay = date.getDate();       this.currentYear = date.getFullYear();       this.currentMonth = date.getMonth() + 1;       this.currentWeek = date.getDay(); // 1...6,0       if (this.currentWeek === 0) {         this.currentWeek = 7;       }       var str = this.formatDate(this.currentYear, this.currentMonth, this.currentDay);       this.days.length = 0;       // 今天是周日,放在第一行第7個位置,前面6個       // 初始化本周       for (var i = this.currentWeek; i >= 0; i--) {         var d2 = new Date(str);         d2.setDate(d2.getDate() - i);         var dayobjectSelf = {}; // 用一個對象包裝Date對象  以便為以后預定功能添加屬性         dayobjectSelf.day = d2;         this.days.push(dayobjectSelf); // 將日期放入data 中的days數組 供頁面渲染使用       }       // 其他周       for (var j = 1; j <= 35 - this.currentWeek; j++) {         var d3 = new Date(str);         d3.setDate(d3.getDate() + j);         var dayobjectOther = {};         dayobjectOther.day = d3;         this.days.push(dayobjectOther);       }     },     getDayTime(el, index) {       this.newDate = el;       console.log(el)     },     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.initData(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.initData(this.formatDate(d.getFullYear(), d.getMonth() + 1, 1));     },     // 返回 類似 2022-05-17 格式的字符串     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> <style> #calendar {   font-size: 12px;   width: 100%;   margin: 0 auto;   background: #ecf6ff; } .month {   width: 100%;   color: #333333; } .month ul {   margin: 0;   padding: 0;   display: flex;   justify-content: space-between;   height: 35px; } .year-month {   display: flex;   align-items: center;   justify-content: space-around;   margin-top: 10px; } .choose-month {   text-align: center;   font-size: 12px; } .arrow {   padding: 15px;   color: #999999; }   .month ul li {   font-size: 12px;   text-transform: uppercase;   letter-spacing: 3px; } .weekdays {   margin: 0;   padding: 10px;   display: flex;   flex-wrap: wrap;   color: #999;   justify-content: space-around; } .weekdays li {   display: inline-block;   width: 13.6%;   text-align: center; } .days {   padding: 10px;   margin: 0;   display: flex;   flex-wrap: wrap; } .days li {   list-style-type: none;   display: inline-block;   width: 14.2%;   text-align: center;   padding-bottom: 4px;   padding-top: 10px;   font-size: 12px;   color: #000; } .days li .active {   padding: 6px 10px;   border-radius: 50%;   background: #00b8ec;   color: #fff; } .days li .other-month {   padding: 5px;   color: gainsboro; } .days li:hover > span > span {   padding: 6px 10px;   border-radius: 50%;   background: #00b8ec;   color: #fff;   cursor: pointer; } </style>

        注意:在運行過程中可能會出現一點小問題,這里我用到了一個日期處理類庫 moment.js,如需安裝請執行以下命令安裝moment.js插件,在main.js 全局配置。

        npm install moment --save

        main.js

        import Vue from 'vue' import Moment from 'moment'; Vue.prototype.$Moment = Moment; Vue.prototype.$formatDateYMD = function(date) {     return Moment(date).format('YYYY-MM-DD') }

        贊(0)
        分享到: 更多 (0)
        網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
        主站蜘蛛池模板: 国内精品久久国产大陆| 精品四虎免费观看国产高清午夜| 久久99精品国产自在现线小黄鸭 | 国产亚洲精品精品国产亚洲综合| 日韩精品真人荷官无码| 欧美成人精品网站播放 | 久久精品夜色噜噜亚洲A∨| 久久国产精品-久久精品| 久久国产精品一国产精品金尊| 久久久99精品一区二区| 国产69精品久久久久99尤物| 国产精品高清视亚洲精品| 久久夜色精品国产欧美乱| 在线精品国产一区二区三区 | 日韩精品免费在线视频| 2021国产精品成人免费视频| 亚洲精品国产精品乱码在线观看| 国产成人精品久久一区二区三区| 香蕉国产精品频视| 久久99精品久久只有精品| 亚洲精品人成无码中文毛片| 精品乱子伦一区二区三区高清免费播放| 欧美精品亚洲精品日韩| 国产午夜精品一区理论片| 成人国产精品一区二区网站| 国产精品熟女高潮视频| 久久99精品国产麻豆| 国产综合色在线精品| 精品久久久久久无码专区| 久久成人国产精品| 国产精品人人爽人人做我的可爱 | 无码囯产精品一区二区免费| 午夜在线视频91精品| 亚洲av午夜精品一区二区三区| 免费精品国自产拍在线播放| 久久99精品久久久久久不卡| 精品欧美一区二区三区久久久| 国产亚洲午夜高清国产拍精品| 国产精品哟女在线观看| 精品多毛少妇人妻AV免费久久| 精品无码久久久久久国产 |