Avatar billede kalleballe Nybegynder
19. november 2003 - 11:20 Der er 4 kommentarer og
1 løsning

Virker fint som funktion men ikke som klasse?

Jeg har følgende kode:
pressItem = function () {
    trace("this = "+this);
    holderNr = this.id-1;
    speed = 3;
    _root.objPath = topHolder[holderNr];
    trace("_root.objPath = "+_root.objPath);
    subHeight = _root.ActivitySetTexts[holderNr].length;
    clipHeight[holderNr] = parseInt(l._height)*(subHeight);
    _root.objPath = _level0.projectClip.baseClip1;
    if (!yFlag[holderNr]) {
        startY[holderNr] = _root.objPath._y;
        if (clipHeight[holderNr]) {
            endY[holderNr] = _root.objPath._y+clipHeight[holderNr];
        } else {
            endY[holderNr] = _root.objPath._y+_root.objPath._height;
        }
        yFlag[holderNr] = 1;
    }
    with (_root.objPath) {
        if (_y == endY[holderNr] && !n[holderNr]) {
            yFlag[holderNr] = 1;
            n[holderNr] = 1;
            this.onEnterFrame = undefined;
            return;
        }
        if (_y<endY[holderNr] && !n[holderNr]) {
            _y += speed;
           
        } else if (_y>startY[holderNr]) {
            n[holderNr] = 1;
            _y -= speed;
           
        }
        if (_y == startY[holderNr]) {
            yFlag[holderNr] = undefined;
            n[holderNr] = undefined;
            this.onEnterFrame = undefined;
            return;
        }
    }
    this.updateAfterEvent();
};

Dette script bevæger et lag der ligger oven på et andet lag, - på samme måde som en akkordion menu, - det er bare muligt at have flere menu items åbne på samme tid.

Nu har jeg skrevet det om så det er lettere at finde rundt i:

function Mover(myClip, speed, topHolder, id) {
    // constructor of the Mover class
    this.myClip = myClip;
    this.speed = speed;
    this.topHolder = topHolder;
    this.id = id;
}
//
Mover.prototype.getPressedItemID = function(clipId) {
    //
    this.holderNr = clipId-1;
    this.objPath = this.topHolder[this.holderNr];
};
//
Mover.prototype.getHeightOfClipsToMove = function() {
    //
    subHeight = _root.ActivitySetTexts[this.holderNr].length;
    clipHeight[this.holderNr] = l._height*subHeight;
};
//
Mover.prototype.getPositionsOfMovingLayer = function() {
    //
    if (!yFlag[this.holderNr]) {
        startY[this.holderNr] = this.objPath._y;
        if (clipHeight[this.holderNr]) {
            endY[this.holderNr] = this.objPath._y+clipHeight[this.holderNr];
        } else {
            endY[this.holderNr] = this.objPath._y+this.objPath._height;
        }
        yFlag[this.holderNr] = 1;
    }
};
//
Mover.prototype.updatePosition = function() {
    //!n[this.holderNr]
    motion.updateScroll();
};
//
Mover.prototype.updateScroll = function() {
    //
    with (this.objPath) {
        if (_y == endY[this.holderNr] && !n[this.holderNr]) {
            yFlag[this.holderNr] = 1;
            n[this.holderNr] = 1;
            _root.onEnterFrame = undefined;
        }
        if (_y<endY[this.holderNr] && !n[this.holderNr]) {
            _y += this.speed;
        } else if (_y>startY[this.holderNr]) {
            n[this.holderNr] = 1;
            _y -= this.speed;
        }
        if (_y == startY[this.holderNr]) {
            yFlag[this.holderNr] = undefined;
            n[this.holderNr] = undefined;
            _root.onEnterFrame = undefined;
        }
    }
};


som kaldes med:

//****** creating a new mover object callet 'motion' ****
var motion = new Mover(this, 3, topHolder, this.id);
//*******************************************************
//
//
pressIt = function () {
    // calls an event Handler
    this.onEnterFrame = pressItem;
    //
};
//
pressItem = function () {
    //
    with (motion) {
        //
        getPressedItemID(this.id);
        getHeightOfClipsToMove();
        getPositionsOfMovingLayer();
        updatePosition();
    }
    //
    };


problemet er at mine lag nu ikke stopper når de er foldet enten helt ud eller ind, - altså de står og hopper ;-)

Er der mon nogen der kan hjælpe mig?

vh
KalleBalle
Avatar billede kalleballe Nybegynder
19. november 2003 - 11:24 #1
Mover.prototype.updateScroll = function() {
    //
    with (this.objPath) {
        //
        if (_y<endY[this.holderNr] && itemNo[this.holderNr] != 0) {
            _y += this.speed;
            itemNo[this.holderNr] = 1;
        } else if (_y>startY[this.holderNr] && itemNo[this.holderNr] != 1) {
            _y -= this.speed;
        }
        //
        if (_y>=endY[this.holderNr]) {
            itemNo[this.holderNr] = 0;
            trace("here I shold stop");
        } else if (_y<=startY[this.holderNr]) {
            itemNo[this.holderNr] = 1;
trace("here I shold stop");

        }
    }
};
Avatar billede kalleballe Nybegynder
19. november 2003 - 11:24 #2
Det er jo nok her i updateScroll problemet er...
Avatar billede kalleballe Nybegynder
19. november 2003 - 11:26 #3
ups der skulle have stået "here I should stop" ;-)
Avatar billede kalleballe Nybegynder
19. november 2003 - 11:33 #4
kommer lige lidt mere forklaring:
this.holderNr er et id for det item man har klikket på, - på denne måde får alle items unikke variabler.

this.objPath er stien til det mc der skal flyttes.

itemNo[] er et flag, 1 eller 0
Avatar billede kalleballe Nybegynder
19. november 2003 - 12:30 #5
nå jeg løste det med:

if (_root.enabled[this.id] == 0) {
        _root.enabled[this.id] = 1;
    } else {
        _root.enabled[this.id] = 0;
    }

i pressIt funktionen

og

Mover.prototype.updateScroll = function() {
    //
    with (this.objPath) {
        //
        if (_y<endY[this.holderNr] && !itemNo[this.holderNr]) {
            //
            _y += this.speed;
            //
        } else if (_y>startY[this.holderNr] && itemNo[this.holderNr]) {
            //
            _y -= this.speed;
            //
        }
        //
        if (_y>=endY[this.holderNr]) {
            //
            if (_root.enabled[this.id] != 0) {
                itemNo[this.holderNr] = 1;
            }
            //
        }
        //
        if (_y<=startY[this.holderNr]) {
            //
            if (_root.enabled[this.id] != 1) {
                itemNo[this.holderNr] = undefined;
            }
            //
        }
    }
};
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester