Изменение размера браузера не вызывает событие «ИЗМЕНИТЬ» - PullRequest
0 голосов
/ 09 июля 2011

У меня проблема с моим сайтом Actionscript 3.По сути, это элемент фона (мувиклипа), который должен изменить размер, чтобы покрыть сцену.Однако этого не происходит.Окно браузера действительно является цветом сцены (темно-серым), но MC остается с его размером по умолчанию в верхнем левом углу.

Все это прекрасно работает при тестировании во Flash CS5.Однако после публикации и открытия в браузере проблема возникает.

Я был озадачен тем, что не смог найти больше информации по этому вопросу, так как я предполагаю, что каждый флеш-сайт с автоизменяемым контентом должен каким-то образом преодолевать эту проблему.

Ниже приведен простой пример, который иллюстрирует проблему:

import flash.events.Event;
import flash.display.MovieClip;
import fl.text.TLFTextField;
import flash.text.TextFormat;
import flash.text.TextFieldAutoSize;

var back:MovieClip;
var email:TLFTextField;
var coming:TLFTextField;
var count:TLFTextField;
var i:int;


init();

function init():void {
    stage.align     = StageAlign.TOP_LEFT;
    stage.scaleMode = StageScaleMode.NO_SCALE;

    back    = new MovieClip();
    email   = new TLFTextField();
    coming  = new TLFTextField();
    count   = new TLFTextField();

    email.text = "address@host.com";
    configureTextField(email);

    coming.text = "coming soon";
    configureTextField(coming);

    i = 0;
    count.text = "" + i + " " + stage.stageWidth + " " + stage.stageHeight;
    configureTextField(count);

    back.graphics.beginFill(0x330000, 1);
    back.graphics.drawRect(0, 0, stage.stageWidth, stage.stageHeight);
    back.graphics.endFill();

    back.addEventListener(Event.ADDED_TO_STAGE, addHandler, false, 0, true);
    stage.addChild(back);
    stage.addChild(email);
    stage.addChild(coming);
    stage.addChild(count);

    stage.dispatchEvent(new Event(Event.RESIZE));
}

function addHandler(event:Event):void {
    stage.addEventListener(Event.RESIZE, resizeHandler);
    back.removeEventListener(Event.ADDED_TO_STAGE, addHandler);
}

function configureTextField(currentText:TLFTextField):void {
    var format = new TextFormat();
    format.font = "Calibri";
    format.size = 24;
    format.color = 0xFFFFFF;
    currentText.setTextFormat(format);
    currentText.autoSize = TextFieldAutoSize.LEFT;
    currentText.selectable = false;
}

function resizeHandler(event:Event):void {
    back.width = stage.stageWidth;
    back.height = stage.stageHeight;

    email.x = stage.stageWidth/2 - email.width/2;
    email.y = stage.stageHeight/2;

    coming.x = stage.stageWidth/2 - coming.width/2;
    coming.y = stage.stageHeight/2 - 64;

    count.x = stage.stageWidth/2 - count.width/2;
    count.y = stage.stageHeight/2 + 64;

    i++;
    count.text = "" + i + " " + stage.stageWidth + " " + stage.stageHeight;
    configureTextField(count);
}

И часть опубликованного HTML-кода, если это поможет:

<head>
        <title>comingSoon</title>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <style type="text/css" media="screen">
        html, body { height:100%; background-color: #333333;}
        body { margin:0; padding:0; overflow:hidden; }
        #flashContent { width:100%; height:100%; }
        </style>
    </head>
    <body>
        <div id="flashContent">
            <object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="800" height="800" id="comingSoon" align="middle">
            <param name="movie" value="comingSoon.swf" />
            <param name="quality" value="high" />
            <param name="bgcolor" value="#333333" />
            <param name="play" value="true" />
            <param name="loop" value="true" />
            <param name="wmode" value="window" />
            <param name="scale" value="showall" />
            <param name="menu" value="true" />
            <param name="devicefont" value="false" />
            <param name="salign" value="" />
            <param name="allowScriptAccess" value="sameDomain" />
            <!--[if !IE]>-->
            <object type="application/x-shockwave-flash" data="comingSoon.swf" width="800" height="800">
                <param name="movie" value="comingSoon.swf" />
                <param name="quality" value="high" />
                <param name="bgcolor" value="#333333" />
                <param name="play" value="true" />
                <param name="loop" value="true" />
                <param name="wmode" value="window" />
                <param name="scale" value="showall" />
                <param name="menu" value="true" />
                <param name="devicefont" value="false" />
                <param name="salign" value="" />
                <param name="allowScriptAccess" value="sameDomain" />
                <!--<![endif]-->
                <!--[if !IE]>-->
                </object>
                <!--<![endif]-->
        </object>
    </div>
</body>
</html>

Любые предложенияС благодарностью!

Спасибо!

cc

1 Ответ

1 голос
/ 09 июля 2011

Вы должны установить ширину и высоту тегов вашего объекта равными 100%.

Так измените:

<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="800" height="800" id="comingSoon" align="middle">

для

<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="100%" height="100%" id="comingSoon" align="middle">

Также изменить:

<object type="application/x-shockwave-flash" data="comingSoon.swf" width="800" height="800">

для

<object type="application/x-shockwave-flash" data="comingSoon.swf" width="100%" height="100%">
...