Изменение размера SWF с помощью JavaScript - PullRequest
3 голосов
/ 09 февраля 2012

Моему клиенту нужна глупая вводная страница, где onClick открывают двери на склад в сам склад (перенаправляют на сайт).Я создал SWF 1920 x 1174, который делает именно это.Это можно увидеть здесь .Как вы заметите, фон из склада и небо включены в SWF.Небольшой вопрос: есть ли лучший способ сделать это?Одна мысль заключалась в том, чтобы вырезать небо из SWF-файла и сделать анимацию меньше, чтобы ее можно было центрировать с помощью CSS на начальной странице.Затем создайте фоновое изображение неба.

Моя большая проблема - изменение размера.Мое (возможно, неосведомленное) предположение, что если я сделаю SWF действительно большим, его можно будет уменьшить для разных разрешений и сохранить соотношение сторон.

Я попробовал оба предложения на www aleosoft com/flashtutorial_autofit.html, и они дико искажают мой SWF (который можно увидеть здесь ).Это из-за моих настроек публикации?

Я обратился к JavaScript для некоторого ответа.Прямо сейчас я изменяю размер загрузки SWF на ширину и высоту экрана, потому что внутренняя высота и внутренняя ширина окна также искажают соотношение сторон.Я хотел бы, чтобы он работал как www aleosoft com / flashtutorial_autofitexample.html

var w = screen.width, h=screen.height;
document.write('<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,0,0,0" width="'+w+'" height="'+h+'">');
document.write('<param name="movie" value="movie.swf">');
document.write('<param name="scale" VALUE="exactfit">');
document.write('<embed src="movie.swf" width="'+w+'" height="'+h+'"></embed>');
document.write('</object>');

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

Ответы [ 2 ]

0 голосов
/ 10 февраля 2012

Для достижения наилучшего качества вы должны использовать stage.fullScreenHeight и stage.fullScreenWidth, чтобы определить размер окна, а также обработать событие изменения размера окна. Изображение и изображение здания должны быть отдельным клипом. Для этого есть код AS3 (должен быть помещен в первый кадр фильма):

import flash.events.Event;
import flash.events.MouseEvent;
import flash.media.Sound;
import fl.transitions.Tween;
import fl.transitions.easing.*;


var t:Tween;
var u:Tween;
var i:Tween;



if(stage) init(null);
else addEventListener(Event.ADDED_TO_STAGE, init);

function init(e:Event){

    stage.scaleMode = StageScaleMode.NO_SCALE; //You don't want to scale anything
    stage.align = StageAlign.TOP_LEFT;
    resizeHandler(null);
    stage.addEventListener(Event.RESIZE, resizeHandler); //function that will be executed at every window size change.


  /* some animations.
      new Tween(object, "property", EasingType, begin, end, duration, useSeconds);
      property - This is the name of the property which will be animated, it   must be specified as a string (between quotation marks). Example: "alpha", "scaleX",   "scaleY", "x", "y". so you can calculate this vaules depending on the current window size
   */

    logo_mc.logo1_mc.visible = false;
    logo_mc.logo2_mc.visible = true;
    t=new Tween(bg_top_mc, "height", Strong.easeOut, bg_top_mc.height, 341, 2, true);
    u=new Tween(diamonds_mc, "y", Strong.easeOut, diamonds_mc.y, 208, 2, true);
    i=new Tween(gradients_mc, "y", Strong.easeOut, gradients_mc.y, 221, 2, true);


}

function resizeHandler(e:Event):void {

    var sw = stage.stageWidth;
    var sh = stage.stageHeight;

    //put a footer at the bottom of window 
    footer_bg_mc.width = sw;
    footer_bg_mc.y = sh - footer_bg_mc.height;

    //specify ALL elements positions depending on the window size, it is called liquid layout
    copyright_mc.y = stage.stageHeight - copyright_mc.height - 8;

   //center     
   logo_mc.x = stage.stageWidth - logo_mc.width - 40;

   //you can also scale text size
    var format:TextFormat = new TextFormat();
    format.size = Math.round(stage.stageWidth/20); 
    myTextField.setTextFormat(format);

    gradients_mc.width = stage.stageWidth;
    bg_top_mc.width = stage.stageWidth;
    bg_site_mc.width = sw;
    bg_site_mc.height = sh;

    content_mc.x = 0;
    content_mc.y = 0;
    }

В вашем xhtml вы можете иметь:

...
<head>
<style type="text/css" media="screen">
        html, body { height:100%; background-color: #27262e;}
        body { margin:0; padding:0; overflow:hidden; }
        #flashContent { width:100%; height:100%; }
        </style>  
...
<body>
<div id="flashContent">
<div id="flashContent">
            <object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="100%" height="100%" id="index" align="middle">
            <param name="allowFullScreen" value="true" />
                <param name="movie" value="index.swf" />
                <param name="quality" value="high" />
                <param name="bgcolor" value="#e7e7e7" />
                <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="index.swf" width="100%" height="100%">
                <param name="allowFullScreen" value="true" />
                    <param name="movie" value="index.swf" />
                    <param name="quality" value="high" />
                    <param name="bgcolor" value="#e7e7e7" />
                    <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]-->
                    <a href="http://www.adobe.com/go/getflash">
                        <img src="http://www.adobe.com/images/shared/download_buttons/get_flash_player.gif" alt="Get Adobe Flash player" />
                    </a>
                <!--[if !IE]>-->
                </object>
                <!--<![endif]-->
            </object> ...

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

Вы можете добиться лучшего эффекта, придерживаясь CSS и JavaScript. двери могут оставаться в SWF.

0 голосов
/ 09 февраля 2012

Следующий код (не требуется JavaScript) не искажается (протестировано на Firefox 10, Ubuntu; Firefox 4.0, Windows XP; IE 6 и 8, Windows Xp):

<html xmlns="http://www.w3.org/1999/xhtml"><head>
<meta content="text/html; charset=UTF-8" http-equiv="Content-Type">
<title>Platinum Buyer's Club</title>
<style type="text/css">
html, body{
margin:0;
padding:0;
}
</style>
</head>
<body>
  <object width="100%" height="100%" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
    codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,0,0,0">
    <param name="movie" value="http://www.example.com/example.swf">
    <param name="quality" value="high">
    <param name="wmode" value="transparent">
    <param name="SCALE" value="default">
    <embed width="100%" height="100%" src="http://www.example.com/example.swf" 
      quality="high" type="application/x-shockwave-flash" wmode="transparent" scale="default"
      pluginspage="http://www.macromedia.com/go/getflashplayer">
  </object>
</body>
</html>

Однако, похоже, он все еще не работает в браузере MacOS (не уверен, что это плагин Flash или проблема с браузером)

...