Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/ramonsouzaaa/relogiojs
Relógio JS
https://github.com/ramonsouzaaa/relogiojs
css3 html5 javascript vercel
Last synced: 10 days ago
JSON representation
Relógio JS
- Host: GitHub
- URL: https://github.com/ramonsouzaaa/relogiojs
- Owner: RamonSouzaaa
- Created: 2022-10-07T00:46:00.000Z (over 2 years ago)
- Default Branch: master
- Last Pushed: 2023-01-22T17:48:11.000Z (about 2 years ago)
- Last Synced: 2023-05-25T15:29:22.149Z (over 1 year ago)
- Topics: css3, html5, javascript, vercel
- Language: JavaScript
- Homepage: https://relogiojs-rose.vercel.app/
- Size: 35.2 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Relógio 🕓
Olá tudo bem?
Neste projeto fui desafiado por mim mesmo, como seria criar um relógio digital e analógico
utilizando HTML, CSS, e JavaScript?[Link do projeto](https://relogiojs-rose.vercel.app/)
![Projeto](https://github.com/RamonSouzaaa/relogiojs/blob/master/projeto.PNG)
# Relógio Analógico
Primeira etapa foi pensar como funcionária a rotação dos ponteiros, pesquisando um pouco e
com mais alguns conhecimento agregados encontrei
a solução utilizando `transform-origin: bottom` e `transform: rotate()`. Após entender como
essas duas propriedades funcionam foi hora de pensar qual o valor em graus equivalente a cada
casa do relógio, com isso primeiro pensei qual o espaço entre um grau e outro quando passado para
a próxima casa quando iniciado no grau 0.#
Utilizando essa formúla abaixo consegui entender que o ponteiro dos segundos e minutos deveriam obter um salto de `6 deg`
entre as casas, dessa forma inicia-se `0 deg` e segue `6 deg, 12 deg, 18 deg..` até `360 deg` quanto volta para `0 deg` novamente.
`let saltoGrauMinutoSegundo = (360/60)`
Diferente dos segundos utilizei `12` equivalente a quantidade de horas do relógio para descobrir o valor em graus que deve ser realizado entre uma casa de hora e outra,
sendo assim obtive o valor `30 deg`.
```
let saltoGrauHora = (360/12)
```
Depois de obter os saltos entre minutos segundos e horas e os valores em graus faltou criar os contadores para cada item,
para que dessa forma pudesse incrementar os minutos, segundos e horas automáticamente atravez do `setInterval`.
```
function getGrausSegundoMinuto(valor){
return (360 * valor) / 60
}function getGrausHora(valor) {
if(valor > 12){
valor = 12 - (24 - valor)
}return (360 * valor) / 12
}
let data = new Date()
let contadorGrausSegundo = getGrausSegundoMinuto(data.getSeconds())
let contadorGrausMinuto = getGrausSegundoMinuto(data.getMinutes())
let contadorGrausHora = getGrausHora(data.getHours())
```
Agora com todas as informações necessárias para criar o relógio foi apenas criar o controle de visualização atualizando as
informações dos ponteiros de segundo em segundo.
```
setInterval(() => {
..
..
}, 1000)
```
Para cada ponteiro (Hora, Minuto e Segundo) foi manipulado atualizando o valor de rotação alterando a propriedade transform do elemento
```
document.querySelector('.ponteiroSegundo').style.transform = `rotate(${contadorGrausSegundo}deg)`
document.querySelector('.ponteiroMinuto').style.transform = `rotate(${contadorGrausSegundo}deg)`
document.querySelector('.ponteiroHora').style.transform = `rotate(${contadorGrausSegundo}deg)`
```
E por fim para todos os ponteiros foi feito a validação quando obtive o valor em graus `360` o valor dos contadores de graus seria `0` para
que pudesse realizar a rotação novamente no sentido horário.
```
if(contadorGrausSegundo === 360){
contadorGrausSegundo = 0
}if(contadorGrausMinuto === 360){
contadorGrausMinuto = 0
}if(contadorGrausHora === 360){
contadorGrausHora = 0
}```
# Relógio DigitalDiferente do relógio análógico foi muito mais tranquilo de pensar na lógica para o relógio digital, foi iniciado
três contadores de hora, minuto e segundo obtendo o valores de hora atual do servidor e incluídos no `setInterval`
e cada interação o valores de hora, minuto e segundo são obtidos.
```
let data = new Date()
let contadorSegundo = data.getSeconds()
let contadorMinuto = data.getMinutes()
let contadorHora = data.getHours()
```Por fim os valores dos contadores são atualizados nos elementos do relógio digital
```
document.querySelector('.marcadorSegundo').innerHTML = formatDuasCasas(contadorSegundo)
document.querySelector('.marcadorMinuto').innerHTML = formatDuasCasas(contadorMinuto)
document.querySelector('.marcadorHora').innerHTML = formatDuasCasas(contadorHora)
```