0

我的女朋友是一名平面设计师,目前正在做一个网站。她不懂任何 HTML 或 CSS,只熟悉 Flash,所以她正在用 Flash 构建整个网站。应该注意的是,我是开发人员,并且对 HTML、CSS 或 Flash 的经验也接近于 0。

工作进展顺利,但在我帮助她部署网站(通过文件->发布)后,我们遇到了一些问题。她制作了 1000x750 像素的 .swf 电影。在我的 24" 显示器上以 1920x1200 检查生成的网站后,事情看起来真的很像素化(电影使用图像,而不是矢量图形)。没问题!我想我们应该在 Flash 的发布选项中禁用缩放,我们会很好。

然而,禁用缩放显然引入了新问题,即现在无法在运行低 (<=1024x768) 分辨率的计算机上正确观看电影。

我猜我们正在寻找的行为只是缩小电影以适应观看计算机的分辨率/浏览器窗口,而不是放大。不过,Flash (CS4) 似乎并未将此作为选项包含在其发布选项中。是否有任何简单的方法来启用这种行为?

4

1 回答 1

1

您所描述的内容没有内置选项,但可以通过脚本轻松实现,无论是在 Flash 中还是在 JavaScript 端。我将在答案的末尾放置一个代码片段,它应该可以让您开始运行。

但是,首先让我建议您可能应该做些什么。想想当一个用户(不管显示器大小)没有全屏浏览器时会发生什么。如果您按照您的描述实施,他们会看到您的网站大小任意小,具体取决于他们的浏览器的大小,并且很可能会看到一些小到难以辨认和/或无法使用的东西。

现在可以肯定的是,您可以通过进一步实现一个最小尺寸来解决这个问题,低于该尺寸 Flash 停止缩放,但随后您开始对用户希望如何查看您的网站进行大量事后猜测。相反,您应该问,拥有小显示器(或小浏览器窗口)的用户希望该站点做什么?答案是全尺寸显示网站并添加滚动条。为了我的钱,这就是你的网站应该做的。

因此,在您的 HTML 中(或在 Flash 的 HTML 导出设置中)将您的 SWF 嵌入到 1000x750 的容器中。这将阻止 SWF 为任何人缩放 - 在您的监视器上,您将看到未缩放的站点在窗口内居中(或左上对齐或其他),而在较小的监视器上,您将看到整个站点未缩放,带有浏览器滚动条.

归根结底,您必须意识到,尽管 Flash 内容本身就是可伸缩的,但大多数网站都是由文本和图像组成的,而事实并非如此。即使您可以在运行时缩小规模,但通常不是用户所期望的,并且通常不会使网站看起来不错。


现在正如所承诺的那样,这里有一段 Flash AS3 代码,它应该可以让您有足够的先机来做任何您喜欢的缩放操作。如果您已将 Flash 发布到占据整个浏览器窗口的容器中,并且将 scalemode 设置为“no scale”,这应该会给您想要的效果。

// perform initial size check
checkStageSize();

// register to re-check when stage size changes
stage.addEventListener( Event.RESIZE, onResize, false, 0, true );
function onResize( e:Event ) {
    checkStageSize();
}

// do the scaling here
function checkStageSize():void {
    var wid:Number = stage.stageWidth;
    var hi:Number = stage.stageHeight;
    var needToScaleDown:Boolean = (wid < 550); // or some other test
    if ( needToScaleDown ) {
        var scale:Number = wid/550;
        someContent.scaleX = someContent.scaleY = scale;
    } else {
        someContent.scaleX = someContent.scaleY = 1;
    }
}

这假设“someContent”指的是一个包含您想要缩放的所有内容的容器,其注册点位于舞台的原点(左上角)。没有简单的方法可以自动缩放整部电影,因此您需要将内容放在容器影片剪辑中并进行缩放。

随意将上面的片段放在舞台上的框架动作中,更改“someContent”以引用您可以缩放的容器,然后使用它。但我真的认为你最终会决定只显示未缩放的站点更有用。

于 2009-09-17T17:53:38.343 回答