【前端】html+js+css實現日曆,jquery+js實現監聽點選
阿新 • • 發佈:2020-12-28
技術標籤:前端
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Index</title>
<script src="../../static/js/jquery.min.js"></script>
</head>
<style>
*{
padding: 0;
margin : 0;
}
.calendar{
width:253px;
height:250px;
background:#fff;
box-shadow:0px 1px 1px rgba(0,0,0,0.1);
padding: 12px;
}
.body-list ul{
width:100%;
font-family:arial;
font-weight:bold;
font-size:14px;
}
.body-list ul li {
width:26px;
height:26px;
margin: 5px;
line-height:26px;
list-style-type:none;
display:block;
box-sizing:border-box;
float:left;
text-align:center;
cursor: pointer;
transition: 0.3ms;
border-radius: 50%;
}
.body-list ul li:hover{
color: #6ac13c;
border:1px solid #6ac13c;
background:#e9f8df; /*淺綠色背景*/
}
.lightgrey{
color:#a8a8a8; /*淺灰色*/
}
.darkgrey{
color:#565656; /*深灰色*/
}
.green{
color:#6ac13c!important; /*綠色*/
border:1px solid #6ac13c;
background:#e9f8df; /*淺綠色背景*/
}
</style>
<body>
<!-- 資料,包含,選中的資料,和全部的資料,選中的資料如果沒有引數,則就是空物件 -->
<div class="calendar">
<div class="title" style="font-size: 10px">
<!-- <h1 class="green" id="calendar-title">Month月</h1>-->
<h2 class="green small" id="calendar-year-month">Year年</h2>
<a href="" id="prev">Prev Month</a>
<a href="" id="next">Next Month</a>
</div>
<div class="body">
<div class="lightgrey body-list">
<ul>
<li>MON</li>
<li>TUE</li>
<li>WED</li>
<li>THU</li>
<li>FRI</li>
<li>SAT</li>
<li>SUN</li>
</ul>
</div>
<div class="darkgrey body-list">
<ul id="days">
</ul>
</div>
</div>
</div>
<script type="text/javascript">
var month_olympic = [31,29,31,30,31,30,31,31,30,31,30,31];
var month_normal = [31,28,31,30,31,30,31,31,30,31,30,31];
var month_name = ["1","2","3","4","5","6","7","8","9","10","11","12"];
var holder = document.getElementById("days");
var prev = document.getElementById("prev");
var next = document.getElementById("next");
// var ctitle = document.getElementById("calendar-title");
var cyear = document.getElementById("calendar-year-month");
var my_date = new Date();
var my_year = my_date.getFullYear();
var my_month = my_date.getMonth();
var my_day = my_date.getDate();
//獲取某年某月第一天是星期幾
function dayStart(month, year) {
var tmpDate = new Date(year, month, 1);
return (tmpDate.getDay());
}
//計算某年是不是閏年,通過求年份除以4的餘數即可
function daysMonth(month, year) {
var tmp = year % 4;
if (tmp === 0) {
return (month_olympic[month]);
} else {
return (month_normal[month]);
}
}
function refreshDate(){
var str = "";
var totalDay = daysMonth(my_month, my_year); //獲取該月總天數
var firstDay = dayStart(my_month, my_year); //獲取該月第一天是星期幾
var myclass;
for(var i=1; i<firstDay; i++){
str += "<li></li>"; //為起始日之前的日期建立空白節點
}
//根據下面方法得到的資料,如果是今天之後的資料,則顯示藍色表示可以修改。
//如果是以前完成過的資料,則顯示綠色的勾勾
for(var i=1; i<=totalDay; i++){
if((i<my_day && my_year==my_date.getFullYear() && my_month==my_date.getMonth()) || my_year<my_date.getFullYear() || ( my_year==my_date.getFullYear() && my_month<my_date.getMonth())){
myclass = " class='lightgrey'"; //當該日期在今天之前時,以淺灰色字型顯示
}else if (i==my_day && my_year==my_date.getFullYear() && my_month==my_date.getMonth()){
myclass = " class='green lightgrey'"; //當天日期以綠色背景突出顯示
}else{
myclass = " class='darkgrey'"; //當該日期在今天之後時,以深灰字型顯示
}
str += "<li"+myclass+">"+i+"</li>"; //建立日期節點
}
holder.innerHTML = str; //設定日期顯示
// ctitle.innerHTML = month_name[my_month]; //設定英文月份顯示
cyear.innerHTML = my_year+"年"+month_name[my_month]+"月"; //設定年份顯示
let itemli = $("#days>li");
console.log(itemli)
//每個都可以點
for(var i = 0; i<itemli.length; i++){
itemli[i].index = i; //給每個li定義一個屬性索引值
itemli[i].onclick = function(){
console.log(this.index+" "+this.innerHTML);
}
}
}
refreshDate(); //執行該函式
//每次切換都得到這一個月的資料,上面,如果這個月完成過,則變為對勾,否則顯示日期
prev.onclick = function(e){
e.preventDefault();
my_month--;
if(my_month<0){
my_year--;
my_month = 11;
}
//得到資料
refreshDate();
}
next.onclick = function(e){
e.preventDefault();
my_month++;
if(my_month>11){
my_year++;
my_month = 0;
}
//得到資料
refreshDate();
}
// document.getElementsByTagName("li")
</script>
</body>
</html>