📅  最后修改于: 2023-12-03 14:51:54.536000             🧑  作者: Mango
在许多 web 应用程序中,日历是必不可少的一部分。为了提高用户体验,我们可以使用 JavaScript 在单击图标时显示日历。
在开始编写代码之前,我们需要引入一些依赖项。首先,我们需要一个日历库。推荐使用 FullCalendar,它具有灵活的配置选项和功能。其次,我们需要引入 jQuery 库,因为 FullCalendar 需要依赖于它。
<!-- 引入 FullCalendar 和 jQuery 库 -->
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/fullcalendar/3.10.2/fullcalendar.min.css" integrity="sha512-fcTYyVGWeqxpbboC0olX+EfO7f1KazOzg+iJ+Yk5421omTHOu8WjJl7v4H4iclQyn7VDBJ25gUfN6e5SztYiwg==" crossorigin="anonymous" />
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js" integrity="sha512-aqhy///z1l5DAmKJgB+C0NcltRMynQ/aQThNwIMYShN/auPbI7kOy22M21QSrPUKlJDbzE7jJ8xFh+mqdAaJLw==" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.29.1/moment.min.js" integrity="sha512-or7v3B+tKoMaVIp4u6OZU1PxkBK6WCFY73H5S1RS5g5Oy3hjA/TblL61usPbc0ti/7jtF1WMTw1d0f+xNzxNvQ==" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/fullcalendar/3.10.2/fullcalendar.min.js" integrity="sha512-csCVJcGikp9XJCzKBxq3++LwHHHr/WrjmIVgRI1RFOEGfMxdFzMTT/9EiPzLZsi8tBUd/hwA0NtUTsAg0xm1pA==" crossorigin="anonymous"></script>
接下来,我们需要编写一个包装日历的 <div>
,以及一个用于触发日历的图标。我们可以使用 Font Awesome 提供的免费图标。
<div id="calendarWrapper">
<i id="calendarIcon" class="fas fa-calendar-alt"></i>
<div id="calendar"></div>
</div>
在 HTML 中添加完元素后,我们需要编写一些 JavaScript 代码,以便在单击图标时显示和隐藏日历。
首先,我们需要配置 FullCalendar。此处我们使用了 selectable: true
来允许用户选择日期范围。
$('#calendar').fullCalendar({
selectable: true,
header: {
center: 'title'
}
});
接下来,我们需要编写一些 JavaScript 代码,以显示和隐藏日历。
$('#calendarIcon').click(function () {
$('#calendar').toggle();
});
$(document).click(function(e) {
if (!$(e.target).closest('#calendarWrapper').length) {
$('#calendar').hide();
}
});
首先,我们在图标上绑定了一个单击事件,该事件会触发显示或隐藏日历(通过 toggle()
方法)。
然后,我们监听整个文档的单击事件。如果用户单击了其他地方,我们也会隐藏日历(通过 hide()
方法)。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>JavaScript Calendar</title>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/fullcalendar/3.10.2/fullcalendar.min.css" integrity="sha512-fcTYyVGWeqxpbboC0olX+EfO7f1KazOzg+iJ+Yk5421omTHOu8WjJl7v4H4iclQyn7VDBJ25gUfN6e5SztYiwg==" crossorigin="anonymous" />
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.2/css/all.min.css" integrity="sha512-G1DJF/8Ks+PfEJ/AkNgMi1cJp/mhcaKOzCcpJEKolrl9YLJLLv2nWbeiuAK7nF+hhbUdar7VjiRg6+ar7VakEw==" crossorigin="anonymous" />
<style>
#calendarWrapper {
position: relative;
}
#calendar {
position: absolute;
top: 30px;
right: 0;
z-index: 1;
display: none;
background-color: #fff;
box-shadow: 0px 8px 16px 0px rgba(0, 0, 0, 0.2);
padding: 20px;
}
</style>
</head>
<body>
<div id="calendarWrapper">
<i id="calendarIcon" class="fas fa-calendar-alt"></i>
<div id="calendar"></div>
</div>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js" integrity="sha512-aqhy///z1l5DAmKJgB+C0NcltRMynQ/aQThNwIMYShN/auPbI7kOy22M21QSrPUKlJDbzE7jJ8xFh+mqdAaJLw==" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.29.1/moment.min.js" integrity="sha512-or7v3B+tKoMaVIp4u6OZU1PxkBK6WCFY73H5S1RS5g5Oy3hjA/TblL61usPbc0ti/7jtF1WMTw1d0f+xNzxNvQ==" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/fullcalendar/3.10.2/fullcalendar.min.js" integrity="sha512-csCVJcGikp9XJCzKBxq3++LwHHHr/WrjmIVgRI1RFOEGfMxdFzMTT/9EiPzLZsi8tBUd/hwA0NtUTsAg0xm1pA==" crossorigin="anonymous"></script>
<script>
$('#calendar').fullCalendar({
selectable: true,
header: {
center: 'title'
}
});
$('#calendarIcon').click(function () {
$('#calendar').toggle();
});
$(document).click(function (e) {
if (!$(e.target).closest('#calendarWrapper').length) {
$('#calendar').hide();
}
});
</script>
</body>
</html>
使用 JavaScript 在单击图标时显示日历是一个很常见的需求。通过使用 FullCalendar 库和一些简单的 JavaScript 代码,我们可以轻松地实现这个功能。