Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   пересчет высоты мувика с текстом для правильного скрола (http://www.flasher.ru/forum/showthread.php?t=132058)

elzone 03.11.2009 14:51

пересчет высоты мувика с текстом для правильного скрола
 
здравствуйте.
есть код создания мувиклипа с картинками и текстом:

Код:

function addText() {
                                _root.base.text_mc.setMask(_root.scroll_mask);
                                _root.scroll_mask._x = 0;
                                _root.scroll_mask._y = 253;
                                _root.scroll_mask._width = Stage.width - 20;
                                _root.scroll_mask._height = Stage.height - 253 - 50;
                                _root.scroll_line.swapDepths(1001);
                                _root.scroll_mc.swapDepths(1002);
                                _root.scroll_line._x = Stage.width - 30;
                                _root.scroll_line._y = 253;
                                _root.scroll_line._height = _root.scroll_mask._height - 10;
                                _root.scroll_mc._x = Stage.width - 30;
                                _root.scroll_mc._y = 253;
       
                        if (_root.scroll_mask._height >= _root.base.text_mc._height) {
                                _root.scroll_line._visible = false;
                                _root.scroll_mc._visible = false;
                        } else {
                                _root.scroll_line._visible = true;
                                _root.scroll_mc._visible = true;
                        }

                        var tY = 253;
                        var tH = _root.scroll_line._height - _root.scroll_mc._height;
                        var sHY = tY + tH;
                        var varDif:Number = _root.base.text_mc._height;
       
                        _root.scroll_mc.onPress = function() {
                                this.startDrag(false, this._x, tY, this._x, sHY);
                                this.onMouseMove = function() {
                                        _root.base.text_mc._y = - varDif * ((this._y - 253)/sHY) + 253;
                                }
                        };
                _root.scroll_mc.onRelease = _root.scroll_mc.onReleaseOutside = function () {
                        this.stopDrag();
                        delete this.onMouseMove;
                };       
}

my_XML = new XML();
my_XML.onLoad = xmlLoad;
my_XML.ignoreWhite = true;
function xmlLoad(success) {
        rootNode = "";
    if (success) {
        rootNode = my_XML.firstChild.childNodes;
                nodeLength = rootNode.length;
                var arrItem = new Array();
                var itemY = 0;
                _root.createEmptyMovieClip("base", 1);
                _root.base.swapDepths(1000);
                _root.base._x = 10;
                _root.base._y = 0;
                _root.base.createEmptyMovieClip("text_mc", 2);
                _root.base.text_mc._y = 253;
                for (var i = 0; i < nodeLength; i++) {                       
                        _root.base.text_mc.attachMovie("imgToload", "imgToload" + i, i);
                        _root.base.text_mc["imgToload" + i].loadMovie(rootNode[i].attributes.imgLink);
                        _root.base.text_mc.attachMovie("txt", "txt" + i, 1000 + i);
                        _root.base.text_mc["txt" + i].txt.html = true;
                        _root.base.text_mc["txt" + i].txt.multiline = true;
                        _root.base.text_mc["txt" + i].txt.autoSize = true;
                        _root.base.text_mc["txt" + i].txt.htmlText = rootNode[i].firstChild.nodeValue;
                        var        imgW:Number = (Number(rootNode[i].attributes.imgWidth));
                       
                        if (rootNode[i].attributes.imgWidth == undefined) {
                                _root.base.text_mc["txt" + i].txt._x = _root.base.text_mc._x;
                                _root.base.text_mc["txt" + i].txt._y = _root.base.text_mc._y + 10 + itemY - 253;
                                arrItem.push(_root.base.text_mc["txt" + i]);
                                _root.base.text_mc["txt" + i].txt._width = Stage.width - 80;
                        } else {
                                _root.base.text_mc["imgToload" + i]._x = _root.base.text_mc._x;
                                _root.base.text_mc["imgToload" + i]._y = _root.base.text_mc._y + 10 + itemY - 253;
                                arrItem.push(_root.base.text_mc["txt" + i]);
                                _root.base.text_mc["txt" + i].txt._width = Stage.width - rootNode[i].attributes.imgWidth - 80;
                                _root.base.text_mc["txt" + i].txt._x = imgW + 30;
                                _root.base.text_mc["txt" + i].txt._y = _root.base.text_mc["imgToload" + i]._y;
                        }

                        var textFormat:TextFormat = new TextFormat (Eurostile, 12, 0x666666);
                        _root.base.text_mc["txt" + i].txt.setTextFormat(textFormat);
                        if (_root.base.text_mc["txt" + i].txt._height > rootNode[i].attributes.imgHeight || rootNode[i].attributes.imgWidth == undefined) {
                                itemY = itemY + _root.base.text_mc["txt" + i].txt._height + 20;
                        } else {
                                itemY = itemY + (Number(rootNode[i].attributes.imgHeight)) + 20;
                        }
                }
                trace(arrItem)
                addText();
    } else {
        _root.errorTxt = "Can't load file. Please, try latter.";
    }
}
my_XML.load("data/" + _global.xmlToLoad);

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

вот ссылка на рабочий файл:

http://elzone.net/test/ignat/work5.swf

(можно проверить изменив размеры браузера и перегрузив страницу)

в чем трабла, может кто подскажет.

Molecula 03.11.2009 21:28

http://elzone.net/test/ignat/work5.swf, а не http://elzone.net/test/ignat/work4.swf
Походу при Stage.onResize неправильно пересчитывается _root.scroll_line._height
тут:
Код AS1/AS2:

var tH = _root.scroll_line._height - _root.scroll_mc._height;



Часовой пояс GMT +4, время: 15:04.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.