Vue.js實(shí)現(xiàn)日歷功能
本文實(shí)例為大家分享了Vue.js實(shí)現(xiàn)日歷功能的具體代碼,供大家參考,具體內(nèi)容如下
功能需求
使用 Vue.js 實(shí)現(xiàn)指定年月的日歷表,配合后臺(tái)接口數(shù)據(jù),添加對(duì)應(yīng)日期的空氣質(zhì)量描述等信息。后臺(tái)傳遞當(dāng)月空氣質(zhì)量指數(shù)的數(shù)據(jù),前端生成日歷表后將空氣質(zhì)量指數(shù)添加到對(duì)應(yīng)日期上。
空氣質(zhì)量數(shù)據(jù)示例:
data.json
{ "code": 200, "msg": "", "data": [{ "time": "2020-08-01", "kqzl": "優(yōu)" }, { "time": "2020-08-02", "kqzl": "良" }, { "time": "2020-08-03", "kqzl": "良" } ] }
實(shí)現(xiàn)方法
<template> <div id="app"> <h1 style="text-align:center;"> 2020-08</h1> <div class="calendar-container"> <div class="calendar-week"> <div class="cw-inner"> <div class="cw-item" :style="{width: setItemWidth}" v-for="(item, index) of week" :key="index"> {{item}} </div> </div> </div> <div class="calendar-day"> <div class="cd-list" v-for="(item, index) of day" :key="index"> <div class="cl-item" :style="{width: setItemWidth}" v-for="(child,index) of item" :key="index" :class="[{has: child}]"> <div class="ci-inner" v-if="child"> <span>{{child.date}}</span> <span v-if="child.text" class="aqi" :class="child.text.kqzl"> {{child.text.kqzl}} </span> </div> </div> </div> </div> </div> </div> </template> <script> import kqzlData from './assets/data.json' // 空氣質(zhì)量數(shù)據(jù) export default { name: 'app', data() { return { week: [ '星期一', '星期二', '星期三', '星期四', '星期五', '星期六', '星期日', ], day: [], } }, computed: { setItemWidth() { return 100 / 7 + '%' }, }, mounted() { this.createCalendar(2020, 8) }, methods: { /** * @name: 格式化日期 * @param {date} */ dateFormat(date) { let dateArr = date.split('-') let mounth = dateArr[1] >= 10 ? dateArr[1] : '0' + dateArr[1] let day = dateArr[2] >= 10 ? dateArr[2] : '0' + dateArr[2] return dateArr[0] + '-' + mounth + '-' + day }, /** * @name: 日期信息 * @param {date} */ getDayInfo(date) { let kqzl = kqzlData.data let formatDate = this.dateFormat(date) let txt = kqzl[kqzl.findIndex(item => item.time === formatDate)] return txt }, /** * @name: 生成日歷表 * @param {year} * @param {mounth} */ createCalendar(year, mounth) { // 某個(gè)月一共有多少天 let allDay = new Date(year, mounth, 0).getDate() // 某個(gè)月1號(hào)是星期幾 let firstDay = this.judjeFirstDay(year, mounth) // 需要多少行來(lái)展示 let row = Math.ceil((allDay + firstDay) / 7) let k = firstDay - 1 let result = [] let count = 1 // 生成日歷二維數(shù)組 for (let i = 0; i < row; i++) { result[i] = new Array(7) do { if (count <= allDay) { result[i][k] = { date: count, // 根據(jù)接口匹配日期對(duì)應(yīng)的信息 text: this.getDayInfo(year + '-' + mounth + '-' + count), } k++ count++ } else { break } } while (k < 7) k = 0 } this.day = result }, /** * @name: 判斷某年某月1號(hào)是星期幾 * @param {year} * @param {mounth} */ judjeFirstDay(year, mounth) { let date = new Date(year, mounth - 1, 1) let week = date.getDay() let weekArr = [1, 2, 3, 4, 5, 6, 7] return weekArr[week - 1] }, }, } </script> <style lang="scss"> .calendar-container { text-align: center; .calendar-week { margin-bottom: 4px; padding: 0 4px; color: #fff; .cw-inner { overflow: hidden; background: #a0a0a0; .cw-item { float: left; padding: 8px 0; } } } .calendar-day { .cd-list { overflow: hidden; .cl-item { float: left; min-height: 30px; box-sizing: border-box; padding: 4px; .ci-inner { background: #f5f5f5; padding: 8px 0; span { display: inline-block; &.aqi { color: #fff; background: #a7cf8c; padding: 0 4px; border-radius: 4px; } &.優(yōu) { background: #a7cf8c; } &.良 { background: #f7da64; } &.輕度 { background: #f29e39; } &.中度 { background: #da555d; } &.重度 { background: #b9377a; } &.嚴(yán)重 { background: #881326; } } } } } } } </style>
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
vue-cli項(xiàng)目中使用公用的提示彈層tips或加載loading組件實(shí)例詳解
這篇文章主要介紹了vue-cli項(xiàng)目中使用公用的提示彈層tips或加載loading組件,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下2018-05-05Vue3利用自定義指令進(jìn)行內(nèi)容控制的實(shí)現(xiàn)方法
Vue3作為一個(gè)漸進(jìn)式JavaScript框架,提供了強(qiáng)大的自定義指令功能,使得權(quán)限控制變得既簡(jiǎn)單又高效,本文將詳細(xì)介紹如何在Vue3中使用自定義指令來(lái)判斷內(nèi)容是否顯示,以滿足不同用戶權(quán)限下的界面展示需求,需要的朋友可以參考下2024-04-04Vue使用Axios庫(kù)請(qǐng)求數(shù)據(jù)時(shí)跨域問(wèn)題的解決方法詳解
在 VUE 項(xiàng)目開發(fā)時(shí),遇到個(gè)問(wèn)題,正常設(shè)置使用 Axios 庫(kù)請(qǐng)求數(shù)據(jù)時(shí),報(bào)錯(cuò)提示跨域問(wèn)題,那在生產(chǎn)壞境下,該去怎么解決呢?下面小編就來(lái)和大家詳細(xì)講講2024-01-01Vue+Flask實(shí)現(xiàn)簡(jiǎn)單的登錄驗(yàn)證跳轉(zhuǎn)的示例代碼
本篇文章主要介紹了Vue+Flask實(shí)現(xiàn)簡(jiǎn)單的登錄驗(yàn)證跳轉(zhuǎn)的示例代碼,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-01-01element-ui 遠(yuǎn)程搜索組件el-select在項(xiàng)目中組件化的實(shí)現(xiàn)代碼
這篇文章主要介紹了element-ui 遠(yuǎn)程搜索組件el-select在項(xiàng)目中組件化,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-12-12