Toon posts:

[Flash MX] Drag en drop in treeview werkt niet goed

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik heb een treeview in flash gemaakt waarvan de data wordt ingelezen uit een XML bestand. Weergave, inklappen, uitklappen etc werkt allemaal goed. Alleen de sleepfunctie niet helemaal, ik heb een functie geschreven die er voor zou moeten zorgen dat de node (= folder of file) terug gezet wordt op zijn oude plaats wanneer je niet in het rechtervlak loslaat. Zodra je de muis echter los laat op een andere node wordt stopDrag() niet aangeroepen en moet je nog een keer klikken om te stopen, waarna de node niet meer terug gezet wordt.

zie de http://www.pulse-djs.com/sms.swf


de (relevante) code:
code:
1
2
3
contactHandler.prototype.setLock = function(folder, bool, node) {
// zorgt er voor dat alle nodes 'gelocked' worden zodra er gesleept wordt
}



code:
1
2
3
4
5
6
7
8
function node() {
    // event methodes toewijzen aan de node
    
    this.onPress = this.toggle;
    this.onRollOver = this.mouseOver;
    this.onRollOut = this.mouseOut;
    this.onRelease = this.releaseMe;
}



code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
node.prototype.releaseMe = function() {
trace("entered releaseMe function");
if (this.contactHandler.moveNode == 1) {
    trace("eerste if statement entered");
    if ( (_root._xmouse > _root.smsHandler.getLeft() && _root._xmouse < _root.smsHandler.getRight()) && (_root._ymouse > _root.smsHandler.getTop() && _root._ymouse < _root.smsHandler.getBottom()) ) {
        trace("gedropped in rechtervak");
        this._x = _root._xmouse;
        this._y = _root._ymouse;
    }
    else {
        trace("buiten rechtervak gedropped");
        trace(this.xvalue);
        trace(this.yvalue);
        this._x = this.xvalue;
        this._y = this.yvalue;
    }
    stopDrag();
    trace("stop drag" + this._name);
    this.contactHandler.moveNode--;
    this.contactHandler.setLock(_root["root"].folder, false, this);
}
}



code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
node.prototype.toggle = function() {
    // Deze functie kijkt of de node een folder object heeft en opent of sluit deze
if ( (_root._xmouse > this.contactHandler.getLeft() && _root._xmouse < this.contactHandler.getRight()) && (_root._ymouse > this.contactHandler.getTop() && _root._ymouse < this.contactHandler.getBottom()) )
{
    if (this.folder != undefined) {
        if (this.folder._visible==true) { 
            this.collapse(); 
        } 
        else { 
            this.expand(); 
        }
    }
    this.xvalue = this._x;
    trace("xvalue heeft nieuwe waarde gekregen");
    this.yvalue = this._y;
    trace("yvalue heeft nieuwe waarde gekregen");
        if ( (this.contactHandler.DragX != _root._xmouse || this.contactHandler.DragY != _root._ymouse) && (this.contactHandler.moveNode == 0) ) {
            trace("start drag " + this._name);  
            _root["root"].onPress = null;
            _root["root"].onRollOut = null;
            _root["root"].onRollOver = null;

            this.contactHandler.DragX = _root._xmouse;
            this.contactHandler.DragY = _root._ymouse;  
            this.contactHandler.setLock(_root["root"].folder, true, this);
            this.contactHandler.moveNode++;
            this.startDrag (false);
        }
    }
}



iemand die misschien ziet wat er mis gaat?

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 13-08 16:46

curry684

left part of the evil twins

P&W FAQ - HTML / javascript /css, etc...

Clientside meuk bij de buren dus :+

Professionele website nodig?


Verwijderd

Die werkt wel een beetje bagger hoor, als je mis gooit ben je node kwijt. Ook als je iets te snel bent kan een "mapje" niet meer open.

Maar nu ff helpen ;)

Ik zelf heb ook iets dergelijks gemaakt, kan het nu niet 1-2-3 hier neer kwakken (ga zo eten, honger :P ).

Mijn trukje:

Al je items krijgen een extra laagje, zorg ervoor dat deze bovenop ligt. Geef hem bijvoorbeeld de naam "dropOpMij". Vervolgens krijg je dmv de _droptarget functie de onderliggende movieclips te "zien" (trace dat maar tijdens het draggen).

Je krijgt dan het pad naar de top laag te zien. Omdat je dus "dropOpMij" bovenop hebt liggen kun je daar je acties mee behandelen. Daarna is het een kwestie van de node "verplaatsen" (dmv een duplicaatje maken en die vervolgens op de juiste plek hangen, en daarna het origineel weer weg te gooien).


Ik hoop dat ik geen wartaal praat ;), sorry ik ben ondertussen je vraag al weer een beetje vergeten (honger he :D)

[ Voor 4% gewijzigd door Verwijderd op 09-09-2003 17:20 ]


Verwijderd

Topicstarter
Verwijderd schreef op 09 september 2003 @ 17:18:
[...]


Die werkt wel een beetje bagger hoor, als je mis gooit ben je node kwijt. Ook als je iets te snel bent kan een "mapje" niet meer open.

Maar nu ff helpen ;)

Ik zelf heb ook iets dergelijks gemaakt, kan het nu niet 1-2-3 hier neer kwakken (ga zo eten, honger :P ).

Mijn trukje:

Al je items krijgen een extra laagje, zorg ervoor dat deze bovenop ligt. Geef hem bijvoorbeeld de naam "dropOpMij". Vervolgens krijg je dmv de _droptarget functie de onderliggende movieclips te "zien" (trace dat maar tijdens het draggen).

Je krijgt dan het pad naar de top laag te zien. Omdat je dus "dropOpMij" bovenop hebt liggen kun je daar je acties mee behandelen. Daarna is het een kwestie van de node "verplaatsen" (dmv een duplicaatje maken en die vervolgens op de juiste plek hangen, en daarna het origineel weer weg te gooien).


Ik hoop dat ik geen wartaal praat ;), sorry ik ben ondertussen je vraag al weer een beetje vergeten (honger he :D)
hmm.. ik heb het probleem kunnen terug dringen tot het volgende:

als ik een MC drag boven een andere MC wordt de onRelease functie niet meer aangeroepen, en daarmee loopt alles dus de soep in. Waarom wordt dit niet gedaan??

Verwijderd

Topicstarter
problem solved!!

ik heb nu aan de movieclip waar alle nodes in zitten een onClipEvent (mouseUp) gehangen zodat ie altijd werkt :)

Verwijderd

Is je bovenstaande url geupdate? Volgens mij niet, ik zie namelijk daar nog een probleempie en vraag me af of je dat nu opgelost krijgt met je "onMouseUp". Namelijk dat de movieclip die je wilt slepen (zeker als je de allereerste pakt) onder de rest ligt.
Pagina: 1