-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathscript.js
More file actions
234 lines (179 loc) · 9.49 KB
/
script.js
File metadata and controls
234 lines (179 loc) · 9.49 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
let showDatePrev = document.querySelector(".showDatePrev"); // над календарём дата предыдущего месяца
let showDateNow = document.querySelector(".showDateNow"); // над календарём дата текщего месяца
let showDateNext = document.querySelector(".showDateNext"); // над календарём дата следующего месяца
let months = ["January", "February", "March", "April", "May", "June",
"July", "August", "September", "October", "November", "December"];
let dayName = ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"];
let btnPrev = document.querySelector(".month-prev"); // кнопка перехода на предыдущий месяц
let btnNext = document.querySelector(".month-next"); // кнопка перехода на следущий месяц
let monthNow = document.querySelector(".month-current__dates"); // поле календаря для ячеек с датами
let monthPrev = document.querySelector(".month-prev__dates"); // даты предыдущего месяца
let monthNext = document.querySelector(".month-next__dates"); // даты следующего месяца
let btnToday = document.querySelector(".btn-today"); // кнопка перехода на текущий месяц
let selectedYear, yearToday;
let selectedMonth, monthToday;
let selectedDate, dateToday;
let value = document.getElementById("nr").value; // значение цвета по HSL, по ползунку
// ====== выводим названия дней недели из массива =======
createWeek(showDatePrev);
createWeek(showDateNow);
createWeek(showDateNext);
function createWeek(month) {
let week = document.createElement("div");
week.className = "month__week";
month.after(week);
// названия дней недели <div class="month__week-day">
for (var dn = 0; dn < 7; dn++) {
let weekDay = document.createElement("div");
if (dn == 0 || dn == 6) {
weekDay.className = "month__week-day holiday";
} else {
weekDay.className = "month__week-day";
};
weekDay.innerText = dayName[dn];
week.append(weekDay);
}
}
// ================= отображаем текущий месяц в календаре ===========================
showCurrentMonth();
// ==================== ползунок =================================
function catchColor() {
value = document.getElementById("nr").value;
checkDisplayToday();
btnToday.style.color = "hsl("+value+", 100%, 50%)";
showDateNow.style.color = "hsl("+value+", 100%, 50%)";
showDatePrev.style.color = "hsl("+value+", 100%, 50%)";
showDateNext.style.color = "hsl("+value+", 100%, 50%)";
};
// ================= вычисляем сегодняшнюю дату и отображаем 3 месяца
function showCurrentMonth() {
let today = new Date(); // определяем текущую дату
selectedYear = yearToday = today.getFullYear();
selectedMonth = monthToday = today.getMonth();
selectedDate = dateToday = today.getDate();
showSelectedMonth(yearToday, monthToday, dateToday, monthNow, showDateNow); // текущий месяц
showSelectedMonth(yearToday, monthToday-1, dateToday, monthPrev, showDatePrev); // предыдущий месяц
showSelectedMonth(yearToday, monthToday+1, dateToday, monthNext, showDateNext); // следующий месяц
checkDisplayToday();
}
// ============ клик на кнопку ПРЕДЫДУЩИЙ месяц ================
btnPrev.onclick = function() {
selectedMonth--;
showAnotherMonth();
}
// ============ клик на кнопку СЛЕДУЮЩИЙ месяц ================
btnNext.onclick = function() {
selectedMonth++;
showAnotherMonth();
}
function showAnotherMonth() {
showSelectedMonth(selectedYear, selectedMonth, selectedDate, monthNow, showDateNow); // текущий месяц
showSelectedMonth(selectedYear, selectedMonth-1, selectedDate, monthPrev, showDatePrev); // предыдущий
showSelectedMonth(selectedYear, selectedMonth+1, selectedDate, monthNext, showDateNext); // следующий
checkDisplayToday();
}
// ============ клик на кнопку перехода на текущий месяц ================
btnToday.onclick = function() {
showCurrentMonth();
}
// ================ задаём цвет сегодняшнего числа, если оно отображается в одном из месяцев ===========
function checkDisplayToday() {
let dayToday = document.querySelector(".today"); // число сегодня на календаре
if (dayToday != null) {
dayToday.style.color = "hsl("+value+", 100%, 50%)";
}
}
// ================== отображаем выбранный месяц в календаре =================================== //
function showSelectedMonth(year, month, date, dates, showDateBlock) {
dates.innerHTML = ""; // очищаем календарь от предыдущего кода
let myDate = new Date(year, month, date); // вводим любую дату
let myYear = myDate.getFullYear(); // год
let iMonth = myMonth = myDate.getMonth(); // месяц текущий и для сравнения
// выводим сообщение и сегодняшнюю дату в кнопке возврата
btnToday.innerText = "Go on Today: "+dateToday+" "+months[monthToday]+" "+yearToday;
// название месяца и год над календарем
if (showDateBlock == showDatePrev) {
showDateBlock.innerText = "<< "+months[myMonth]+" "+myYear;
} else if (showDateBlock == showDateNext) {
showDateBlock.innerText = months[myMonth]+" "+myYear+" >>";
} else {
showDateBlock.innerText = " "+months[myMonth]+" "+myYear+" ";
}
// =========== определяем количество дней в текущем месяце ===========
let iDay = 28; // переменная для цикла
let numDays; // количество дней в текущем месяце в итоге
while (iMonth == myMonth) {
iDay++;
iMonth = (new Date(myYear, myMonth, iDay)).getMonth();
}
numDays = iDay - 1; // получаем количество дней в текущем месяце
// console.log("всего в текущем Month дней = ", numDays);
// ======== получаем номер (0-6) 1-го дня недели в выбранном месяце
let firstDay = (new Date(year, month, 1)).getDay();
// console.log("номер 1го дня месяца = ", firstDay);
// !!! это же число и будет равно числу дней предыдущего месяца до 1-го числа выбранного месяца
// ========= получаем номер последнего дня недели в выбранном месяце
let lastDay = (new Date(year, month, numDays)).getDay();
// console.log("номер последнего дня месяца = ", lastDay);
let i=1;
// ===== ВЫВОДИМ ЯЧЕЙКУ предыдущего дня предыдущего месяца <div class="month__day disabled">дата</div>
while (i <= firstDay) {
let prevDate = (new Date(year, month, 1 - i)).getDate(); //получаем дату -1 дня
let itemDay = document.createElement("div");
itemDay.className = "month__day disabled";
itemDay.innerText = prevDate;
dates.prepend(itemDay);
i++;
}
// ===== ВЫВОДИМ ЯЧЕЙКИ дней текущего месяца <div class="month__day">дата</div>
let j=1;
while (j <= numDays) {
let itemDay = document.createElement("div");
// находим совпадение с сегодняшней датой
if (myYear == yearToday && myMonth == monthToday && j == dateToday) {
itemDay.className = "month__day today";
} else {
itemDay.className = "month__day";
}
itemDay.innerText = j;
dates.append(itemDay);
j++;
}
// ===== ВЫВОДИМ ЯЧЕЙКУ следущего дня следущего месяца <div class="month__day disabled">дата</div>
let diff = 6 - lastDay; // сколько надо добавить ячеек до конца недели
let d = 1;
while (d <= diff) {
let itemDay = document.createElement("div");
itemDay.className = "month__day disabled";
itemDay.innerText = d;
dates.append(itemDay);
d++;
}
}
// ============================= Black Theme ==================================
let mainBlock = document.querySelector('body'); // body
let dayItem = document.querySelector('.month__day'); // ячейка дня
function changeTheme(){
let dayToday = document.querySelector('.today'); // сегодняшнее число
let blackTheme = document.getElementById('blackTheme'); // checkbox" id="blackTheme"
if (blackTheme.checked) {
console.log("blackTheme value = black theme");
mainBlock.style.color = "white";
mainBlock.style.background = "black";
btnToday.classList.add("btn-black");
} else {
console.log("blackTheme value = light theme");
mainBlock.style.color = "black";
mainBlock.style.background = "white";
btnToday.classList.remove("btn-black");
}
}
// ======================================================================================================
// это если захочется время выводить:
// let hours = date.getHours();
// let minutes = date.getMinutes();
// let seconds = date.getSeconds();
// if (hours < 10) hours = "0" + hours;
// if (minutes < 10) minutes = "0" + minutes;
// if (seconds < 10) seconds = "0" + seconds;
//document.querySelector("#time").innerText = hours + ":" + minutes + ":" + seconds;