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

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

如何使用真實數(shù)據(jù)進行每月日曆

Apr 04, 2025 am 10:34 AM

How to Make a Monthly Calendar With Real Data

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

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

查看演示首先,讓我們確定日曆的一些需求。它應該:

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

哦,我們將把它構建為一個單頁面應用程序,從Day.js(一個超輕量級的實用程序庫)獲取日曆日期。

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

第一步:從基本的標記和樣式開始

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

我們可以將我們的標記概述為三層,其中包含:

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

讓我們在一個名為index.js 的文件中編寫這個。這可以放在項目文件夾中的src 文件夾內(nèi)。我們確實會在項目根目錄中有一個index.html 文件來導入我們的工作,但主要的標記將位於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ù)將此文件導入到位於項目根目錄中的index.html 文件中。這裡沒有什麼特別的事情發(fā)生。它僅僅是HTML 樣板,其中包含一個由我們的應用程序定位並註冊我們的index.js 文件的元素。

 

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

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

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

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

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

設置網(wǎng)格的關鍵部分是:

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

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

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

 import "./styles.css";

這是一個很好的停止點,看看我們到目前為止有什麼。

查看演示### 第二步:設置當前月份日曆

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

我們將:

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

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

 import dayjs from "dayjs";

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

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

因此,這是我們在導入語句之後添加到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ù)組:

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

然後,我們想獲取當前年份並以YYYY 格式設置它:

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

我們想將當前月份設置為加載日曆時的起點,其中M 將月份格式化為數(shù)值(例如,一月等於1):

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

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

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

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

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

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

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

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

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

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

當我們知道這一點時,我們創(chuàng)建一個長度等於當前月份天數(shù)的空數(shù)組。然後我們映射()該數(shù)組並為每個數(shù)組創(chuàng)建一個日期對象。我們創(chuàng)建的對象具有任意結構,因此如果需要,您可以添加其他屬性。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

查看演示### 第五步:選擇當前月份

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

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

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

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

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

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

然後它將獲取日曆日期容器並刪除所有現(xiàn)有日期。

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

清除日曆後,它將使用我們之前創(chuàng)建的方法計算應該顯示的新日期。

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

最後,它將為每一天附加一個日期元素。

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

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

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

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

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

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

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

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

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

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

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

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

然後,在appendDay 方法中,我們在應用當前月份之外日期的類時,必須添加另一個檢查以查看該元素是否為今天的日期。如果是,我們將向該元素添加一個類:

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

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

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

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

查看演示

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

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

熱AI工具

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅(qū)動的應用程序,用於創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

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

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

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

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

外部與內(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)避免使用促進性技術,3)潛在的Performent FormanceBenefits,以及4)RightCollaboraboraboraboraboraboraboraboraboraboraboraboraboraboraboraboraborationWithInteams。

CSS案例靈敏度:了解重要的 CSS案例靈敏度:了解重要的 Jun 20, 2025 am 12:09 AM

cssismostlycaseminemintiment,buturlsandfontfamilynamesarecase敏感。 1)屬性和valueslikeColor:紅色; prenotcase-sensive.2)urlsmustmustmatchtheserver'server'scase,例如

什麼是AutoPrefixer,它如何工作? 什麼是AutoPrefixer,它如何工作? Jul 02, 2025 am 01:15 AM

Autoprefixer是一個根據(jù)目標瀏覽器範圍自動為CSS屬性添加廠商前綴的工具。 1.它解決了手動維護前綴易出錯的問題;2.通過PostCSS插件形式工作,解析CSS、分析需加前綴的屬性、依配置生成代碼;3.使用步驟包括安裝插件、設置browserslist、在構建流程中啟用;4.注意事項有不手動加前綴、保持配置更新、非所有屬性都加前綴、建議配合預處理器使用。

什麼是CSS計數(shù)器? 什麼是CSS計數(shù)器? Jun 19, 2025 am 12:34 AM

csscounterscanautomationallymentermentermentections和lists.1)usecounter-ensettoInitializize,反插入式發(fā)芽,andcounter()orcounters()

CSS:何時重要(何時不)? CSS:何時重要(何時不)? Jun 19, 2025 am 12:27 AM

在CSS中,選擇器和屬性名不區(qū)分大小寫,而值、命名顏色、URL和自定義屬性則區(qū)分大小寫。 1.選擇器和屬性名不區(qū)分大小寫,例如background-color和Background-Color相同。 2.值中的十六進制顏色不區(qū)分大小寫,但命名顏色區(qū)分大小寫,如red有效而Red無效。 3.URL區(qū)分大小寫,可能導致文件加載問題。 4.自定義屬性(變量)區(qū)分大小寫,使用時需注意大小寫一致。

什麼是圓錐級函數(shù)? 什麼是圓錐級函數(shù)? Jul 01, 2025 am 01:16 AM

theconic-Gradient()functionIncsscreatesCircularGradientsThatRotateColorStopSaroundAcentralPoint.1.IsidealForPieCharts,ProgressIndicators,colordichers,colorwheels和decorativeBackgrounds.2.itworksbysbysbysbydefindefingincolordefingincolorstopsatspecificains off.

See all articles