大牛练成记:用JavaScript徒手写出一个日期选择插件

在这里插入图片描述

🏆作者简介,黑夜开发者,全栈领域新星创作者✌,阿里云社区专家博主,2023年6月csdn上海赛道top4。
🏆本文已收录于专栏:100个JavaScript的小应用。
🎉欢迎 👍点赞✍评论⭐收藏

文章目录

  • 🚀一、写作思路介绍
  • 🚀二、准备工作
    • 🔎2.1 写一个入口页面
    • 🔎2.2 设计基本的插件样式
    • 🔎2.3 实现日期选择插件
    • 🔎2.4 美化日期选择插件
  • 🚀三、总结


🚀一、写作思路介绍

在现代Web应用程序中,日期选择器是一个非常常见的组件,用户可以使用它来选择特定的日期。在本篇文章中,我们将使用JavaScript和HTML来创建一个简单但功能强大的日期选择插件。这个日期选择插件是比较考验Js基本功的

该插件将具有以下功能:

  1. 点击输入框时,将显示日期选择器。
  2. 日期选择器上方有一个年份和月份选择器,可以向左或向右切换。
  3. 日期选择器下方是一个日期网格,用户可以通过点击来选择日期。
  4. 当用户选择一个日期后,插件将自动将选定的日期填充到输入框中。

🚀二、准备工作

🔎2.1 写一个入口页面

在开始之前,我们需要准备一些基本的 HTML 和 CSS 结构(date-picker.html)。

HTML 结构如下:

<!DOCTYPE html>
<html>
<head><title>日期选择插件</title><link rel="stylesheet" href="style.css">
</head>
<body><div class="container"><input type="text" id="date-input" placeholder="选择日期"></div><script src="script.js"></script>
</body>
</html>

🔎2.2 设计基本的插件样式

CSS 样式如下(style.css):

.container {background-color: #FDF5E6;padding: 10px;width: 200px;border-radius: 5px;
}#date-input {width: 100%;height: 30px;padding: 5px;font-size: 16px;border: none;
}

大概出来的效果图如下:
在这里插入图片描述

🔎2.3 实现日期选择插件

首先,我们需要监听输入框的点击事件,当用户点击输入框时,展示日期选择插件。

在 JavaScript 文件中添加以下代码:

document.getElementById("date-input").addEventListener("click", function() {showDatePicker();
});function showDatePicker() {// 创建日期选择插件的容器var datePickerContainer = document.createElement("div");datePickerContainer.className = "date-picker";// 获取当前日期var currentDate = new Date();// 获取当前年份和月份var currentYear = currentDate.getFullYear();var currentMonth = currentDate.getMonth();// 创建日历表格var calendarTable = createCalendarTable(currentYear, currentMonth);// 将日历表格添加到日期选择插件的容器中datePickerContainer.appendChild(calendarTable);// 将日期选择插件的容器添加到文档中document.body.appendChild(datePickerContainer);
}function createCalendarTable(year, month) {// 创建日历表格var table = document.createElement("table");// 创建表头var thead = document.createElement("thead");var tr = document.createElement("tr");var daysOfWeek = ["日", "一", "二", "三", "四", "五", "六"];for (var i = 0; i < daysOfWeek.length; i++) {var th = document.createElement("th");th.textContent = daysOfWeek[i];tr.appendChild(th);}thead.appendChild(tr);table.appendChild(thead);// 创建表格主体var tbody = document.createElement("tbody");var startDate = new Date(year, month, 1); // 当月第一天var endDate = new Date(year, month + 1, 0); // 当月最后一天var currentDate = new Date(year, month, 1); // 当前日期,默认为当月第一天while (currentDate <= endDate) {tr = document.createElement("tr");for (i = 0; i < 7; i++) {var td = document.createElement("td");if (currentDate.getMonth() === month) {td.textContent = currentDate.getDate();td.addEventListener("click", selectDate);td.className = "date";} else {td.textContent = "";td.className = "disabled";}if (currentDate.toDateString() === new Date().toDateString()) {td.className += " current-day";}tr.appendChild(td);currentDate.setDate(currentDate.getDate() + 1);}tbody.appendChild(tr);}table.appendChild(tbody);return table;
}function selectDate(event) {var selectedDate = new Date(year, month, event.target.textContent);var dateString = selectedDate.getFullYear() + "-" + (selectedDate.getMonth() + 1) + "-" + selectedDate.getDate();document.getElementById("date-input").value = dateString;// 移除日期选择插件的容器var datePickerContainer = document.querySelector(".date-picker");datePickerContainer.parentNode.removeChild(datePickerContainer);
}

在以上代码中,我们使用 showDatePicker 函数来创建日期选择插件的容器,并将其添加到文档中。

createCalendarTable 函数创建了一个日历表格,并根据给定的年份和月份生成了相应的日期。

selectDate 函数用于选择日期并将其写入输入框,然后移除日期选择插件的容器。

🔎2.4 美化日期选择插件

为了美化日期选择插件,我们使用了自定义的 CSS 样式。

首先,我们将整体边框背景搭配调的比较舒服一点,在style.css里面追加下面的内容:

.date-picker {position: absolute;background-color: #FFF;border: 1px solid #DDD;padding: 10px;z-index: 999;
}.current-day {background-color: #CCC;
}.date-picker td {text-align: center;width: 30px;height: 30px;cursor: pointer;
}.date-picker td:hover {background-color: #EEE;
}.date-picker td:not(.disabled):hover {background-color: #DDD;
}.disabled {color: #AAA;cursor: not-allowed;
}.container {background-color: #FDF5E6;
}

然后,我们使用灰色作为选中日期的背景色,并使用黑色作为日期字样的颜色:

.current-day {background-color: #CCC;
}.date-picker td {color: #000;
}

其他常规样式的配置可以根据需要进行调整,比如边框样式、鼠标悬停效果等,我们来看一下最终大概的效果。
在这里插入图片描述

🚀三、总结

在本文中,我们介绍了如何使用 JavaScript 和 HTML 来创建一个简单的日期选择插件,并对其进行了美化。通过监听输入框的点击事件,在用户点击输入框时展示日期选择插件,并通过点击日期来选择日期并将其写入输入框。最后,我们使用 CSS 样式来美化日期选择插件,使其更加美观。这个日期选择插件可以方便地应用于网页中,提供良好的用户体验。

以上就是关于如何使用 JavaScript 和 HTML 实现一个日期选择插件的介绍。不过关于这个插件还是可以继续丰富,比如支持选择年份和月份等,有想法的大佬可以持续补充。希望本文对你有所帮助!

完整代码在文章开头可以下载,有需要可以前往下载。

在这里插入图片描述
后面将会分享更多的实战经验,我们下次见。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/19318.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【C语言】初识指针

【C语言】初识指针 一、指针是什么&#xff1f;二、指针和指针类型1. 指针-整数2. 指针的解引用三、野指针1.野指针成因2 .如何规避野指针四、指针运算五、二级指针七、指针数组 &#x1f388;个人主页&#xff1a;库库的里昂&#x1f390;CSDN新晋作者&#x1f389;欢迎 &…

ansible安装及rhel8仓库配置

目录 一、本地仓库 问题&#xff1a; 解决&#xff1a; 1.创建一个仓库&#xff1a; 内容&#xff1a; 2.挂载&#xff1a; 挂载&#xff1a; 测试&#xff1a; 3.或者直接使用阿里云的源 二.配置ansible仓库 1.下载&#xff1a; 2.检查 一、本地仓库 问题&#xff1a; 当…

vue3+uniapp自定义tabbar

首先把tabbar中的元素写在一个list中用v-for进行渲染 用一个interface进行定义接口&#xff0c;这样别人在review你的代码就可以清晰知道你的tabbar包含什么元素。 利用typescript特性进行类型定义&#xff0c;可以省去很多麻烦 import { reactive } from "vue" imp…

docker快速入门

文章目录 简介&#xff1a;组成&#xff1a;安装&#xff1a;运行&#xff1a;原理&#xff1a;常用命令&#xff1a;1.帮助启动类命令2.镜像命令3.容器命令4.命令交互图5.将镜像打包发布到阿里云1.将本地容器制作为镜像2.登录阿里云3.创建个人实例4.创建镜像仓库5.将镜像推送到…

马上解锁 StarRocks 存算分离,降本增效无需等!

StarRocks 于 4 月底正式发布了 3.0 版本&#xff0c;该里程碑版本带来了大家期盼已久的新特性--存算分离。此新功能一推出&#xff0c;立即受到社区热情追捧&#xff0c;用户纷纷开始在自己的业务中评估和测试存算分离效果。从芒果TV、聚水潭、网易邮箱、浪潮、天道金科等数十…

桥接模式——处理多维度变化

1、简介 1.1、概述 桥接模式是一种很实用的结构型设计模式。如果软件系统中某个类存在两个独立变化的维度&#xff0c;通过该模式可以将这两个维度分离出来&#xff0c;使两者可以独立扩展&#xff0c;让系统更加符合单一职责原则。与多层继承方案不同&#xff0c;它将两个独…

游戏APP开发:创新设计的秘诀

在游戏 APP开发中&#xff0c;创新设计是游戏开发公司的一大追求&#xff0c;为了可以为用户带来更好的游戏体验&#xff0c;这就需要对游戏 APP开发进行创新设计。那么&#xff0c;游戏 APP开发中的创新设计是什么呢&#xff1f;接下来&#xff0c;我们就一起来看看吧。 想要…

mongodb docker 及常用命令

MongoDB属于非关系型数据库&#xff0c;它是由C编写的分布式文档数据库。内部使用类似于Json的bson二进制格式。 中文手册 https://www.w3cschool.cn/mongodb/ 安装 https://www.mongodb.com/try/download/community 二进制安装可见另一篇&#xff1a; centos7 mongodb 4.0.28…

SSL原理详解

SSL协议结构&#xff1a; SSL协议分为两层&#xff0c;下层为SSL记录协议&#xff0c;上层为SSL握手协议、SSL密码变化协议和SSL警告协议。 1.下层为SSL记录协议&#xff0c;主要作用是为高层协议提供基本的安全服务 建立在可靠的传输之上&#xff0c;负责对上层的数据进行分块…

Vue3+Vite+TypeScript常用项目模块详解

目录 1.Vue3ViteTypeScript 概述 1.1 vue3 1.1.1 Vue3 概述 1.1.2 vue3的现状与发展趋势 1.2 Vite 1.2.1 现实问题 1.2 搭建vite项目 1.3 TypeScript 1.3.1 TypeScript 定义 1.3.2 TypeScript 基本数据类型 1.3.3 TypeScript语法简单介绍 2. 项目配置简单概述 2.…

小白到运维工程师自学之路 第六十三集 (dockerfile安装sshd、httpd、nginx)

一、概述 Dockerfile的指令根据作用可以分为两种&#xff0c;构建指令和设置指令。构建指令用于构建image&#xff0c;其指定的操作不会在运行image的容器上执行&#xff1b;设置指令用于设置image的属性&#xff0c;其指定的操作将在运行image的容器中执行。 1、FROM 镜像:T…

em3288 linux_4.19 sd卡调试

默认配置&#xff0c;根据实际配置即可。

Maven-学习笔记

文章目录 1. Maven简介2.Maven安装和基础配置3.Maven基本使用4.Maven坐标介绍 1. Maven简介 概念 Maven是专门用于管理和构建Java项目的工具 主要功能有: 提供了一套标准化的项目结构提供了一套标准化的构建流程&#xff08;编译&#xff0c;测试&#xff0c;打包&#xff0c;…

语音识别 — 特征提取 MFCC 和 PLP

一、说明 语音识别是一种技术&#xff0c;通过计算机和软件系统&#xff0c;将人们的口头语言转换为计算机可读的文本或命令。它使用语音信号处理算法来识别和理解人类语言&#xff0c;并将其转换为计算机可处理的格式。语音识别技术被广泛应用于许多领域&#xff0c;如语音助手…

什么是图像特征?如何让计算机理解图像特征?

图像的特征 大多数人都玩过拼图游戏。首先拿到完整图像的碎片&#xff0c;然后把这些碎片以正确的方式排列起来从而重建这幅图像。如果把拼图游戏的原理写成计算机程序&#xff0c;那计算机就也会玩拼图游戏了。 在拼图时&#xff0c;我们要寻找一些唯一的特征&#xff0c;这…

企业AD域管理:ADManager Plus助您轻松掌控全局

在现代企业中&#xff0c;Active Directory&#xff08;AD&#xff09;域是一个至关重要的组成部分。它作为一种身份验证和授权机制&#xff0c;管理着企业网络中的用户、计算机、组和其他资源。然而&#xff0c;随着企业规模和复杂性的不断增长&#xff0c;AD域的管理变得越来…

ELK 企业级日志分析系统(一)

目录 一、ELK 简介 1.1 组件说明 1.2 为什么要使用ELK 1.3 完整日志系统的基本特征 1.4 ELK工作原理 二、Elasticsearch的介绍 2.1 Elasticsearch的核心: 三、Logstash 3.1 Logstash简介 四、Kibana 五、部署ELK日志分析系统 5.1 服务器配置 5.2 ELK Elasticse…

苹果电脑系统优化工具:Ventura Cache Cleaner for mac

Ventura Cache Cleaner for Mac是一款专门为苹果电脑开发的系统优化工具&#xff0c;旨在帮助用户清理和优化Mac电脑&#xff0c;提高系统性能和速度。该软件由美国公司Northern Softworks开发&#xff0c;已经推出了多个版本&#xff0c;适用于不同版本的Mac操作系统。 Ventu…

常见OOM异常分析排查

常见OOM异常分析排查 Java内存溢出Java堆溢出原因解决思路总结 Java内存溢出 java堆用于存储对象实例,如果不断地创建对象,并且保证GC Root到对象之间有可达路径,垃圾回收机制就不会清理这些对象,对象数量达到最大堆的容量限制后就会产生内存溢出异常. Java堆溢出原因 无法在…

【IMX6ULL驱动开发学习】21.Linux驱动之PWM子系统(以SG90舵机为例)

1.设备树部分 首先在 imx6ull.dtsi 文件中已经帮我们定义好了一些pwm的设备树节点&#xff0c;这里以pwm2为例 pwm2: pwm02084000 {compatible "fsl,imx6ul-pwm", "fsl,imx27-pwm";reg <0x02084000 0x4000>;interrupts <GIC_SPI 84 IRQ_TYP…