Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Flash > распределение в галереи


Автор: AntonioBanderaz 7.5.2005, 12:34
В общем быстренько написал небольшую галерею, никак не могу допереть, как можно сделать распределение по х и у, и максимальной длине клипа... Размер картинки, при появлении рамки, один, после подгрузки другой и я не знаю зарание какой, он всегда разный!!! Ещё не могу разобраться с глюком при повторном нажатии....

Кому не впадлу - посоветуйте чаго-нидь...
вот основной код
Код

#include "lmc_tween.as"
var mcLoader_mcl:MovieClipLoader = new MovieClipLoader();
var mclListener:Object = new Object();
mclListener.onLoadStart = function() {
};
mclListener.onLoadInit = function(target_mc) {
    target_mc.tween("_width", target_mc._width/3, 2, 'easeOutElastic');
    target_mc.tween("_height", target_mc._height/3, 2, 'easeOutElastic');
    target_mc._parent.WD = target_mc._width/3;
    target_mc._parent.HD = target_mc._height/3;
};
mclListener.onLoadProgress = function(target_mc, loadedBytes, totalBytes) {
    var pctLoaded:Number = Math.round(loadedBytes/totalBytes*100);
    var preloader:MovieClip = target_mc._parent;
    preloader.PrBar._xscale = pctLoaded;
    if (loadedBytes == totalBytes) {
        _root.Load = true;
        preloader.onRollOver = function() {
            this.Image.tween("_width", 3*this.WD/2, 2, 'easeOutElastic');
            this.Image.tween("_height", 3*this.HD/2, 2, 'easeOutElastic');
        };
        preloader.onRollOut = preloader.onReleaseOutside=function () {
            this.tween("_x", this._x+this.DX, .5);
            this.tween("_y", this._y+this.DY, .5);
            this.DX = 0;
            this.DY = 0;
            this.Image.tween("_width", this.WD, 2, 'easeOutElastic');
            this.Image.tween("_height", this.HD, 2, 'easeOutElastic');
        };
        preloader.onRelease = function() {
            this.DX = this.WD/3;
            this.DY = this.HD/3;
            this.tween("_x", this._x-this.WD/3, .5);
            this.tween("_y", this._y-this.HD/3, .5);
            this.Image.tween("_width", 3*this.WD, 2, 'easeOutElastic');
            this.Image.tween("_height", 3*this.HD, 2, 'easeOutElastic');
        };
        preloader.PrBar._visible = false;
        target_mc._alpha = 0;
        target_mc.alphaTo(100, 2, 'easeElastic');
    }
};
mcLoader_mcl.addListener(mclListener);
function loadGallery(Images:Array, Space:Number, MaxWidth:Number):Void {
    for (var i = 0; i<Images.length; i++) {
                  GalleryItem._visible = false;
        var GalItem:MovieClip = GalleryItem.duplicateMovieClip('GalleryItem'+i, Images.length-i);
        GalItem._x = i*(GalItem._width+Space); // вот эта строчка тоже не всегда срабатывае, по trace(...) - ok!
        mcLoader_mcl.loadClip(Images[i], GalItem.Image);
    }
}
var Im:Array = ['http://.../10.jpg', 'http://.../7.jpg', 'http://.../12.jpg'];
loadGallery(Im, 3, 600);



это внутри GalleryItem

Код

onEnterFrame = function () {
    if (Image._width>80) {
        ramka._width = Image._width+20;
        ramka._height = Image._height+20;
    }
};


Автор: AlDev 7.5.2005, 13:17
Дай fla, pls.

что есть mc_tween.as?

Выложи всё в архивчике, pls.

Сходу кой-чего:

Вообще изображения лучше сделать одного размера или сделать им thumbnail-ы одного размера отдельные, а при нажатии на них показывать изображение.

про duplicateMovieClip - http://forum.vingrad.ru/index.php?showtopic=49198&view=findpost&p=385689

Автор: AntonioBanderaz 7.5.2005, 14:10
Я тут подправил немного... Но как-то через жопу...
Код

#include "lmc_tween.as"
var href:MovieClip = this;
var mcLoader_mcl:MovieClipLoader = new MovieClipLoader();
var mclListener:Object = new Object();
mclListener.onLoadStart = function() {
};
mclListener.onLoadInit = function(target_mc) {
    target_mc.tween("_width", target_mc._width/3, 2, 'easeOutElastic');
    target_mc.tween("_height", target_mc._height/3, 2, 'easeOutElastic');
    target_mc._parent.WD = target_mc._width/3;
    target_mc._parent.HD = target_mc._height/3;
};
mclListener.onLoadProgress = function(target_mc, loadedBytes, totalBytes) {
    var pctLoaded:Number = Math.round(loadedBytes/totalBytes*100);
    var preloader:MovieClip = target_mc._parent;
    preloader.PrBar._xscale = pctLoaded;
    if (loadedBytes == totalBytes) {
        preloader.onRollOver = function() {
            this.Image.tween("_width", 3*this.WD/2, 2, 'easeOutElastic');
            this.Image.tween("_height", 3*this.HD/2, 2, 'easeOutElastic');
        };
        preloader.onRollOut = preloader.onReleaseOutside=function () {
            /*this.tween("_x", this._x+this.DX, .5);
            this.tween("_y", this._y+this.DY, .5);
            this.DX = 0;
            this.DY = 0;*/
            this.Image.tween("_width", this.WD, 2, 'easeOutElastic');
            this.Image.tween("_height", this.HD, 2, 'easeOutElastic');
        };
        preloader.onRelease = function() {
            /*this.DX = this.WD/3;
            this.DY = this.HD/3;
            this.tween("_x", this._x-this.WD/3, .5);
            this.tween("_y", this._y-this.HD/3, .5); */
            this.Image.tween("_width", 3*this.WD, 2, 'easeOutElastic');
            this.Image.tween("_height", 3*this.HD, 2, 'easeOutElastic');
        };
        preloader.PrBar._visible = false;
        target_mc._alpha = 0;
        target_mc.alphaTo(100, 2, 'easeElastic');
    }
};
mcLoader_mcl.addListener(mclListener);
function loadGallery(Images:Array, Space:Number, MaxWidth:Number):Void {
    _global.Num = Images.length;
    _global.Spa = Space;
    for (var i = 0; i<Images.length; i++) {
        GalleryItem._visible = false;
        var GalItem:MovieClip = GalleryItem.duplicateMovieClip('GalleryItem'+i,Images.length - i);
        var GalInc:MovieClip = href['GalleryItem'+(i-1)];
        if (i == 0) {
            GalItem._x = 0;
            GalItem._y = 0;
        } else {
            GalItem._x = GalInc._x+GalInc._width+Space;
        }
        if ((GalItem._x+GalItem._width+Space)>600) {
            if (_global.Sum == undefined) {
                _global.Sum = i;
            }
            GalItem._x = 0;
            GalItem._y = GalInc._y+GalInc._height+Space;
        }
        mcLoader_mcl.loadClip(Images[i], GalItem.Image);
    }
}
onEnterFrame = function () {
    if (_global.Num != undefined) {
        for (i=0; i<_global.Num; i++) {
            if (i == 0) {
                // var GalInc:MovieClip = href['GalleryItem0'];
            } else {
                var GalInc:MovieClip = href['GalleryItem'+(i-1)];
                var GalItem:MovieClip = href['GalleryItem'+i];
                if (GalItem._x != 0 && GalItem._y == 0) {
                    GalItem._x = GalInc._x+GalInc._width+_global.Spa;
                } else if (GalItem._x == 0 && GalItem._y != 0) {
                    var GalInc:MovieClip = href['GalleryItem'+(i-_global.Sum)];
                    GalItem._y = GalInc._y+GalInc._height+_global.Spa;
                }
            }
        }
    }
};
var Im:Array = ['http://.../14.jpg', 'http://.../11.jpg', 'http://.../15.jpg', 'http://.../14.jpg', 'http://.../11.jpg', 'http://.../15.jpg'];
loadGallery(Im, 3, 600);


Всё равно эта зараза вылезает за поля....

http://antoniobanderaz.narod.ru/MovieClipTween119a.mxp
http://antoniobanderaz.narod.ru/gallery.fla

Автор: AntonioBanderaz 8.5.2005, 01:12
Добился нужного эффекта, выкладываю проект, подскажите что исправить, что оптимизировать.... Мне не нравится использование глобальных переменных, как этого можно избежать?
Да ещё хотелось бы услышать ваше мнение по поводу получившегося.... smile
Вот код, если кому лень качать проект...
Код

#include "lmc_tween.as"
var href:MovieClip = this;
var mcLoader_mcl:MovieClipLoader = new MovieClipLoader();
var mclListener:Object = new Object();
mclListener.onLoadStart = function() {
};
mclListener.onLoadInit = function(target_mc) {
    target_mc._width = target_mc._width/2;
    target_mc._height = target_mc._height/2;
    target_mc.tween("_width", target_mc._width/2, 2, 'easeOutElastic');
    target_mc.tween("_height", target_mc._height/2, 2, 'easeOutElastic');
    target_mc._parent.WD = target_mc._width/2;
    target_mc._parent.HD = target_mc._height/2;
};
mclListener.onLoadProgress = function(target_mc, loadedBytes, totalBytes) {
    var pctLoaded:Number = Math.round(loadedBytes/totalBytes*100);
    var preloader:MovieClip = target_mc._parent;
    preloader.PrBar._xscale = pctLoaded;
    if (loadedBytes == totalBytes) {
        preloader.onRollOver = function() {
            this.Image.tween("_width", 6*this.WD/2, 2, 'easeOutElastic');
            this.Image.tween("_height", 6*this.HD/2, 2, 'easeOutElastic');
        };
        preloader.onRollOut = preloader.onReleaseOutside=function () {
            this.Image.tween("_width", this.WD, 1, 'easeOutElastic');
            this.Image.tween("_height", this.HD, 1, 'easeOutElastic');
        };
        preloader.onRelease = function() {
            this.Image.tween("_width", 6*this.WD, 2, 'easeOutElastic');
            this.Image.tween("_height", 6*this.HD, 2, 'easeOutElastic');
        };
        preloader.PrBar._visible = false;
        target_mc._alpha = 0;
        target_mc.alphaTo(100, 2, 'easeElastic');
    }
};
mcLoader_mcl.addListener(mclListener);
function loadGallery(Images:Array, Space:Number, MaxWidth:Number):Void {
    _global.Num = Images.length;
    _global.Spa = Space;
    _global.MaxW = MaxWidth;
    for (var i = 0; i<Images.length; i++) {
        GalleryItem._visible = false;
        var GalItem:MovieClip = GalleryItem.duplicateMovieClip('GalleryItem'+i, Images.length-i);
        var GalInc:MovieClip = href['GalleryItem'+(i-1)];
        if (i == 0) {
            GalItem._x = 0;
            GalItem._y = 0;
        } else {
            GalItem._x = GalInc._x+GalInc._width+Space;
            GalItem._y = _global._y;
        }
        if ((GalItem._x+GalItem._width+Space)>MaxWidth) {
            if (_global.Sum == undefined) {
                _global.Sum = i;
            }
            GalItem._x = 0;
            GalItem._y = GalInc._y+GalInc._height+Space;
            _global._y = GalItem._y;
        }
        mcLoader_mcl.loadClip(Images[i], GalItem.Image);
    }
}
onEnterFrame = function () {
    if (_global.Num != undefined) {
        for (i=0; i<_global.Num; i++) {
            if (i != 0) {
                var GalInc:MovieClip = href['GalleryItem'+(i-1)];
                var GalItem:MovieClip = href['GalleryItem'+i];
                if (GalItem._x != 0) {
                    GalItem._y = GalInc._y;
                    GalItem._x = GalInc._x+GalInc._width+_global.Spa;
                    href._xscale = (_global.MaxW * href._xscale) / href._width;
                    href._yscale = (_global.MaxW * href._xscale) / href._width;
                    } else if (GalItem._x == 0 && GalItem._y != 0) {
                    GalItem._y = href['GalleryItem'+(i-_global.Sum)]._y+href['GalleryItem'+(i-_global.Sum)]._height+_global.Spa;
                    href._xscale = (_global.MaxW * href._xscale) / href._width;
                    href._yscale = (_global.MaxW * href._xscale) / href._width;
                }
            }
        }
    }
};
var Im:Array = ['http://www.trax.ru/striptiz/iren/14.jpg', 'http://www.trax.ru/striptiz/iren/11.jpg', 'http://www.trax.ru/striptiz/iren/15.jpg', 'http://www.trax.ru/striptiz/iren/14.jpg', 'http://www.trax.ru/striptiz/iren/11.jpg', 'http://www.trax.ru/striptiz/iren/15.jpg','http://www.trax.ru/striptiz/iren/14.jpg', 'http://www.trax.ru/striptiz/iren/11.jpg', 'http://www.trax.ru/striptiz/iren/6.jpg', 'http://www.trax.ru/striptiz/iren/10.jpg'];
loadGallery(Im, 5, 600);



На у вот проектик... http://antoniobanderaz.narod.ru/galleryLast.fla

PS. Если кто может объясните, как мона будет из того что я сделал, компонент создать, зарание спа =)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)