Ergebnis 1 bis 5 von 5
  1. #1
    Avatar von .marc
    .marc ist offline Lebende Foren-Legende
    registriert
    26-12-2002
    Ort
    Schweiz / Biel
    Beiträge
    1.589

    Lightbulb Layer Bibliothek

    Ich hab mal ein paar Funktionen rund um layers geschrieben vielleicht kann das ja jemand gebrauchen
    PHP-Code:
    NS4=falseDOM=falseALL=false;

    if(
    document.getElementByIdDOM true;
    if(
    document.allALL true;
    if(
    document.layersNS4 true;    

    getObject = function(id)

        if(
    DOM) return document.getElementById(id) || document.getElementsByName(id); 
        if(
    ALL) return document.all[id];
        if(
    NS4) return document.layers[id];
    }

    layer = function(id,x,y,w,h)
    {
        
    this.id id;
        
    this.object getObject(id);
        
    this.this.object.style || this.object;
        
    this.|| parseInt(this.s.left) || 0;
        
    this.|| parseInt(this.s.top) || 0;
        
    this.|| parseInt((NS4 this.s.clip this.s).width) || 0;
        
    this.|| parseInt((NS4 this.s.clip this.s).height) || 0;
        
    this.update();
    }

    layer.prototype.moveTo = function(x,y)
    {
        if(
    x){ this.s.left this.x; }
        if(
    y){ this.s.top this.y; }
    }

    layer.prototype.moveBy = function(x,y)
    {
        if(
    x){ this.s.left this.parseInt(this.x) + x; }
        if(
    y){ this.s.top this.parseInt(this.y)+ y; }
    }

    layer.prototype.resizeTo = function(w,h)
    {
        
    NS4 this.s.clip this.s
        if(
    w){ if(w>=0){ s.width this.w; } else { s.width this.0; } }
        if(
    h){ if(h>=0){ s.height this.h; } else { s.height this.0; } }
    }

    layer.prototype.resizeBy = function(w,h)
    {
        
    NS4 this.s.clip this.s
        if(
    w){ if((nw=parseInt(this.w+w))>=0){ s.width this.nw; } else { s.width this.0; } }
        if(
    h){ if((nh=parseInt(this.h+h))>=0){ s.height this.nh; } else { s.height this.0; } }
    }

    layer.prototype.changeVisibility = function(v
    {
        
    this.s.visibility v;
    }

    layer.prototype.changezIndex = function(z)
    {
        
    this.s.zIndex z;
    }

    layer.prototype.changeDisplay = function(d)
    {
        
    this.s.display d;
    }

    layer.prototype.update = function()
    {
        
    this.moveTo(this.x,this.y);
        
    this.resizeTo(this.w,this.h);

    Ist eigentlich ganz einfach zu gebrauchen:
    Code:
    // man erzeugt ein neues layer objekt optional kann man noch die Position / Grösse mit übergeben
    mylayer = new layer("mylayerid");
    // Anschliessend kann man den layer verschieben
    mylayer.moveTo(100,100);
    // die Grösse ändern 
    mylayer.resizeTo(100,100);
    // u.s.w
    Das Ganze ist erst vor kurzem entstanden, könnte also noch Fehler haben, Kommentare und Verbesserungsvorschläge sind wie immer willkommen. Momentan kann man damit nur schon bestehende Layer manipulieren, ich werde aber bei Gelegeneheit eine funkiton hinzufügen mit der man neue Layer erstellen kann.
    Geändert von .marc (08-10-2003 um 19:34 Uhr)
    Shit doesn't happen, it's produced by an asshole.
    brain-dump.org || Marc Tanner's web log

  2. #2
    Avatar von womstar
    womstar ist offline Lounge-Member
    registriert
    22-07-2002
    Ort
    latente matrix
    Beiträge
    5.913
    wieso bist du bei der "oop" so inkonsequent?
    warum vererbst du nicht die eigenschaften von getObject auf layer und läßt auch dann mal die externen variablen weg.

    ansonsten post mal nen bsp, weil bei mir tut sich nichts...

  3. #3
    Avatar von .marc
    .marc ist offline Lebende Foren-Legende
    registriert
    26-12-2002
    Ort
    Schweiz / Biel
    Beiträge
    1.589
    warum ich so inkonsequent bin? weil ich es getrennt haben wollte, wie sollte ich es denn deiner Meinung nach sinnvol vererben??
    die externen Variablen habe ich eigentlich nur gemacht weil dort nur die Zahlen gespeichert werden, bei den eigenschaften top left width height steht immer px hintendran was NS4 nicht so gern hat und zum rechnen auch nicht praktisch ist.

    hier ist ein Beispiel: http://free.pages.at/giftzwerg/div/layer.html
    Shit doesn't happen, it's produced by an asshole.
    brain-dump.org || Marc Tanner's web log

  4. #4
    Avatar von womstar
    womstar ist offline Lounge-Member
    registriert
    22-07-2002
    Ort
    latente matrix
    Beiträge
    5.913
    naja du hättest diese abfragen schon im layer-konstruktor abhandeln können.

    ansonsten,

    erbst du die eigenschaften von einem anderen objekt so.

    meinObjekt.prototype = new meinAnderesObjekt();

    so erbst du alle eigenschafen von meinAnderesObjekt() und kannst diese benutzen.

  5. #5
    Avatar von Albu
    Albu ist offline Foren-Gott
    registriert
    04-07-2001
    Beiträge
    13.501
    Vererbung ist hier denke ich nicht das richtige....

    Richtig ist, daß getObject und die globalen Vars in ein eigenes Object / Klasse gehören. Aber Layer sollte diese nicht beerben, denn dann hätte Layer die Funktion getObject, welche (globale) HTML Objekte heraussucht und zurückliefert. Eine getObject Funktion des Layers sollte aber z.B. nur auf den Layer beschränkt sein, außerdem ist fraglich wieso ich einen Layer erzeugen muß, um getObject nutzen zu können, oder anders: warum muß dieses Objekt in jedem Layer (Objekt) mit drinstecken, wenn es doch eigentlich eine globale Funktionalität ist.
    Da JS keine Static Funktionen / Objekte kennt sind drei Ansätze (OOP-technisch) sinnvoll:
    1. globale Objektinstanz, jeder hat Zugriff
    2. private Instanz, wird im Konstruktor als Referenz übergeben
    3. Klasseneigene Instanz, jeder Layer hat eine Membervariable des Objektes

    zu:
    1. globale Objekte / Variablen sind eigentlich nie gut
    2. Der Programmierer muß immer wissen, welche Sachen werden wann, wo gebraucht und sie als Parameter übergeben
    3. hätte die gleichen Einschränkungen bezgl. der Ressourcen (jeder Layer hätte sein eigenes Objekt)

    Da JS aber eben sehr eingeschränkt ist, was OOP betrifft und man einen Tod sterben muß, würde ich mich vermutlich für 3. entscheiden wobei 1. auch akzeptabel ist. 2. fällt eigentlich unter den Tisch bei einer so zentralen Funktionalität.
    1. Get people to play Space Taxi
    2. Sell real estates on neptun
    3. Profit!

    IE is not a browser, it is a scream.


    Outside of a dog, a book is man's best friend. Inside of a dog, it's too dark to read.

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •