• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Dlaczego ten stoper nie działa w tle?

Object Storage Arubacloud
0 głosów
249 wizyt
pytanie zadane 23 marca 2020 w JavaScript przez Grzegorz Mikina Dyskutant (8,060 p.)

Gdy zmieniam kartę przeglądarki stoper przestaje być aktywny i przestaje działać, czy da się to jakoś obejść np. żeby nawet gdy karta jest zminimalizowana stoper w dalszym ciągu działał?
To jest tylko zwykły stoper, w przyszłości chcę aby był częścią większego projektu i np. po otwarciu był zatrzymany w danym momencie i mierzył upływ czasu nad czymś, ale to w przyszłości. Czy da się to jakoś zapisać żeby nie stopował przy nieaktywnym oknie przeglądarki? Tylko wystarczającym powodem do jego działania jest to że został włączony i że okno jest otwarte (może być zminimalizowane, może być inna karta, ale tam odgrywa się jakaś akcja)
Tutaj kod:

<!-- Stoper-->
<!-- Program odmierza czas -->
<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8" />
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  <meta http-equiv="X-UA-Compatible" content="ie=edge" />
  <title>Stoper</title>
</head>
<style>
  * {
    box-sizing: border-box;
    margin: 0;
    padding: 0;
  }

  .time {
    position: absolute;
    width: 100vw;
    top: 50%;
    left: 0;
    transform: translateY(-50%);
    font-size: 60px;
    text-align: center;
    font-family: monospace;
  }

  button {
    font-size: 44px;
    margin: 30px;
    padding: 0 10px;
  }
</style>

<body>
  <button class="main">Start</button>
  <button class="reset">Reset</button>
  <div class="time">
    <p>Czas od startu:</p>
    <div>---</div>
  </div>
</body>
<script src="js/main.js"></script>

</html>

js/main.js

//Stoper
// alert('To działa!');

const btnTime = document.querySelector('.main');
const btnReset = document.querySelector('.reset');
const panel = document.querySelector('.time div');

let time = 0; //setne sekundy
let active = false
let idI; //zmienna przechowująca setInterval

const timer = () => {
    if (!active) {
        active = !active
        btnTime.textContent = 'Pauza';
        idI = setInterval(start, 10); //identyfikator funkcji setInterval podaje jej unikalne id 
    } else {
        active = !active
        btnTime.textContent = 'Start';
        clearInterval(idI)
    }
}

const start = () => {
    time++
    panel.textContent = (time / 100).toFixed(2);
}

const reset = () => {
    time = 0;
    panel.textContent = '---'
    active = !active
    btnTime.textContent = 'Start';
    clearInterval(idI)

}

btnTime.addEventListener('click', timer);
btnReset.addEventListener('click', reset);





 

2 odpowiedzi

+1 głos
odpowiedź 24 marca 2020 przez DawidK Nałogowiec (37,910 p.)

Możesz spróbować czegegoś takiego:

w funkcji timer() dodać na samej górze:

startTime = new Date();

i przebudować funkcje start na (przykład dla sekund i setnych):

const start = () => {
    let currentTime= new Date();
    time = currentTime - startTime;
    panel.textContent = `${(time/1000).toFixed(2)}`
}
0 głosów
odpowiedź 23 marca 2020 przez Grzegorz Mikina Dyskutant (8,060 p.)
Załóżmy siadam rano do pracy i kończę ją po ośmiu godzinach, pracuję nad danym klientem, po skończonym zadaniu wyświetla mi się popup do pobrania. Potrzebuję przeliczenia na roboczo godzinę x kwota brutto za h pracy
komentarz 23 marca 2020 przez Grzegorz Mikina Dyskutant (8,060 p.)
Między czasie mogę działać w innych oknach, także okno pracy nie koniecznie musi być aktywne. Jak to obejść żeby czas liczył się w tle?

Podobne pytania

0 głosów
2 odpowiedzi 239 wizyt
0 głosów
1 odpowiedź 1,471 wizyt
pytanie zadane 5 listopada 2016 w JavaScript przez Radekol Bywalec (2,880 p.)
0 głosów
0 odpowiedzi 180 wizyt

92,556 zapytań

141,404 odpowiedzi

319,563 komentarzy

61,942 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...