gpt4 book ai didi

javascript - 使用 JavaScript 调整 SWF 的大小

转载 作者:太空宇宙 更新时间:2023-11-04 13:25:09 25 4
gpt4 key购买 nike

我的客户想要一个愚蠢的介绍页面,点击一下,仓库的门就会打开到仓库本身(重定向到网站)。我创建了一个 1920 x 1174 的 SWF。可见here .您会注意到,SWF 中包含仓库和天空的背景。只是一个小问题:有更好的方法吗?一种想法是从 SWF 中裁剪出天空并使动画变小,以便它可以在介绍页面上使用 CSS 居中。然后将背景图像设为天空。

我的大问题是调整大小。我的(可能是无知的)假设是,如果我将 SWF 做得非常大,它可以针对不同的分辨率进行缩小并保持纵横比。

我已经尝试了 www aleosoft com/flashtutorial_autofit.html 上的两个建议,它们严重扭曲了我的 SWF(可以看到 here)。这是因为我的发布设置吗?

我转向 JavaScript 寻求某种答案。现在我正在将 swf onload 的大小调整为屏幕宽度和高度,因为窗口内部高度和内部宽度也会扭曲纵横比。我希望它像 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,但如有必要我会使用。

最佳答案

要获得最佳质量,您应该使用 stage.fullScreenHeightstage.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。

关于javascript - 使用 JavaScript 调整 SWF 的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9214491/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com