【问题标题】:Resize flash object from the browser without flickering从浏览器调整 Flash 对象的大小而不闪烁
【发布时间】:2011-07-10 17:33:48
【问题描述】:

我想知道如何实现 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 和浏览器如何顺畅地相互通信以使本机滚动条正常工作,没有任何闪烁或错误测量

【问题讨论】:

    标签: javascript flash apache-flex externalinterface


    【解决方案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】:

      该网站上的 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

      【讨论】:

        【解决方案3】:

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

        我错过了什么吗?

        【讨论】:

          猜你喜欢
          • 2011-08-16
          • 1970-01-01
          • 2015-08-10
          • 2011-12-01
          • 2022-01-26
          • 1970-01-01
          • 1970-01-01
          • 2019-01-05
          • 1970-01-01
          相关资源
          最近更新 更多