推荐答案
-- -------------------- ---- -------
--------- -----
----- ----------
------
----- ----------------
----- --------------- ---------------------------- -------------------
------------- ---- --------------
-------
------------ -
--------- ---------
-------- -------------
-
------------ ----- -
-------- ----
---------- -----
------- --- ----- -----
-------------- ----
-
--------- -
-------- -----
--------- ---------
---- -----
----- --
----------------- -----
------- --- ----- -----
-------------- ----
-------- -----
-------- -----
-
-------------- -
-------- ------
-
--------- ----- -
------ -----
---------------- ---------
-
--------- --- --------- -- -
-------- ----
----------- -------
------- --- ----- -----
-
--------- -------- -
----------------- --------
------- --------
-
--------
-------
------
---- --------------------
------ ----------- --------------- ---------
---- ---------------- --------------
-------
-------
----
--- ------------
------- --------------------------
----- -------------------------------
------- --------------------------
-----
-----
----
------------
------------
------------
------------
------------
------------
------------
-----
--------
------ -------------------
--------
--------
------
------
--------
----- --------- - --------------------------------------
----- -------- - ------------------------------------
----- ------------ - -----------------------------------------
----- ---------------- - ----------------------------------------------
----- --------------- - --------------------------------------
----- --------------- - --------------------------------------
--- ----------- - --- -------
--- ------------ - -----
-------- -------------------- -
----- ---- - -------------------
----- ----- - ----------------
----- -------- - --- ---------- ------ ---
----- ------- - --- ---------- ----- - -- ---
----- ----------- - ------------------
----- ----------- - ------------------
---------------------------- - --------------------------------- - ------ ------ --- ---------
--- ------------ - ---
--- --- - --
--- ---- - - -- - - -- ---- -
------------ -- -------
--- ---- - - -- - - -- ---- -
-- -- --- - -- - - ------------ -
------------ -- ------------
- ---- -- ---- - ------------ -
------------ -- ------------
- ---- -
----- ---------- - ----------------------- - -------------- ------------------------------- -------
------------ -- ---- ---------------------------------------
------
-
-
------------ -- --------
-
---------------------- - -------------
-
-------- ------------------------ -
------------ - -----
--------------- - --------------------------
----------------------------------
-
----------------------------------- -- -- -
----------------------------------
---
-------------------------------------- ------- -- -
-- --------------------- --- ---- -- -------------------------- -
----- ------------------ - --------------------------
----- ------ ------ ---- - ------------------------------
---------------------- ---------- ----- - -- ------
-
---
----------------------------------------- -- -- -
------------------------------------------- - ---
----------------------------
---
----------------------------------------- -- -- -
------------------------------------------- - ---
----------------------------
---
----------------------------
---------
-------
-------
本题详细解读
1. HTML 结构
<div class="date-picker">
: 这是日期选择器的容器,包含一个输入框和一个日历面板。
<input type="text" id="date-input" readonly>
: 用于显示选中的日期,用户无法直接编辑。
<div class="calendar" id="calendar">
: 日历面板,默认隐藏,点击输入框时显示。
<table>
: 用于显示日历的表格结构,包含表头和日期单元格。
2. CSS 样式
.date-picker
: 设置日期选择器的相对定位,使其内部的日历面板可以绝对定位。
.calendar
: 设置日历面板的样式,包括背景色、边框、圆角等。
.calendar.show
: 控制日历面板的显示与隐藏。
td:hover
: 当用户悬停在日期单元格上时,改变背景色以提供视觉反馈。
3. JavaScript 逻辑
renderCalendar(date)
: 根据传入的日期渲染日历面板。计算当前月份的天数、起始日,并生成对应的 HTML 结构。
updateSelectedDate(date)
: 更新选中的日期,并将其显示在输入框中,同时隐藏日历面板。
- 事件监听:
dateInput.addEventListener('click')
: 点击输入框时显示或隐藏日历面板。
calendarBody.addEventListener('click')
: 点击日历面板中的日期单元格时,更新选中的日期。
prevMonthButton.addEventListener('click')
: 点击“上一月”按钮时,切换到上一个月并重新渲染日历。
nextMonthButton.addEventListener('click')
: 点击“下一月”按钮时,切换到下一个月并重新渲染日历。
4. 功能实现
- 日期选择: 用户可以通过点击日历面板中的日期单元格来选择日期,选中的日期会显示在输入框中。
- 月份切换: 用户可以通过点击“上一月”或“下一月”按钮来切换月份,日历面板会动态更新。
5. 扩展性
- 该日期选择器是一个基础实现,可以根据需求进一步扩展,例如添加时间选择、支持多语言、自定义样式等。