TimeOut Funktion

crazy_chicken

Erfahrenes Mitglied
Hallo Zusammen,

ich habe versucht sowas zu machen, aber setInterval() ignoriert die Zeit und ruft die methode sofort auf, weiß jemand wieso?


Code:
$(window).load(function(){ navi.main(); });



navi = {      
   
             main:function(){
                    $this = this;
                     $('#next').click(function(){
                         $this.openNavi(0, 100);
                     });
                   
                    
                 },
                 
                 openNavi:function(curHight, maxHeight){
                   if(curHight<maxHeight){
                      $('#points').height(curHight+5);
                      setInterval(this.openNavi(curHight+5, maxHeight), 1000);
                   }
                   
                 }
          
    }

Danke schon mal!
 
Um genau zu sein, kann das, was du da geschrieben hast, gar nicht funktionieren, weil du so keine Parameter einer Callback-Funktion übergeben kannst. Das geht so:
Javascript:
$(function () {
  Navi.main();
});

Navi = {
  'main' : function () {
    var self = this;
    $('#next').on('click', function () {
      self.openNavi(0, 100);
    });
  },

  'openNavi' : function (curHeight, maxHeight) {
    if (curHeight < maxHeight) {
      var self = this;
      $('#points').height(curHeight + 5);
      
      setInterval(function () {
        self.openNavi(curHeight + 5, maxHeight);
      }, 1000);
    }
  }
};
Abgesehen davon, erzeugst du ihr eine Race-Condition. Das soll heißen, dass du hier rekursiv immer wieder neue Intervalle festlegst, die sich gegenseitig aufrufen und dabei die Werte ändern. Daraus folgt, dass in einem Intervall-Aufruf bereits die aktuelle Höhe der maximalen Höhe entspricht (oder größer ist), aber in einem anderen Aufruf dies noch nicht passiert. Daher würde ich dir empfehlen, dass du das wie folgt löst:
Javascript:
var interval = setInterval(function () {
  if (curHeight < maxHeight) {
    curHeight = curHeight + 5;
    $('#points').height(curHeight);
  } else {
    clearInterval(interval);
  }
}, 1000);
Und da du schon jQuery nutzt, empfehle ich dir auch, dass du das sauber mit Methoden wie animate() löst.
 
Zuletzt bearbeitet:

Neue Beiträge

Zurück