从浏览器调整Flash对象的大小而不会闪烁

时间:2011-07-10 17:33:49

标签: javascript flash flex externalinterface

我想知道如何实现TheFWA(thefwa.com)设法做得很好的原生滚动条效果(我不是Flex滚动条的粉丝)。

我发现这篇文章(http://stackoverflow.com/questions/318675/how-can-i-create-a-flex-application-with-dynamic-height),并在我打电话时实施了这项技术每当flash对象改变大小时,通过ExternalInterface创建一个JS函数。这个JS函数只是调整了保存flash对象的div的大小,这就创建了原生条。

不幸的是,当我快速调整大小(例如从800到1800高度)时,flash对象只会翘曲几毫秒(好像它没有改变它的大小,但只是被拉向所有方向) 。在这几毫秒之后,事情恢复正常,但整个情况确实在视觉上很烦人。

最初我认为这只是一个时间问题,但经过一系列尝试设置延迟后,效果是一样的...只是延迟了。

我该如何解决?我知道这在技术上是可行的。只需看看TheFWA,看看Flash和浏览器之间的通信是否顺畅,以使原生滚动条工作,没有任何闪烁或错误测量

3 个答案:

答案 0 :(得分:1)

该网站上的Flash内容具有固定大小。他们所做的是将swf文件放在一个居中的div中。像这样:

...header stuff...
<body>
    <div id="flashContent" style="width:960px; margin:0 auto;">
        ...the flash content goes here...
    </div>
</body>

div容器的宽度应该是flash影片的宽度。

如果您想调整Flash影片的大小,请查看swffit

答案 1 :(得分:1)

这是自Flash Player 10以来出现的问题,并且仍然在FP 11测试版中发生。

当您调整包含SWF的DIV的大小时,SWF本身会调整大小,因此您“要求”玩家重绘内容。但事实是,这次重绘造成了这种丑陋的闪烁。

解决方法是根本不调整SWF DIV的大小并调整另一个空DIV的大小,以便强制浏览器更新滚动条。

此时使用滚动条时,它不会移动SWF DIV(因为它可能通常是一个位置绝对的全尺寸Flash站点)但是您创建了一个简单的JS回调以将滚动值发送到您的应用程序

这可能听起来更加努力但实际上并不多,最后您将创建一种更灵活的方式来管理您的应用程序。

您可以在http://www.andrefelipe.com/

查看正在使用的内容

源代码位于我的框架https://github.com/andrefelipe/fabricaframework/blob/master/src/fabrica/external/Browser.as

答案 2 :(得分:0)

该网站没有做任何特别的事情,只需设置应用程序的高度和宽度并将其打到页面上 - 不会发生调整大小。如果您只是采用相同的技术(指定应用程序的高度),那么您将得到相同的结果。

我错过了什么吗?