setinterval i funkcja która wykona się jednorazowo - jak?

0

Witam, mam pewien kod który wygląda w uproszczeniu

suma = 0;

 function jakaśfunkcja()  {
      if (suma > 10) { dodaj element do strony  }      <----   ??????
      if (suma > 100) { dodaj kolejny element  } 
 }
 
 setInterval(function () {
     suma = suma + 1;
     jakaśfunkcja();
 }, 100);

Jak zrobić aby to dodanie do strony wykonało się tylko raz?
Dodam że suma będzie się co chwilę zmieniać, będzie mniejsza lub większa od tych 'progów' bo będzie od niej odejmowane.

0

Obok zmiennej z suma dać zmienna someFunctionWasExecuted i ustawić ja na false. W funkcji setinterval dać warunek który sprawdzi czy ta zmienna to false i wewnątrz warunku wykonać funkcje i ustawić ww. Zmienna na True.

Ale mimo tego uważam że tu jest coś nie tak z całą logika takiego działania, albo może słabo rozumiem podany przykład. Aaa ok, widzę czyli robisz analogiczne jak podałem. Ew. Bez zmiennej, bo skoro dodajesz jakiś element do strony to wiesz jaki to element (np po id lub innym wyznaczniku), następnie przed dodaniem sprawdzasz czy dany element istnieje

0

Załatw sobie jakieś event emitter. Jeżeli suma bedzie się co chwilę zmieniać, to coś musi ją zmieniać i w tym miejscu, gdzie się zmieni emitujesz event:

$(document).on('sum:change', jakaśfunkcja);

var suma = 0;

setInterval(function () {
    suma = suma + 1;
    $(document).trigger('sum:change', suma); // chyba taki syntax, nie pamiętam
}, 1000);
0

Wg mnie autorowi chodziło raczej o to co siedzi w tej funkcji :)
Jak zrobić aby to dodanie do strony wykonało się tylko raz? - ale to już lepiej niech sam autor sprecyzuje.
A skoro coś dodaje się do strony - to zanim to zostanie można sprawdzić czy dany element już istnieje.

0

czyli chyba taki IF powinien wystarczyć?

if ( document.getElementById(ID) ) {
     NIE DODAWAJ BO JUŻ JEST;
}  else  { dodaj; } 

czy to dobre rozumowanie?

0

Tylko kurde, u mnie to wygląda znaczniej bardziej skomplikowanie bo

function jakaśfunkcja {
    'use strict';
    if (suma === 100) {

/TWORZENIE OBIEKTU A W NIM -> wywołanie funkcji dodającej na stronie pojemniki z ID  + funkcji która je uzupełnia 
        var trzeci = nowyObiekt("trzeci", 500, 10, 0, 1000),              
               czwarty = nowyObiekt("czwarty", 500, 0, 10, 2500);       
    }
}
0

Skoro robisz więcej rzeczy niż dodanie jednego elementu - to zgrupuj te rzeczy w funkcję i tyle. Możesz podać myśl jaka przyświeca temu zadaniu? W sensie - user klika tu i w takim divie pojawia mu się X rzeczy... coś w tym stylu. Ten ostatni kod, jakoś mi średnio dobrze pachnie. Skoro dla jednego lub kilku progów np 100 (suma) masz jakieś bardziej zaawansowane akcje - to zgrupuj je i będziesz miał ładniejszy kod.

Sam początek też mnie zdziwił - w setInterval liczysz sumę czegoś....na podstawie tego dodajesz divy.... Mam też jakieś wrażenie że to jakaś ruletka do CS'a :P

0
axelbest napisał(a):

Skoro robisz więcej rzeczy niż dodanie jednego elementu - to zgrupuj te rzeczy w funkcję i tyle. Możesz podać myśl jaka przyświeca temu zadaniu? W sensie - user klika tu i w takim divie pojawia mu się X rzeczy... coś w tym stylu. Ten ostatni kod, jakoś mi średnio dobrze pachnie. Skoro dla jednego lub kilku progów np 100 (suma) masz jakieś bardziej zaawansowane akcje - to zgrupuj je i będziesz miał ładniejszy kod.

Sam początek też mnie zdziwił - w setInterval liczysz sumę czegoś....na podstawie tego dodajesz divy.... Mam też jakieś wrażenie że to jakaś ruletka do CS'a :P

Piszę własną wersję gry http://orteil.dashnet.org/cookieclicker czyli
klikamy w przycisk co nam daje więcej 'ciasteczek' a za ciasteczka kupujemy ulepszenia, i tak jak w tej grze po określonej ilości ciasteczek wyskakują kolejne dostępne ulepszenia.
Kod wydaje mi się bardzo zgrabny, jak na razie brakuje jedynie trochę elementów graficznych a całość zamyka się w 200 linijkach ;D

1

To ja tylko dodam,że ilość kodu nie zawsze świadczy o jego jakości, tak więc taka porada na przyszłość - nie staraj się programować tak, żeby kodu było najmniej. Staraj się pisać tak, żeby było zgodnie z SOLID, DRY, KISS, YAGNI :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1