2011-07-10 67 views
0

我想知道如何实现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,看看闪光灯和浏览器如何平滑地相互通信,使本地滚动条工作,没有任何闪烁或误测

回答

1

这是自Flash Player 10的出现,仍然发生多达11 FP Beta测试阶段的问题。

当您调整包含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

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