lundi 5 juillet 2021

JavaScript problem adding a class to HTML

Good day

I am starting to practice with JavaScript and recently I mounted a simple digital clock using the local time of my pc, I have proposed to add something else to it, to show me the current day in which we are, I want to achieve this with a single tag <p> where it contains the days: Mon - Tue - Wed - Thu - Fri - Sat - Sun, The idea is to apply a different style to the current day using a <span> tag, I do not know if it is the correct way to do it or if there is a more efficient way that consumes less resources and I would like you to help me with this to improve my code .

My current problem boils down to somehow that I am misusing the Element.classList.add (" class "); and I can't update the class of my element.

I attach my code:

"use strict";

const hour = document.getElementById("hour");
const date = document.getElementById("date");
const days = document.getElementById("day");

let daysString = '<span id="mon"> Mon </span> - <span id="tue"> Tue </span> - <span id="wed"> Wed </span> - ' + 
'<span id="thu">Thu </span> - <span id="fri"> Fri </span> - <span id="sat"> Sat </span> - <span id="sun"> Sun </span>';

const nameMonths = ["January","February","March","April","May","June","July",
                    "August","September","October","November","December"];

days.innerHTML = daysString;

const getTime = ()=>{

    const local = new Date();

    let day = local.getDate(),
        month = local.getMonth(),
        year = local.getFullYear();

    let getTime = local.toLocaleTimeString('en-US', { hour: 'numeric', minute: 'numeric', second: 'numeric',
    hour12: true });

    let time = getTime.slice(0, -2);
    let moment = getTime.slice(-2);

    hour.innerHTML = `${time} <span class="ampm">${moment[0]}.${moment[1]}.</span>`;

    fecha.innerHTML = `${day} / ${nameMonths[month]} / ${year}`;

    // ------------------------------------------------------------------------------------------------------------

    let d = local.getDay();
    let finalDays = daysString;
    days.innerHTML = finalDays;
    let currentDay;

    switch(d){

        case 0:
       
        currentDay = document.getElementById("sun");
        currentDay.classList.add("active-day");

        break;

        case 1:

        currentDay = document.getElementById("mon");
        currentDay.classList.add("active-day");

        break;

        case 2:

        currentDay = document.getElementById("tue");
        currentDay.classList.add("active-day");

        break;

        case 3:
 
        currentDay = document.getElementById("wed");
        currentDay.classList.add("active-day");

        break;

        case 4:

        currentDay = document.getElementById("thu");
        currentDay.classList.add("active-day");

        break;

        case 5:

        currentDay = document.getElementById("fri");
        currentDay.classList.add("active-day");
        

        break;

        case 6:
        
        currentDay = document.getElementById("sat");
        currentDay.classList.add("active-day");

        break;

        default:
            
            finalDays = daysString;

    } 

    days.innerHTML = finalDays;

}

getTime();

setInterval(getTime,1000);
* {

  margin: 0;
  padding: 0;

}

body{

  background: url(background2.jpg) no-repeat center center fixed;
  background-size: cover;
  height: 100vh;
  display: flex;
  justify-content: center;
  align-items: center;
  font-family: 'lato';

}

.container-clock{

  text-align: center;
  color: #fff;
  

}

.container-clock h1{

  font-size: 12rem;
  font-weight: 400;
  text-shadow: 0 0 20px #409CFA;

}

.dates{

  font-size: 2.5rem;
  font-family: Verdana, Geneva, Tahoma, sans-serif;
  text-shadow: 0 0 10px #409CFA;

}

.days{

  font-size: 1.5rem;
  font-family: Verdana, Geneva, Tahoma, sans-serif;
  color: rgb(155, 155, 155);
  text-shadow: 0 0 8px #409CFA;

}

.active-day{

  color: #fff;
  text-shadow: 0 0 10px #409CFA;
  font-size: 2rem;

}

.ampm{

  font-size: 5rem;

}
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link rel="stylesheet" href="style.css">
    <title>Digital clock</title>
</head>
<body ondragstart="return false" onselectstart="return false" oncontextmenu="return false">

    <div class="container-clock">

        <h1 id="hour">00:00:00</h1>
        <p id="date" class="dates">date</p>
        <br><br>
        <p id="day" class="days">day-day-day-day-day-day-day</p>

    </div>
    
    <script src="clock.js"></script>

</body>
</html>

I can not get the desired effect since I can not add the desired class to the elements, I would appreciate whoever tells me that I am doing wrong.

In the same way, I would appreciate any advice and / or ideas on how to improve this code, for example, I understand that it would be better to use if / else thanswitch ()since it consumes less resources.

I have also realized that I am not deleting the active day class when the day ends at 23:59, in the same way at the moment there is no class to replace or delete until I solve my problem.

Thank you very much in advance to anyone who can help me!




Aucun commentaire:

Enregistrer un commentaire