国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

目錄
第一步:從基本的標(biāo)記和樣式開始
第三步:創(chuàng)建日歷網(wǎng)格
創(chuàng)建當(dāng)前月份的日期
將前一個(gè)月的日期添加到日歷網(wǎng)格
將下一個(gè)月的日期添加到日歷網(wǎng)格
首頁 web前端 css教程 如何使用真實(shí)數(shù)據(jù)進(jìn)行每月日歷

如何使用真實(shí)數(shù)據(jù)進(jìn)行每月日歷

Apr 04, 2025 am 10:34 AM

How to Make a Monthly Calendar With Real Data

您是否曾經(jīng)在網(wǎng)頁上看到日歷,并心想:“他們是怎么做到的?”對于這樣的事情,使用插件甚至嵌入式 Google 日歷是很自然的做法,但實(shí)際上,制作日歷比您想象的要簡單得多,只需要 HTML、CSS 和 JavaScript 三劍客即可。讓我們一起動(dòng)手制作一個(gè)吧!

我已經(jīng)在 CodeSandbox 上設(shè)置了一個(gè)演示,您可以看到我們的目標(biāo)。

查看演示 首先,讓我們確定日歷的一些需求。它應(yīng)該:

  • 顯示指定月份的月份網(wǎng)格
  • 顯示前一個(gè)月和下一個(gè)月的日期,以便網(wǎng)格始終完整
  • 指示當(dāng)前日期
  • 顯示當(dāng)前選定月份的名稱
  • 導(dǎo)航到前一個(gè)月和下一個(gè)月
  • 允許用戶單擊一次即可返回到當(dāng)前月份

哦,我們將把它構(gòu)建為一個(gè)單頁面應(yīng)用程序,從 Day.js(一個(gè)超輕量級的實(shí)用程序庫)獲取日歷日期。

為了簡化操作,我們將避免選擇特定的框架。對于此設(shè)置,我使用 Parcel 進(jìn)行包管理,以便我可以使用 Babel 編寫代碼、捆綁代碼以及管理項(xiàng)目中唯一一個(gè)依賴項(xiàng)。查看 CodeSandbox 上的 package.json 文件以了解詳細(xì)信息。

第一步:從基本的標(biāo)記和樣式開始

讓我們從創(chuàng)建日歷的基本模板開始。這不需要任何花哨的東西。但它也應(yīng)該在不使用表格的情況下完成。

我們可以將我們的標(biāo)記概述為三層,其中包含:

  • 日歷標(biāo)題部分。這將顯示當(dāng)前選定的月份以及負(fù)責(zé)在月份之間分頁的元素。
  • 日歷網(wǎng)格標(biāo)題部分。同樣,我們不會(huì)使用表格,但這就像一個(gè)包含一周中各天的列表的表頭。
  • 日歷網(wǎng)格。您知道的,當(dāng)前月份的每一天,都以網(wǎng)格中的正方形表示。

讓我們在一個(gè)名為 index.js 的文件中編寫這個(gè)。這可以放在項(xiàng)目文件夾中的 src 文件夾內(nèi)。我們確實(shí)會(huì)在項(xiàng)目根目錄中有一個(gè) index.html 文件來導(dǎo)入我們的工作,但主要的標(biāo)記將位于 JavaScript 文件中。

document.getElementById("app").innerHTML = `
<div>
  <div>
    July 2020
  </div>

  <div>
    Today
    >
  </div>

  <ol>
    <li>Mon</li>
    ...
    <li>Sun</li>
  </ol>

  <ol>
    <li>
      1
      ...
      29
    </li>
  </ol>
</div>
`;

讓我們繼續(xù)將此文件導(dǎo)入到位于項(xiàng)目根目錄中的 index.html 文件中。這里沒有什么特別的事情發(fā)生。它僅僅是 HTML 樣板,其中包含一個(gè)由我們的應(yīng)用程序定位并注冊我們的 index.js 文件的元素。


  
    <meta charset="UTF-8">
    <title>Parcel Sandbox</title>
  
  
    <div id="app"></div>
    <script src="./src/index.js"></script>
  

現(xiàn)在我們有一些標(biāo)記可以使用了,讓我們稍微調(diào)整一下樣式,以便我們有一個(gè)良好的視覺效果作為開始。具體來說,我們將:

  • 使用 flexbox 定位元素
  • 使用 CSS 網(wǎng)格創(chuàng)建日歷框架
  • 在單元格內(nèi)定位標(biāo)簽

首先,讓我們在與 index.js 相同的 src 文件夾中創(chuàng)建一個(gè)新的 styles.css 文件,并將此內(nèi)容放入其中:

/* ... (CSS 代碼同上) ... */

設(shè)置網(wǎng)格的關(guān)鍵部分是:

.day-of-week,
.days-grid {
  /* 7 equal columns for weekdays and days cells */
  display: grid;
  grid-template-columns: repeat(7, 1fr);
}

請注意,日歷網(wǎng)格標(biāo)題和日歷網(wǎng)格本身都使用 CSS 網(wǎng)格進(jìn)行布局。我們知道一周總是有七天,因此這允許我們使用 repeat() 函數(shù)創(chuàng)建七個(gè)彼此成比例的列。我們還在每個(gè)日歷日期上聲明了一個(gè) min-height 為 100px,以確保行保持一致。

我們需要將這些樣式與標(biāo)記連接起來,因此讓我們將其添加到 index.js 文件的頂部:

import "./styles.css";

這是一個(gè)很好的停止點(diǎn),看看我們到目前為止有什么。

查看演示 ### 第二步:設(shè)置當(dāng)前月份日歷

您可能已經(jīng)注意到,該模板目前只包含靜態(tài)數(shù)據(jù)。月份被硬編碼為七月,日期數(shù)字也被硬編碼了。這就是 Day.js 發(fā)揮作用的地方。它提供我們所需的所有數(shù)據(jù),以便使用真實(shí)的日歷數(shù)據(jù)將日期正確地放置在一周的正確日期中。它允許我們獲取和設(shè)置從一個(gè)月開始日期到顯示數(shù)據(jù)所需的所有日期格式選項(xiàng)的任何內(nèi)容。

我們將:

  • 獲取當(dāng)前月份
  • 計(jì)算應(yīng)放置日期的位置(工作日)
  • 計(jì)算顯示前一個(gè)月和下一個(gè)月的日期
  • 將所有日期組合到一個(gè)數(shù)組中

首先,我們需要導(dǎo)入 Day.js 并刪除所有靜態(tài) HTML(選定月份、工作日和日期)。我們將通過將此添加到 index.js 文件中導(dǎo)入樣式的正上方來做到這一點(diǎn):

import dayjs from "dayjs";

我們還將依靠 Day.js 插件來獲得幫助。WeekDay 幫助我們設(shè)置一周的第一天。有些人喜歡將星期日作為一周的第一天。其他人更喜歡星期一。哎呀,在某些情況下,從星期五開始是有意義的。我們將從星期一開始。

weekOfYear 插件返回當(dāng)年當(dāng)前周的數(shù)字值。一年有 52 周,因此我們可以說從 1 月 1 日開始的那一周是一年的第一周,依此類推。

因此,這是我們在導(dǎo)入語句之后添加到 index.js 中的內(nèi)容:

const weekday = require("dayjs/plugin/weekday");
const weekOfYear = require("dayjs/plugin/weekOfYear");

dayjs.extend(weekday);
dayjs.extend(weekOfYear);

一旦我們剝離了硬編碼的日歷值,這就是我們到目前為止在 index.js 中的內(nèi)容:

// ... (JavaScript 代碼同上) ...

現(xiàn)在讓我們設(shè)置一些常量。具體來說,我們想構(gòu)造一個(gè)一周中各天(即星期一、星期二、星期三等)的數(shù)組:

// ... (JavaScript 代碼同上) ...

然后,我們想獲取當(dāng)前年份并以 YYYY 格式設(shè)置它:

// ... (JavaScript 代碼同上) ...

我們想將當(dāng)前月份設(shè)置為加載日歷時(shí)的起點(diǎn),其中 M 將月份格式化為數(shù)值(例如,一月等于 1):

// ... (JavaScript 代碼同上) ...

讓我們繼續(xù)使用一周中的各天填充我們的日歷網(wǎng)格標(biāo)題。首先,我們獲取正確的元素(#days-of-week),然后我們遍歷 WEEKDAYS 數(shù)組,為數(shù)組中的每個(gè)項(xiàng)目創(chuàng)建一個(gè)列表項(xiàng)元素,同時(shí)設(shè)置每個(gè)項(xiàng)目的名稱:

// ... (JavaScript 代碼同上) ...

第三步:創(chuàng)建日歷網(wǎng)格

這非常簡單,但現(xiàn)在真正的樂趣開始了,因?yàn)槲覀儸F(xiàn)在將使用日歷網(wǎng)格。讓我們停下來思考一下,為了正確地做到這一點(diǎn),我們真正需要做什么。

首先,我們希望日期數(shù)字落在正確的工作日列中。例如,2020 年 7 月 1 日是星期三。這就是日期編號應(yīng)該開始的地方。

如果一個(gè)月的第一天是星期三,那么這意味著第一周的星期一和星期二將有空的網(wǎng)格項(xiàng)目。這個(gè)月的最后一天是 7 月 31 日,是星期五。這意味著最后一周的星期六和星期日將是空的。我們想用前一個(gè)月和下一個(gè)月的尾隨日期和前導(dǎo)日期填充這些日期,以便日歷網(wǎng)格始終完整。

創(chuàng)建當(dāng)前月份的日期

要將當(dāng)前月份的日期添加到網(wǎng)格,我們需要知道當(dāng)前月份有多少天。我們可以使用 Day.js 提供的 daysInMonth 方法來獲取它。讓我們?yōu)榇藙?chuàng)建一個(gè)輔助方法。

// ... (JavaScript 代碼同上) ...

當(dāng)我們知道這一點(diǎn)時(shí),我們創(chuàng)建一個(gè)長度等于當(dāng)前月份天數(shù)的空數(shù)組。然后我們映射()該數(shù)組并為每個(gè)數(shù)組創(chuàng)建一個(gè)日期對象。我們創(chuàng)建的對象具有任意結(jié)構(gòu),因此如果需要,您可以添加其他屬性。

在這個(gè)例子中,我們需要一個(gè) date 屬性,該屬性將用于檢查特定日期是否為當(dāng)前日期。我們還將返回一個(gè) dayOfMonth 屬性,該屬性充當(dāng)標(biāo)簽(例如 1、2、3 等)。isCurrentMonth 檢查日期是否在當(dāng)前月份內(nèi)或其外部。如果它在當(dāng)前月份之外,我們將對其進(jìn)行樣式設(shè)置,以便人們知道它們在當(dāng)前月份的范圍之外。

// ... (JavaScript 代碼同上) ...

將前一個(gè)月的日期添加到日歷網(wǎng)格

要獲取前一個(gè)月的日期以在當(dāng)前月份中顯示,我們需要檢查選定月份的第一天是星期幾。這就是我們可以使用 Day.js 的 WeekDay 插件的地方。讓我們?yōu)榇藙?chuàng)建一個(gè)輔助方法。

// ... (JavaScript 代碼同上) ...

然后,基于此,我們需要檢查前一個(gè)月中的最后一個(gè)星期一是哪一天。我們需要這個(gè)值來知道當(dāng)前月份視圖中應(yīng)該顯示前一個(gè)月多少天。我們可以通過從當(dāng)前月份的第一天減去工作日的值來獲得它。例如,如果一個(gè)月的第一天是星期三,我們需要減去 3 天才能獲得前一個(gè)月的最后一個(gè)星期一。有了這個(gè)值,我們就可以創(chuàng)建一個(gè)日期對象數(shù)組,從前一個(gè)月的最后一個(gè)星期一開始,一直到那個(gè)月的最后一天。

// ... (JavaScript 代碼同上) ...

將下一個(gè)月的日期添加到日歷網(wǎng)格

現(xiàn)在,讓我們反過來計(jì)算我們需要從下一個(gè)月中獲取哪些日期來填充當(dāng)前月份的網(wǎng)格。幸運(yùn)的是,我們可以使用我們剛剛為前一個(gè)月計(jì)算創(chuàng)建的相同輔助方法。不同之處在于,我們將通過從 7 減去該工作日數(shù)值來計(jì)算下一個(gè)月中應(yīng)該顯示多少天。

因此,例如,如果一個(gè)月的最后一天是星期六,我們需要從 7 減去 1 天來構(gòu)造從下一個(gè)月(星期日)開始所需的日期數(shù)組。

// ... (JavaScript 代碼同上) ...

好的,我們知道如何創(chuàng)建所有所需的天數(shù),讓我們使用我們剛剛創(chuàng)建的方法,然后將所有天數(shù)合并到一個(gè)包含我們想要在當(dāng)前月份顯示的所有天數(shù)的單個(gè)數(shù)組中,包括前一個(gè)月和下一個(gè)月的填充日期。

// ... (JavaScript 代碼同上) ...

這是我們在 index.js 中組合在一起的所有內(nèi)容:

// ... (JavaScript 代碼同上) ...

查看演示 ### 第四步:顯示日歷日期

好的,所以我們有日歷的基本標(biāo)記,我們需要顯示當(dāng)前月份日期的數(shù)據(jù),加上前一個(gè)月和下一個(gè)月的日期以填充空的網(wǎng)格項(xiàng)目?,F(xiàn)在我們需要將日期附加到日歷!

我們已經(jīng)有一個(gè)日歷網(wǎng)格的容器 #calendar-days。讓我們獲取該元素。

// ... (JavaScript 代碼同上) ...

現(xiàn)在,讓我們創(chuàng)建一個(gè)將日期附加到日歷視圖的功能。

// ... (JavaScript 代碼同上) ...

請注意,我們正在對來自前一個(gè)月和下一個(gè)月的日期進(jìn)行檢查,以便我們可以添加一個(gè)類來將它們與當(dāng)前月份的日期區(qū)分開來:

// ... (CSS 代碼同上) ...

就是這樣!我們的日歷現(xiàn)在應(yīng)該按照我們想要的方式顯示了。

查看演示 ### 第五步:選擇當(dāng)前月份

我們到目前為止所擁有的非常不錯(cuò),但是我們希望用戶能夠向前和向后分頁月份,從當(dāng)前月份開始。我們已經(jīng)擁有大部分邏輯,所以我們真正需要做的就是向分頁按鈕添加一個(gè)點(diǎn)擊偵聽器,該偵聽器重新運(yùn)行日期計(jì)算并使用更新的數(shù)據(jù)重新繪制日歷。

在我們開始之前,讓我們定義當(dāng)前月份、前一個(gè)月和下一個(gè)月份的日期變量,以便我們可以在整個(gè)代碼中引用它們。

// ... (JavaScript 代碼同上) ...

現(xiàn)在,讓我們創(chuàng)建一個(gè)方法,該方法將負(fù)責(zé)在分頁到另一個(gè)月份時(shí)重新計(jì)算日歷日期并重新渲染日歷。我們將調(diào)用該函數(shù) createCalendar。此方法將接受兩個(gè)屬性——年份和月份——并且基于此,日歷將使用新數(shù)據(jù)重新渲染,而無需重新加載頁面。

該方法將替換標(biāo)題內(nèi)容以始終顯示選定的月份標(biāo)簽。

// ... (JavaScript 代碼同上) ...

然后它將獲取日歷日期容器并刪除所有現(xiàn)有日期。

// ... (JavaScript 代碼同上) ...

清除日歷后,它將使用我們之前創(chuàng)建的方法計(jì)算應(yīng)該顯示的新日期。

// ... (JavaScript 代碼同上) ...

最后,它將為每一天附加一個(gè)日期元素。

// ... (JavaScript 代碼同上) ...

還缺少一個(gè)邏輯部分:一個(gè) removeAllDayElements 方法,用于清除現(xiàn)有的日歷。此方法獲取第一個(gè)日歷日期元素,將其刪除,并將其替換為另一個(gè)元素。從那里開始,它將循環(huán)運(yùn)行邏輯,直到刪除所有元素。

// ... (JavaScript 代碼同上) ...

現(xiàn)在,當(dāng)我們想要更改月份時(shí),我們可以重用該邏輯?;叵胍幌碌谝徊?,當(dāng)時(shí)我們?yōu)榻M件創(chuàng)建了一個(gè)靜態(tài)模板。我們添加了這些元素:

// ... (HTML 代碼同上) ...

這些是月份之間分頁的控件。要更改它,我們需要存儲(chǔ)當(dāng)前選定的月份。讓我們創(chuàng)建一個(gè)變量來跟蹤它是什么,并將其初始值設(shè)置為本月。

// ... (JavaScript 代碼同上) ...

現(xiàn)在,為了使選擇器工作,我們需要一些 JavaScript。為了使其更易于閱讀,我們將創(chuàng)建另一個(gè)名為 initMonthSelectors 的方法,并將邏輯保留在那里。此方法將向選擇器元素添加事件偵聽器。它將偵聽點(diǎn)擊事件并將 selectedMonth 的值更新為新選定月份的名稱,然后使用正確的年份和月份值運(yùn)行 createCalendar 方法。

// ... (JavaScript 代碼同上) ...

就是這樣!我們的日歷準(zhǔn)備好了。雖然這很好,但如果我們可以標(biāo)記當(dāng)前日期以便它從其余日期中脫穎而出,那就更好了。這應(yīng)該不難。我們已經(jīng)在設(shè)置當(dāng)前月份之外的日期樣式,所以讓我們做類似的事情。

我們將創(chuàng)建一個(gè)設(shè)置為今天的變量:

// ... (JavaScript 代碼同上) ...

然后,在 appendDay 方法中,我們在應(yīng)用當(dāng)前月份之外日期的類時(shí),必須添加另一個(gè)檢查以查看該元素是否為今天的日期。如果是,我們將向該元素添加一個(gè)類:

// ... (JavaScript 代碼同上) ...

現(xiàn)在我們可以設(shè)置樣式了!

// ... (CSS 代碼同上) ...

瞧,我們完成了!查看最終演示以查看所有內(nèi)容的組合。

查看演示

以上是如何使用真實(shí)數(shù)據(jù)進(jìn)行每月日歷的詳細(xì)內(nèi)容。更多信息請關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

本站聲明
本文內(nèi)容由網(wǎng)友自發(fā)貢獻(xiàn),版權(quán)歸原作者所有,本站不承擔(dān)相應(yīng)法律責(zé)任。如您發(fā)現(xiàn)有涉嫌抄襲侵權(quán)的內(nèi)容,請聯(lián)系admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費(fèi)脫衣服圖片

Undresser.AI Undress

Undresser.AI Undress

人工智能驅(qū)動(dòng)的應(yīng)用程序,用于創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用于從照片中去除衣服的在線人工智能工具。

Clothoff.io

Clothoff.io

AI脫衣機(jī)

Video Face Swap

Video Face Swap

使用我們完全免費(fèi)的人工智能換臉工具輕松在任何視頻中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費(fèi)的代碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

功能強(qiáng)大的PHP集成開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級代碼編輯軟件(SublimeText3)

如何僅在某些頁面上包括CSS? 如何僅在某些頁面上包括CSS? Jun 11, 2025 am 12:01 AM

選擇性包含CSS在特定頁面上的方法有三種:1.內(nèi)聯(lián)CSS,適用于不常訪問或需要獨(dú)特樣式的頁面;2.使用JavaScript條件加載外部CSS文件,適合需要靈活性的情況;3.服務(wù)器端包含,適用于使用服務(wù)器端語言的場景。這種方法可以優(yōu)化網(wǎng)站性能和可維護(hù)性,但需平衡模塊化與性能。

Flexbox與網(wǎng)格:了解CSS布局的關(guān)鍵差異 Flexbox與網(wǎng)格:了解CSS布局的關(guān)鍵差異 Jun 10, 2025 am 12:03 AM

flexboxisidealforone-dimensionAllayouts,while gridsuitStwo,complex layouts.useflexboxforaligningItemsinasingLeaxisAndGridForRidForPreciseconcontroloverroverroverroverroverroverroverrowsandsininintricatientricatedesigns。

使用HTML彈出案創(chuàng)建自動(dòng)關(guān)閉通知 使用HTML彈出案創(chuàng)建自動(dòng)關(guān)閉通知 Jun 10, 2025 am 09:45 AM

HTML彈出屬性將元素轉(zhuǎn)換為頂層元素,可以使用按鈕或JavaScript打開和關(guān)閉??梢詫棾霭格g回多種方式,但是沒有選擇自動(dòng)關(guān)閉它們。 preethi有一種技術(shù),你可以

什么是'渲染障礙CSS”? 什么是'渲染障礙CSS”? Jun 24, 2025 am 12:42 AM

CSS會(huì)阻塞頁面渲染是因?yàn)闉g覽器默認(rèn)將內(nèi)聯(lián)和外部CSS視為關(guān)鍵資源,尤其是使用引入的樣式表、頭部大量內(nèi)聯(lián)CSS以及未優(yōu)化的媒體查詢樣式。1.提取關(guān)鍵CSS并內(nèi)嵌至HTML;2.延遲加載非關(guān)鍵CSS通過JavaScript;3.使用media屬性優(yōu)化加載如打印樣式;4.壓縮合并CSS減少請求。建議使用工具提取關(guān)鍵CSS,結(jié)合rel="preload"異步加載,合理使用media延遲加載,避免過度拆分與復(fù)雜腳本控制。

如何在無花果中使用Lotties 如何在無花果中使用Lotties Jun 14, 2025 am 10:17 AM

在接下來的教程中,我將向您展示如何在無花果中創(chuàng)建Lottie動(dòng)畫。我們將使用兩種彩色設(shè)計(jì)來超越如何在無花果上進(jìn)行動(dòng)畫,然后向您展示如何從Figma到Lottie動(dòng)畫。您只需要免費(fèi)無花果

打破邊界:用(s)CSS構(gòu)建湯姆拼圖 打破邊界:用(s)CSS構(gòu)建湯姆拼圖 Jun 13, 2025 am 11:33 AM

我們對其進(jìn)行了測試,事實(shí)證明,至少在低級邏輯和拼圖行為時(shí),Sass可以替換JavaScript。除了地圖,混音,功能和大量數(shù)學(xué)外,我們都設(shè)法使我們的Tangram難題栩栩如生,沒有J

外部與內(nèi)部CSS:最好的方法是什么? 外部與內(nèi)部CSS:最好的方法是什么? Jun 20, 2025 am 12:45 AM

thebestapphachforcssdepprodsontheproject'sspefificneeds.forlargerprojects,externalcsSissBetterDuoSmaintoMaintainability andReusability; forsMallerProjectsorsingle-pageApplications,InternaltCsmightBemoresobleable.InternalCsmightBemorese.it.it'sclucialtobalancepopryseceneceenceprodrenceprodrenceNeed

我的CSS必須在較低的情況下嗎? 我的CSS必須在較低的情況下嗎? Jun 19, 2025 am 12:29 AM

否,CSSDOESNOTHAVETOBEINLOWERCASE.CHOMENDENS,使用flowercaseisrecommondendendending:1)一致性和可讀性,2)避免使用促進(jìn)性技術(shù),3)潛在的Performent FormanceBenefits,以及4)RightCollaboraboraboraboraboraboraboraboraboraboraboraboraboraboraboraboraborationWithInteams。

See all articles