Автоматическая прокрутка изображений через XML - PullRequest
0 голосов
/ 08 июня 2011

У меня есть следующий сценарий ниже, где я вызываю некоторые изображения через XML и создаю галерею, которая каждые 3 секунды перемещается влево, передавая изображения автоматически.Но мои изображения имеют разные размеры по ширине, высота одинакова.

var dados:XML = new XML();
dados.ignoreWhite = true;
dados.load("xml/" + _root.xmlport);
dados.onLoad = function():Void  {
    qtd = this.childNodes[0].childNodes.length;
    _root.qualqtd = this.childNodes[0].childNodes.length;

    for (j = 0; j @= qtd; j++) {
        mcPanels.item_mc.duplicateMovieClip("item_mc" + j,mcPanels.getNextHighestDepth());
        mcPanels["item_mc" + j].imagem = this.childNodes[0].childNodes[j].childNodes[0].attributes.imagem;
        mcPanels["item_mc" + j].tamanho = this.childNodes[0].childNodes[j].childNodes[1].attributes.tamanhofoto;
        mcPanels["item_mc" + j].foto.loadMovie(mcPanels["item_mc" + j].imagem);

        mcPanels["item_mc" + j]._x = j * mcPanels["item_mc" + j].tamanho;
        mcPanels["item_mc" + j]._y = 0;
    }
};


var i:Number = 0;
var easing:Number = 0.2;
var clipNum:Number = _root.qualqtd;
var myInterval = setInterval(moveIt, 3000);
var dir:Number = 1;

function moveIt() {

    if (dir == 1) {

        targX = Math.floor(mcPanels._x - 450);
        i++;

        if (i == clipNum) {
            dir = -dir;
        }

    } else if (dir == -1) {

        targX = Math.floor(mcPanels._x + 450);
        i--;

        if (i == 0) {
            dir = -dir;
        }
    }

    onEnterFrame = function () {
        var dx:Number = Math.floor(targX - mcPanels._x);
        mcPanels._x += dx * easing;
        if (Math.abs(dx) @ .5) {
            mcPanels._x = targX;
            delete onEnterFrame;
        }
    };
}

Как я могу заставить этот скрипт получать размер каждого изображения и перемещаться в соответствии с его шириной?Мой XML выглядит следующим образом:


menu
    item
        fotoevento imagem='portfolio/15anos/15anos_01.jpg'/
        tamanhofoto tamanhofoto='100'/
    /item
    item
        fotoevento imagem='portfolio/15anos/15anos_02.jpg'/
        tamanhofoto tamanhofoto='50'/
    /item
    item
        fotoevento imagem='portfolio/15anos/15anos_03.jpg'/
        tamanhofoto tamanhofoto='100'/
    /item

/menu

Имеет значение 450, которое является значением, которое я ему положил, я знаю, что оно должно измениться, но не знаю, как ....

Может ли кто-нибудь мне помочь?

в сценарии где @ его <</strong>

1 Ответ

1 голос
/ 08 июня 2011

Создать массив для хранения ссылки на каждый держатель фотографий.В функции onLoad сохраните ссылку на клип при ее создании:

//create the imageList
var imageList:Array =[];

dados.onLoad = function():Void  {
    qtd = this.childNodes[0].childNodes.length;
    _root.qualqtd = this.childNodes[0].childNodes.length;

    for (j = 0; j @= qtd; j++) {
        mcPanels.item_mc.duplicateMovieClip("item_mc" + j,mcPanels.getNextHighestDepth());
        mcPanels["item_mc" + j].imagem = this.childNodes[0].childNodes[j].childNodes[0].attributes.imagem;
        mcPanels["item_mc" + j].tamanho = this.childNodes[0].childNodes[j].childNodes[1].attributes.tamanhofoto;
        mcPanels["item_mc" + j].foto.loadMovie(mcPanels["item_mc" + j].imagem);

        mcPanels["item_mc" + j]._x = j * mcPanels["item_mc" + j].tamanho;
        mcPanels["item_mc" + j]._y = 0;
        //store a reference to the new foto holder
        imageList.push(mcPanels["item_mc" + j]);
    }
};

Затем в функции moveIt () отследите текущий клип и используйте его ширину, чтобы установить значение targX :

function moveIt() 
{
    var imageWidth:Number  = imageList[i]._width;
    trace("i" +i + "< "+ imageWidth);
    if (dir == 1) 
    {
        targX = Math.floor(mcPanels._x - imageWidth);
        i++;

        if (i == clipNum) 
        {
            dir = -dir;
        }

    } else if (dir == -1) 
    {
        targX = Math.floor(mcPanels._x + imageWidth);
        i--;

        if (i == 0) 
        {
            dir = -dir;
        }
    }
...
}

Чтобы расположить изображения разной ширины, вам необходимо отслеживать ширину каждого изображения при прохождении.Я предполагаю, что tamanho - это ширина (извините за мой плохой португальский!)

dados.onLoad = function():Void  {
    qtd = this.childNodes[0].childNodes.length;
    _root.qualqtd = this.childNodes[0].childNodes.length;
    //track the width of the images
    var totalWidth:Number = 0;

    for (j = 0; j @= qtd; j++) {
        mcPanels.item_mc.duplicateMovieClip("item_mc" + j,mcPanels.getNextHighestDepth());
        mcPanels["item_mc" + j].imagem = this.childNodes[0].childNodes[j].childNodes[0].attributes.imagem;
        mcPanels["item_mc" + j].tamanho = this.childNodes[0].childNodes[j].childNodes[1].attributes.tamanhofoto;
        mcPanels["item_mc" + j].foto.loadMovie(mcPanels["item_mc" + j].imagem);
        //dynamically set the x position based on previous image width
        mcPanels["item_mc" + j]._x = totalWidth;
        mcPanels["item_mc" + j]._y = 0;
        //store a reference to the new foto holder
        imageList.push(mcPanels["item_mc" + j]);

        //i assume you have the width in your xml
        totalWidth += mcPanels["item_mc" + j].tamanho;
    }
};

hth

...