摘要:一周有天,返回的數(shù),如果上月最后一天是星期二,看下的日歷是補了三天,我們得到的是,所以為此,之后就是填充最后一天,用處理一下再排序,上一個月的數(shù)據(jù)就得到了。
完成圖 思路每天進步一點點。寫個簡單的小日歷,依舊用vue,方便
本月的天數(shù)
截取上月的天數(shù)
截取下月天數(shù)
今天給一個樣式
上月、下月切換
回到今天
大致需要完成的東西有以上東西
html部分本月天數(shù)<{{year}}-{{month}}今
>{{item}}{{item}}{{item}}{{item}}
我主要是將日歷的天數(shù)分成了3部分,創(chuàng)建了3個數(shù)組來保存
data(){ return{ prev:[], current:[], next:[], year:"", month:"", weeks:["日","一","二","三","四","五","六"], } },
接下來獲取本月的天數(shù)
methods:{ currentInfo(){ let date=new Date() this.year=date.getFullYear()//當(dāng)年 this.month=date.getMonth()+1//當(dāng)月 let currentDate=new Date(this.year,this.month,0)//當(dāng)月最后一天 let currentArr=[...Array(currentDate.getDate()).fill(1)]//創(chuàng)建當(dāng)月數(shù)組,填充1 this.current=currentArr.map((item,index)=>item+index)//做數(shù)組處理 },
當(dāng)我們在創(chuàng)建本月數(shù)組的時候,我們只需要知道本月最后一天是多少號,便知道創(chuàng)建一個多少位的數(shù)組。
在獲取時,有很多人使用了五花八門的方法,也有的人干脆為最后一天建立兩個12位的數(shù)組,將最后一天放進去,先判斷是不是閏年,再用數(shù)組取最后一天的值。
但其實new Date(Y,M,D),取D為0的時候能夠取到上一月的最后一天,也無需判斷是否是閏年,我偶然間發(fā)現(xiàn)的。有興趣的朋友可以追根溯源去找找原因。
上月let prevDate=new Date(this.year,this.month-1,0)//上月最后一天 let prevArr=[...Array(prevDate.getDay()+1).fill(prevDate.getDate())]//創(chuàng)建上月數(shù)組,填充最后一天 this.prev=prevArr.map((item,index)=>item-index).sort((a,b)=>a-b)//做數(shù)組處理
這里先是取到上月最后一天,再取星期,這樣就能計算出上月需要有幾位補充到當(dāng)月,取當(dāng)月第一天也可以。一周有7天,返回0~6的數(shù),如果上月最后一天是星期二,看下windows的日歷是補了三天,我們prevDate.getDay()得到的是2,所以為此+1,之后就是填充最后一天,用map處理一下再排序,上一個月的數(shù)據(jù)就得到了。
下月補充進來的數(shù)據(jù)畢竟簡單,就不多說。完整代碼如下:
currentInfo(){ let date=new Date() this.year=date.getFullYear()//當(dāng)年 this.month=date.getMonth()+1//當(dāng)月 let currentDate=new Date(this.year,this.month,0)//當(dāng)月最后一天 let currentArr=[...Array(currentDate.getDate()).fill(1)]//創(chuàng)建當(dāng)月數(shù)組,填充1 this.current=currentArr.map((item,index)=>item+index)//做數(shù)組處理 /*上月*/ let prevDate=new Date(this.year,this.month-1,0)//上月最后一天 let prevArr=[...Array(prevDate.getDay()+1).fill(prevDate.getDate())]//創(chuàng)建上月數(shù)組,填充最后一天 this.prev=prevArr.map((item,index)=>item-index).sort((a,b)=>a-b)//做數(shù)組處理 /*下月*/ let nextArr=[...Array(6-currentDate.getDay()).fill(1)]//創(chuàng)建下月數(shù)組,填充1 this.next=nextArr.map((item,index)=>item+index) },
這樣一個日歷的主要部分就完成了,和windows下的日歷對比下,一模一樣就說明沒錯
上月和下月按鈕想要獲取上月的日歷,其實就是重新運行了currentInfo()函數(shù),只是月份取得上月,那很簡單,傳參
currentInfo(year,month){ let date=new Date() this.year=year||date.getFullYear()//當(dāng)年 this.month=month||date.getMonth()+1//當(dāng)月 let currentDate=new Date(this.year,this.month,0)//當(dāng)月最后一天 let currentArr=[...Array(currentDate.getDate()).fill(1)]//創(chuàng)建當(dāng)月數(shù)組,填充1 this.current=currentArr.map((item,index)=>item+index)//做數(shù)組處理 /*上月*/ let prevDate=new Date(this.year,this.month-1,0)//上月最后一天 let prevArr=[...Array(prevDate.getDay()+1).fill(prevDate.getDate())]//創(chuàng)建上月數(shù)組,填充最后一天 this.prev=prevArr.map((item,index)=>item-index).sort((a,b)=>a-b)//做數(shù)組處理 /*下月*/ let nextArr=[...Array(6-currentDate.getDay()).fill(1)]//創(chuàng)建下月數(shù)組,填充1 this.next=nextArr.map((item,index)=>item+index) }
我們將函數(shù)進行如上改造,當(dāng)有年月參數(shù)傳入時,就使用參數(shù);當(dāng)沒有年月參數(shù)傳入時,就使用系統(tǒng)時間的年月。之后只需要做兩個按鈕函數(shù)就行了
prevM(){ let year,month if(this.month!==1){//不是一月,月份遞減,年份不變 month=--this.month year=this.year }else{//否則年份遞減,月份變?yōu)?2 month=12 year=--this.year } this.currentInfo(year,month) }, nextM(){ let year,month if(this.month!==12){ month=++this.month year=this.year }else{ month=1 year=++this.year } this.currentInfo(year,month) },當(dāng)天的樣式
該如何加當(dāng)天的樣式其實有很多方法,我是先找出當(dāng)天,然后和循環(huán)的index掛鉤,判斷是否需要加樣式
先在data中加入isDay這個數(shù)據(jù)
currentDay(){ let date=new Date() if(this.year===date.getFullYear()&&this.month===date.getMonth()+1){//如果是當(dāng)年當(dāng)月 this.isDay=date.getDate()-1//獲取到今天的號數(shù),因為index是從0循環(huán),所以這里-1 }else{ this.isDay="" } },
之后就是通過vue綁定樣式,當(dāng)(今天-1)=index,即:class="isDay===index?"active":"""給此添加一個active樣式
回到今天backDay(){ this.currentInfo() this.currentDay() }最后
mounted(){ this.currentInfo() this.currentDay() }
利用生命周期函數(shù)進行初始化(這個應(yīng)該一開始就做)
源碼https://github.com/yuyeqianxu...
希望能幫助到和我一樣的小白朋友們,有bug麻煩反饋,謝謝!
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/90084.html
摘要:數(shù)據(jù)來源臺灣缺省完成圖初始化選完省之后部分請選擇請選擇暫無數(shù)據(jù)暫無數(shù)據(jù)一開始的初始狀態(tài)是省份可以選擇,利用來控制市和區(qū)的現(xiàn)實選項。當(dāng)省份未選擇時,市區(qū)因為沒有數(shù)據(jù),所以會選擇暫無數(shù)據(jù)。 依舊使用vue,不需要關(guān)注dom太方便了。數(shù)據(jù)來源(臺灣缺省):https://github.com/airyland/c... 完成圖 初始化 showImg(https://segmentfault...
摘要:貪吃蛇并不是通過操作來完成移動的,而是通過記錄貪吃蛇的路徑來將身體渲染出來。目前沒有內(nèi)置的操作符判斷對象的內(nèi)容是否相同。 還是用的vue,本來以為不合適,但想法錯了。貪吃蛇并不是通過操作dom來完成移動的,而是通過記錄貪吃蛇的路徑來將身體渲染出來。 一般移動元素,我們都是變動它的css達到目的,但我在寫貪吃蛇的時候發(fā)現(xiàn)這樣很難以實現(xiàn),參考了網(wǎng)上的資源,發(fā)現(xiàn)大部分人是通過記錄貪吃蛇的路徑...
摘要:并不是所有人寫的代碼或者插件都適合小白使用,比如這是一個的滾動插件,大多數(shù)人使用了之后發(fā)現(xiàn)滾動不了,去作者提,其實是他們并不懂滾動的原理。 最近在這里看了一篇關(guān)于面試的文章《回顧自己三次失敗的面試經(jīng)歷》,作者三次倒在了輪播圖上。囧,所以我也寫個輪播圖看看。這次是用jQuery寫的,因為最近一直在研究jQuery插件的寫法,所以用jQuery寫的,而且我發(fā)現(xiàn),我vue用太多,完全不熟悉d...
摘要:一個小白的成長日記大家好,這是我在飯否的第一篇筆記,先簡單介紹一下自己,我于年在北京工業(yè)大學(xué)本科畢業(yè),同年月來到法國巴黎工程師學(xué)校讀研,在年月畢業(yè)后加入了法國興業(yè)銀行擔(dān)任數(shù)據(jù)分析師的職位,主要負責(zé)數(shù)據(jù)質(zhì)量監(jiān)測,分析,潛在風(fēng)險預(yù)測,前端可視化 一個小白的成長日記 大家好,這是我在飯否的第一篇筆記,先簡單介紹一下自己,我于2016年在北京工業(yè)大學(xué)本科畢業(yè),同年9月來到法國巴黎Efrei工程...
摘要:閑暇之余,聽媳婦嘀咕說要給她做一個能表達她每日心情的小程序,只能她在上面發(fā)東西。既然媳婦發(fā)話了,就花點心思做一個吧,因為沒有圖,所有布局全靠自己瞎編,下面結(jié)合圖片和代碼跟大家講解下實現(xiàn)過程,內(nèi)容略長,感興趣的可以一覽。 閑暇之余,聽媳婦嘀咕說要給她做一個能表達她每日心情的小程序,只能她在上面發(fā)東西。既然媳婦發(fā)話了,就花點心思做一個吧,因為沒有UI圖,所有布局全靠自己瞎編,下面結(jié)合圖片和...
閱讀 2737·2021-09-23 11:21
閱讀 1963·2021-09-22 15:15
閱讀 1150·2021-09-10 11:27
閱讀 3515·2019-08-30 15:54
閱讀 723·2019-08-30 15:52
閱讀 1390·2019-08-30 15:44
閱讀 2416·2019-08-29 15:06
閱讀 3053·2019-08-28 18:21