Setas para mudar o mês no calendário em JavaScript
Agora vamos adicionar setas abaixo do calendário para mudar o mês. Vamos fazer alterações no código HTML:
<div id="parent">
<div id="calendar">
<div class="info">Jan 2020</div>
<table>
<thead>
<tr>
<th>seg</th>
<th>ter</th>
<th>qua</th>
<th>qui</th>
<th>sex</th>
<th>sáb</th>
<th>dom</th>
</tr>
</thead>
<tbody class="body"></tbody>
</table>
<div class="nav">
<a href="#" class="prev">←</a>
<a href="#" class="next">→</a>
</div>
</div>
</div>
Vamos fazer alterações no código CSS:
#parent {
text-align: center;
}
#calendar {
display: inline-block;
}
#calendar td, #calendar th {
padding: 10px;
border: 1px solid black;
text-align: center;
}
#calendar .nav, #calendar .info {
text-align: center;
}
#calendar a {
color: blue;
font-size: 25px;
text-decoration: none;
}
#calendar a:hover {
color: red;
}
#calendar .active {
color: red;
}
Vamos obter as referências para as setas em variáveis:
let prev = calendar.querySelector('.prev');
let next = calendar.querySelector('.next');
Discussão
Agora vamos discutir como resolver a tarefa.
Na verdade, o código do nosso calendário foi escrito
de forma facilmente extensível: temos a função draw,
que desenha o calendário para um determinado mês.
Assim, ao clicar em uma seta, podemos
redesenhar o calendário com um número de mês diferente
(e possivelmente ano).
Aqui está um exemplo do que podemos fazer ao clicar na seta do próximo mês:
next.addEventListener('click', function() {
draw(body, getNextYear(year, month), getNextMonth(month));
});
Como você pode ver, aqui são usadas as funções
getNextYear e getNextMonth.
Vamos discutir o que elas devem fazer.
Como o nome sugere, a função getNextYear
obtém o próximo ano. Isso significa que,
se agora é dezembro, ao mudar para o próximo mês
o ano deve aumentar em 1. Se não for dezembro,
a função simplesmente deve retornar o ano atual.
A função getNextMonth deve obter
o próximo mês. Para todos os meses, exceto
dezembro, ela adicionará um ao número do mês.
E para dezembro, o próximo mês
será janeiro com o número 0.
Operações semelhantes devem ser feitas ao clicar no botão do mês anterior:
prev.addEventListener('click', function() {
draw(body, getPrevYear(year, month), getPrevMonth(month));
});
Implemente a funcionalidade dos botões de mudança de mês.
Faça com que a informação acima do calendário corresponda ao mês e ano exibidos.