vue實(shí)現(xiàn)簡(jiǎn)單的日歷效果
最近在項(xiàng)目中遇到了一個(gè)需求,在vue中創(chuàng)建一個(gè)組件,這個(gè)組件顯示的是當(dāng)前的日期,以及在當(dāng)前的日需要處理的事項(xiàng),處理的事項(xiàng)的信息會(huì)以后端的接口的形式返回。
需求確認(rèn)后,搭建了一下,在這里記錄了一下,現(xiàn)在是簡(jiǎn)單的實(shí)現(xiàn)了這個(gè)需求,但是肯定的是后期需要進(jìn)行修改。
vue就不多說(shuō)了,在vue中使用的是原生JS
效果圖(基本沒(méi)有樣式,很low)

現(xiàn)在實(shí)現(xiàn)的都是最初級(jí)的版本,代碼里面的容錯(cuò),還有一些性能上的處理,并沒(méi)有書(shū)寫(xiě)。
不多說(shuō),上代碼:
首先是vue的html結(jié)構(gòu),很簡(jiǎn)單,里面添加了一些其他時(shí)間形式的顯示,可根據(jù)具體使用場(chǎng)景增刪
<div id="dateContainer"> <div class="date__showNowTime"> 今天是 <span v-text="ynow"></span>年<span v-text="mnow+1"></span>月<span v-text="dnow"></span>日 </div> <div class="nowTime"> <button class="preMon" @click="preMon">上個(gè)月</button> <div class="thisMon"> <span v-text="ynow"></span>/ <span v-text="mnow+1"></span> </div> <button class="nextMon" @click="nextMon">下個(gè)月</button> </div> <table border="1" id="table"> </table> </div>
接下來(lái)是實(shí)現(xiàn)我們的這個(gè)需求的JS代碼的位置了,關(guān)于js的代碼,在代碼里面存在一些注釋,具體可以根據(jù),代碼的注釋進(jìn)行解讀
export default {
data() {
return {
newDate: '',//當(dāng)前的日期的信息
ynow: '',//當(dāng)前的年數(shù)
mnow: '',//當(dāng)前的月份
dnow: '',//當(dāng)前的天數(shù)
firstDay: '',//第一天
firstnow: '',//當(dāng)前的星期
m_days: [],//每個(gè)月的天數(shù)
tr_str: '',//行數(shù)
}
},
methods: {
getDaysInfo() {
var _this = this;
this.sureDate(_this);
},
is_leap(year) {//判斷是不是閏年
return (year%100==0?(year%400==0?1:0):(year%4==0?1:0));
},
//下面的是畫(huà)表格的方法,這個(gè)方法會(huì)根據(jù)數(shù)據(jù)畫(huà)出我們需要的表格
drawTable(jsonHtml) {
var _this = this;
var str = `
<tr class="xiqi">
<td class="isRed">星期日</td>
<td>星期一</td>
<td>星期二</td>
<td>星期三</td>
<td>星期四</td>
<td>星期五</td>
<td class="isRed">星期六</td>
</tr>`;
var idx = '',date_str = '',isRed = '',hasMsg='';
for(var i = 0; i< _this.tr_str; i++) {
str+='<tr>';
for(var k = 0; k < 7; k++) {
idx = i*7+k;
isRed = (k===0||k===6)?"isRed":"";
date_str=idx-_this.firstnow+1;
(date_str<=0 || date_str>this.m_days[this.mnow]) ? date_str=" " : date_str=idx-_this.firstnow+1;
date_str==_this.dnow?hasMsg='<td class="thisDay" date="'+date_str +'"><span class="'+isRed +'">'+date_str+'</span></td>':hasMsg='<td date="'+date_str +'"><span class="'+isRed +'">'+date_str+'</span></td>';
for(var l = 0, len = jsonHtml.length; l < len; l++) {
if(date_str== jsonHtml[l].date) {
var newStr = '<p>'+jsonHtml[l].msg +'</p>';
date_str==_this.dnow?hasMsg='<td class="thisDay" date="'+date_str +'"><span class="'+isRed +'">'+date_str+'</span>'+ newStr+'</td>':hasMsg='<td date="'+date_str +'"><span class="'+isRed +'">'+date_str+'</span>'+ newStr+'</td>';
}
}
str+=hasMsg;
}
str+='</tr>';
}
var table = document.getElementById('table');
table.innerHTML = str;
},
//兩個(gè)參數(shù)代表的含義分別是this對(duì)象以及判斷當(dāng)前的操作是不是在進(jìn)行月份的修改
sureDate(_this,other) {
this.newDate = new Date();
this.ynow = this.newDate.getFullYear();
if(!other) {
this.mnow=this.newDate.getMonth(); //月份
}
this.dnow=this.newDate.getDate(); //今日日期
this.firstDay = new Date(this.ynow,this.mnow,1);
this.firstnow=this.firstDay.getDay();
this.m_days = [31,28+this.is_leap(this.ynow),31,30,31,30,31,31,30,31,30,31];
this.tr_str = Math.ceil((_this.m_days[this.mnow] + this.firstnow)/7);
this.showMsg();
},
preMon() {
var _this = this;
this.mnow--;
this.sureDate(_this,"up");
},
nextMon() {
var _this = this;
this.mnow++;
this.sureDate(_this,"next");
},
//通過(guò)接口返回的是我們當(dāng)前的月份對(duì)應(yīng)在日歷中需要處理的事項(xiàng)
showMsg() {
var jsonHtml = [{
date: 2,
msg: '吃飯'
},
{
date: 3,
msg: '睡覺(jué)'
},
{
date: 4,
msg: '打豆豆'
},
{
date: 6,
msg: '豆豆不在家'
},
{
date: 12,
msg: '~~~~~'
},
{
date: 15,
msg: '怎么辦~~~~'
},
{
date: 20,
msg: '找豆豆'
}];
this.drawTable(jsonHtml)
}
},
mounted() {
//畫(huà)出當(dāng)前的月份的天數(shù)對(duì)應(yīng)的表格
this.getDaysInfo();
//進(jìn)行數(shù)據(jù)的獲取,顯示到對(duì)應(yīng)的位置
}
js的代碼目前的來(lái)說(shuō)也就是這么多,里面只是初步實(shí)現(xiàn)了功能,其他什么都沒(méi)進(jìn)行處理~~~~
具體的實(shí)現(xiàn)可以訪問(wèn)我的github獲取--點(diǎn)擊打開(kāi)鏈接
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- VUE實(shí)現(xiàn)日歷組件功能
- vue實(shí)現(xiàn)一個(gè)炫酷的日歷組件
- Vue.js創(chuàng)建Calendar日歷效果
- 基于Vue2-Calendar改進(jìn)的日歷組件(含中文使用說(shuō)明)
- Vue實(shí)現(xiàn)日歷小插件
- Vue編寫(xiě)可顯示周和月模式的日歷 Vue自定義日歷內(nèi)容的顯示
- 基于Vue實(shí)現(xiàn)支持按周切換的日歷
- vue+elementUI實(shí)現(xiàn)簡(jiǎn)單日歷功能
- vue實(shí)現(xiàn)日歷備忘錄功能
- 使用Vue實(shí)現(xiàn)簡(jiǎn)單日歷效果
相關(guān)文章
簡(jiǎn)單學(xué)習(xí)vue指令directive
這篇文章主要和大家一起簡(jiǎn)單學(xué)習(xí)一下vue指令:directive,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-11-11
在vue項(xiàng)目中使用codemirror插件實(shí)現(xiàn)代碼編輯器功能
這篇文章主要介紹了在vue項(xiàng)目中使用codemirror插件實(shí)現(xiàn)代碼編輯器功能(代碼高亮顯示及自動(dòng)提示),本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-08-08
詳解vue-cli腳手架build目錄中的dev-server.js配置文件
這篇文章主要介紹了詳解vue-cli腳手架build目錄中的dev-server.js配置文件,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-11-11
vue-router路由懶加載及實(shí)現(xiàn)方式
這篇文章主要介紹了vue-router路由懶加載及實(shí)現(xiàn)方式,路由懶加載的主要作用是將 路由對(duì)應(yīng)的組件打包成一個(gè)個(gè)的js代碼塊,只有在這個(gè)路由被訪問(wèn)到的時(shí)候,才會(huì)加載對(duì)應(yīng)組件的代碼塊,需要的朋友可以參考下2022-12-12
解決vue項(xiàng)目router切換太慢問(wèn)題
這篇文章主要介紹了解決vue項(xiàng)目router切換太慢問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-07-07
vite+vue3項(xiàng)目啟動(dòng)報(bào)錯(cuò)Unexpected?“%“問(wèn)題及解決
這篇文章主要介紹了vite+vue3項(xiàng)目啟動(dòng)報(bào)錯(cuò)Unexpected?“%“問(wèn)題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-03-03
vue中的事件修飾符once,prevent,stop,capture,self,passive
這篇文章主要介紹了vue中的事件修飾符once,prevent,stop,capture,self,passive,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-04-04
Vue transition實(shí)現(xiàn)點(diǎn)贊動(dòng)畫(huà)效果的示例
點(diǎn)贊動(dòng)畫(huà)是網(wǎng)頁(yè)評(píng)論中常見(jiàn)的功能,本文將介紹如何用vue實(shí)現(xiàn)這一效果。點(diǎn)贊時(shí)愛(ài)心縮小變大,變大時(shí)略微大一點(diǎn)再變正常,取消點(diǎn)贊時(shí)愛(ài)心無(wú)動(dòng)畫(huà),同時(shí)數(shù)字滾動(dòng),+1 時(shí)向上滾動(dòng),-1 時(shí)向下滾動(dòng)2021-05-05

