代码之家  ›  专栏  ›  技术社区  ›  TC.

缩小以适应分辨率,但在Flash CS4中不能放大

  •  0
  • TC.  · 技术社区  · 17 年前

    我的女朋友是一名平面设计师,目前正在一个网站上工作。她不知道任何HTML或CSS,只熟悉Flash,所以她正在用Flash构建整个网站。应该指出的是,我是一名开发人员,对HTML、CSS或Flash也几乎没有经验。

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

    1 回复  |  直到 17 年前
        1
  •  1
  •   fenomas    17 年前

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

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

    当然,你可以通过进一步实现一个最小大小来解决这个问题,低于这个最小大小,Flash将停止扩展,但随后你开始对用户希望如何查看你的网站进行大量的猜测。相反,你应该问,一个小显示器(或小浏览器窗口)的用户会怎么做 预期 网站要做什么?答案是,以全尺寸显示网站并添加滚动条。在我看来,这就是你的网站应该做的。

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

    最终,你必须意识到,尽管Flash内容本身是可扩展的,但大多数网站都是由文本和图像组成的,而文本和图像不是。即使你可以在运行时缩小规模,这通常也不是用户所期望的,而且通常不会让网站看起来很好。


    现在,正如所承诺的那样,这里有一段Flash AS3代码,它应该能给你足够的优势,让你在缩放方面做任何你喜欢的事情。如果你已经将Flash发布到一个占据整个浏览器窗口的容器中,并将scalemode设置为“无缩放”,那么这应该会给你带来理想的效果。

    // 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”更改为可以缩放的容器,并尝试使用它。但我真的认为,你最终会决定只显示未缩放的网站更有用。

    推荐文章