国产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 上設(shè)置了一個演示,您可以看到我們的目標。

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

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

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

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

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

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

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

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

讓我們在一個名為index.js 的文件中編寫這個。這可以放在項目文件夾中的src 文件夾內(nèi)。我們確實會在項目根目錄中有一個index.html 文件來導(dǎ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)入到位於項目根目錄中的index.html 文件中。這裡沒有什麼特別的事情發(fā)生。它僅僅是HTML 樣板,其中包含一個由我們的應(yīng)用程序定位並註冊我們的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 代碼同上) ... */

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

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

 import "./styles.css";

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

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

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

我們將:

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

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

 import dayjs from "dayjs";

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

weekOfYear 插件返回當年當前週的數(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)造一個一周中各天(即星期一、星期二、星期三等)的數(shù)組:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

因此,例如,如果一個月的最後一天是星期六,我們需要從7 減去1 天來構(gòu)造從下一個月(星期日)開始所需的日期數(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)在應(yīng)該按照我們想要的方式顯示了。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

查看演示

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

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

熱AI工具

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅(qū)動的應(yīng)用程序,用於創(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 11, 2025 am 12:01 AM

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

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)建自動關(guān)閉通知 使用HTML彈出案創(chuàng)建自動關(guān)閉通知 Jun 10, 2025 am 09:45 AM

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

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

CSS會阻塞頁面渲染是因為瀏覽器默認將內(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動畫。我們將使用兩種彩色設(shè)計來超越如何在無花果上進行動畫,然後向您展示如何從Figma到Lottie動畫。您只需要免費無花果

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

我們對其進行了測試,事實證明,至少在低級邏輯和拼圖行為時,Sass可以替換JavaScript。除了地圖,混音,功能和大量數(shù)學外,我們都設(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)避免使用促進性技術(shù),3)潛在的Performent FormanceBenefits,以及4)RightCollaboraboraboraboraboraboraboraboraboraboraboraboraboraboraboraboraborationWithInteams。

See all articles