[FLASH] Dynamische buttons

Pagina: 1
Acties:

  • tec
  • Registratie: Juni 2001
  • Laatst online: 17-12-2024
Ik heb het volgende stuk code geklopt:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
setDirButtons = function() {
    for (var i=0; i<= dirArray.length-1; i++)
    {
        listItem = this.attachMovie("listItemBlue","item"+i, i*10);
        listItem._x = 10;
        listItem._y = 17*i;
        listItem._width = 70;
        listItem._height = 17;
        listItem.trackAsMenu = true;
        listItem.name._width = 200;
        listItem.name.text = dirArray[i];
        
        listItem.onRollOver = listItem.onDragOut = function () {
            listItem.name.setTextFormat(blueTextHL)
        }
        
        listItem.onRollOut = listItem.onDragOver = function () {
            listItem.name.setTextFormat(blueText);
        }
    }
}


In het array zitten een aantal menu items, deze worden uitgelezen en er worden items van gemaakt:

-item1
-item2
-item3

nu moet er op die items geklikt worden en moeten ze als er met de muis overgegaan wordt een lichtere kleur krijgen..

Nu is het probleem dat het rollover effect alleen maar werkt op (in dit geval) item3.. de andere 2 items executen dezelfde rollover...

Hoe is dit op te lossen?

Verwijderd

zelf gebruik ik nooit de constructie ... = this.attachMovie, maar ik neem aan dat je zo listItem als een soort alias gebruikt. het kan zijn dat flash de events alleen maar aan het laatste element toekent waar de alias naar verwijst ofzo. wat gebeurt er als je het doet als hieronder?
code:
1
2
3
4
5
6
7
this["item"+i].onRollOver = this["item"+i].onDragOut = function () {
    this["item"+i].name.setTextFormat(blueTextHL)
}

this["item"+i].onRollOut = this["item"+i].onDragOver = function () {
    this["item"+i].name.setTextFormat(blueText);
}

  • tec
  • Registratie: Juni 2001
  • Laatst online: 17-12-2024
Verwijderd schreef op 20 juli 2004 @ 09:35:
zelf gebruik ik nooit de constructie ... = this.attachMovie, maar ik neem aan dat je zo listItem als een soort alias gebruikt. het kan zijn dat flash de events alleen maar aan het laatste element toekent waar de alias naar verwijst ofzo. wat gebeurt er als je het doet als hieronder?
code:
1
2
3
4
5
6
7
this["item"+i].onRollOver = this["item"+i].onDragOut = function () {
    this["item"+i].name.setTextFormat(blueTextHL)
}

this["item"+i].onRollOut = this["item"+i].onDragOver = function () {
    this["item"+i].name.setTextFormat(blueText);
}
Maakt niets uit, geeft hetzelfde probleem..

  • tec
  • Registratie: Juni 2001
  • Laatst online: 17-12-2024
24 uur gewacht.. misschien iemand nu een ideetje.... ?

Verwijderd

Actionscript ken ik niet zo goed, maar in JavaScript creeer je zo één global var listItem waar je telkens een nieuwe waarde aan toekent. Geen wonder dat alleen de laatste dan werkt.
code:
1
2
3
4
5
setDirButtons = function() {
    for (var i=0; i<= dirArray.length-1; i++)
    {
        listItem = this.attachMovie("listItemBlue","item"+i, i*10);
        // etc.

Wat je waarschijnlijk bedoelt is zoiets:
code:
1
2
3
4
5
6
var listItem = new Array();
setDirButtons = function() {
    for (var i=0; i<= dirArray.length-1; i++)
    {
        listItem[i] = this.attachMovie("listItemBlue","item"+i, i*10);
        // etc.

  • Annie
  • Registratie: Juni 1999
  • Laatst online: 25-11-2021

Annie

amateur megalomaan

Even voortbordurend op de suggestie van juaron, moet het niet onderstaande zijn?
code:
1
2
3
4
5
6
7
this["item"+i].onRollOver = this["item"+i].onDragOut = function () {
    this.name.setTextFormat(blueTextHL)
}

this["item"+i].onRollOut = this["item"+i].onDragOver = function () {
    this.name.setTextFormat(blueText);
}


m.a.w. de referentie naar het juiste object binnen je eventhandler.

[ Voor 28% gewijzigd door Annie op 21-07-2004 23:12 ]

Today's subliminal thought is:


Verwijderd

Probeer dit eens:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
setDirButtons = function() {
    for (var i=0; i<= dirArray.length-1; i++)
    {
        listItem = this.attachMovie("listItemBlue","item"+i, i*10);
        listItem._x = 10;
        listItem._y = 17*i;
        listItem._width = 70;
        listItem._height = 17;
        listItem.trackAsMenu = true;
        listItem.name._width = 200;
        listItem.name.text = dirArray[i];
        
        listItem.onRollOver = listItem.onDragOut = function () {
            this.name.setTextFormat(blueTextHL)
        }
        
        listItem.onRollOut = listItem.onDragOver = function () {
            this.name.setTextFormat(blueText);
        }
    }
}


Zodra je bij jouw code de events van het listItem object gaat beschrijven zoek je in het listItem object naar een nieuw listItem object maar die is er dus niet want je bent al aan het schrijven in het object zelf. Daarom gebruik je this.name. etc.

[edit] Hmm, Annie was me voor ;)

[ Voor 6% gewijzigd door Verwijderd op 21-07-2004 23:21 ]


  • tec
  • Registratie: Juni 2001
  • Laatst online: 17-12-2024
Thx, dat was het nu werkt ie, woei! :)
Pagina: 1