2012-04-07 8 views
0

Das ist ein bisschen peinlich, aber ich brauche eine Reihe von statischen Variablen. Jedes Mal, wenn eine Funktion aufgerufen wird, muss ich auf diese Variablen zugreifen. Grundsätzlich habe ich eine Effektfunktion, die von einer einzigen Variablen gesteuert wird, die momentan als "verstrichene_Zeit" bezeichnet wird.Wie benutzt man ein Array von statischen Variablen?

Allerdings brauche ich für jedes Element, das an die Funktion übergeben wird, eine elapsed_time, damit ich sicherstellen kann, dass keine Effekte für dasselbe Element ausgeführt werden ... (für meine Fade-Funktion verursacht dies einen Flackereffekt).

Ich möchte die element.id verwenden, um meine Variablen zu benennen.

Ich habe gerade gelesen einen Beitrag, dass assoziative Arrays sagen nicht wirklich assoziative Arrays und dass Sie sollten sie nicht here.

verwenden Im Folgenden finden Sie meine aktuelle Funktion, die ich aktualisieren müssen.

/** 
* Effects 
*/ 

var Effects = function(element) 
{ 
    this.element = element; 
}; 

Effects.prototype.fade = function(direction, max_time) 
{ 
    Effects.elapsed = 0; 
/* 
    Effects.arrayHold = []; 
    Effects.arrayHold.push(this.element.id); 
*/ 
    var persist_element = this.element; 
    function next() 
    { 
     Effects.elapsed += 10; 
     if (direction === 'up') 
     { 
      persist_element.style.opacity = Effects.elapsed/max_time; 
     } 
     else if (direction === 'down') 
     { 
      persist_element.style.opacity = (max_time - Effects.elapsed)/max_time; 
     } 
     if (Effects.elapsed <= max_time) 
     { 
      setTimeout(next, 10); 
     } 
    } 
    next(); 
    return true; 
}; 
+0

Ernst, schauen in die [fadeIn()] (http://api.jquery.com/fadeIn/) und [fadeOut()] (http : //api.jquery.com/fadeOut/) Funktionen, die in jQuery integriert sind; es gibt auch eine Funktion [fadeToggle()] (http://api.jquery.com/fadeToggle/); alle mit Funktionen für Dauer, Linderung und Rückruffunktion. Habe ich die Cross-Browser-Fähigkeiten erwähnt? – faino

+0

Was interessiert Sie an einem Blogeintrag? Verwenden Sie ein assoziatives Array, wenn es das beste Werkzeug ist, und vermeiden Sie die Fallstricke. – stark

+0

Deklarieren Sie nicht Effects, ArrayHold als Array, da Sie es als Objekt verwenden. Verwenden Sie Effects.objectHold = {persust_element.id: 0}; und nimm es von dort –

Antwort

1

nur ein Objekt anstelle eines Arrays