這篇文章主要講解了“如何用js實(shí)現(xiàn)日歷功能”,文中的講解內(nèi)容簡(jiǎn)單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來(lái)研究和學(xué)習(xí)“如何用js實(shí)現(xiàn)日歷功能”吧!
創(chuàng)新互聯(lián)建站網(wǎng)絡(luò)公司擁有十載的成都網(wǎng)站開發(fā)建設(shè)經(jīng)驗(yàn),近千家客戶的共同信賴。提供成都做網(wǎng)站、成都網(wǎng)站制作、網(wǎng)站開發(fā)、網(wǎng)站定制、買友情鏈接、建網(wǎng)站、網(wǎng)站搭建、自適應(yīng)網(wǎng)站建設(shè)、網(wǎng)頁(yè)設(shè)計(jì)師打造企業(yè)風(fēng)格,提供周到的售前咨詢和貼心的售后服務(wù)

<template>
<div id="calendar">
<!-- 年份 月份 -->
<div class="month">
<ul>
<!--點(diǎn)擊會(huì)觸發(fā)pickpre函數(shù),重新刷新當(dāng)前日期 @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循環(huán) 每一次循環(huán)用<li>標(biāo)簽創(chuàng)建一天 -->
<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初始化時(shí)調(diào)用
this.initData(null);
},
methods: {
initData: function (cur) {
// var leftcount = 0 // 存放剩余數(shù)量
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個(gè)位置,前面6個(gè)
// 初始化本周
for (var i = this.currentWeek; i >= 0; i--) {
var d2 = new Date(str);
d2.setDate(d2.getDate() - i);
var dayobjectSelf = {}; // 用一個(gè)對(duì)象包裝Date對(duì)象 以便為以后預(yù)定功能添加屬性
dayobjectSelf.day = d2;
this.days.push(dayobjectSelf); // 將日期放入data 中的days數(shù)組 供頁(yè)面渲染使用
}
// 其他周
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); 上月倒數(shù)第二天
// setDate(dx) 參數(shù)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>注意:在運(yùn)行過(guò)程中可能會(huì)出現(xiàn)一點(diǎn)小問(wèn)題,這里我用到了一個(gè)日期處理類庫(kù) moment.js,如需安裝請(qǐng)執(zhí)行以下命令安裝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')
}感謝各位的閱讀,以上就是“如何用js實(shí)現(xiàn)日歷功能”的內(nèi)容了,經(jīng)過(guò)本文的學(xué)習(xí)后,相信大家對(duì)如何用js實(shí)現(xiàn)日歷功能這一問(wèn)題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!
網(wǎng)頁(yè)題目:如何用js實(shí)現(xiàn)日歷功能
轉(zhuǎn)載源于:http://www.chinadenli.net/article6/pgsoog.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供、虛擬主機(jī)、品牌網(wǎng)站建設(shè)、用戶體驗(yàn)、靜態(tài)網(wǎng)站、微信公眾號(hào)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)