代码之家  ›  专栏  ›  技术社区  ›  Corey

滚动div中的Flash-IE6错误

  •  0
  • Corey  · 技术社区  · 16 年前

    我有一个包含flash对象列表的div。列表很长,所以我将div高度设置为400,并将overflow设置为auto。

    这在FF上工作得很好,但在IE6上,只有前5个可见的flash对象有效。当我向下滚动时,最初在可视区域之外的其余flash对象都是空的。swf加载正常,因为我没有看到“电影未加载”。它们似乎也被正确地嵌入了——它们只是空的,即内容从未被绘制过。

    有什么办法解决这个问题吗?

    ps.涉及的html元素主要是浮动的,以防对其产生影响。flash对象是使用流行的swfObject嵌入的。

    编辑:这个bug似乎只发生在flash插件“WIN 8,0,24,0”上

    由于我无法发布链接,我将在此处总结相关代码:

    <div style="overflow:auto; height:400px; float:left;">
    <div id="item_1" style="float:left; clear:left; height:100px;">
    <!-- swfObject Embed here -->
    </div>
    ...
    <div id="item_7" style="float:left; clear:left; height:100px;">
    <!-- swfObject Embed here -->
    </div>
    </div>
    

    编辑: 在尝试在单独的页面中重新创建此问题后,我发现该错误与最初隐藏的flash对象有一定关系。加载页面时,我的容器div有“display:none;visibility:hidden”。稍后,样式通过javascript更改为可见。如果我加载页面,让一切从一开始就可见,一切都会好起来的。

    4 回复  |  直到 16 年前
        1
  •  0
  •   user4903    16 年前

    当我在IE6中测试这类东西时,我做的第一件事就是开始删除样式信息。首先从父DIV和子DIV中删除所有浮点数并清除。如果这不起作用,请删除所有填充和边距,并为父DIV和子DIV分别提供100%的宽度(保留100px的高度)。如果这不起作用,那就发回这里。如果我不得不大胆猜测,我会说这是因为你的DIV都没有宽度,但根据我对“躲猫猫虫”的了解,这是一个疯狂的猜测。

        2
  •  0
  •   Leo    16 年前

    我会尝试的几件事:

    • 暂时删除所有CSS,以确定问题是否特定于CSS
    • 为浮动元素及其父元素添加像素宽度
    • 将wmode透明参数添加到swfobject
    • 添加位置:相对

    我听说Flash中有一个bug,显然只有当Flash在屏幕外加载部分内容时才会发生(即body>#Flash{margin-top:-50px})。你的问题可能是这种情况的变体。

    或者,您可以完全删除带有溢出的div,并尝试在flash中创建一个带有滚动条的容器,并将单个SWF加载到该容器flash文件中。

        3
  •  0
  •   Grey Panther    16 年前

    这只是一种解决方法,但您可以尝试最初为Flash对象创建占位符(如具有相应高度和宽度的div),并仅加载电影(通过类似以下方式) swfobject )当它第一次变得可见时。这可能会产生一些问题(即电影在可见之前没有预加载),但这可能是可以接受的。

        4
  •  0
  •   Corey    16 年前

    我想我有一个解决办法。我不能绝对确定,因为有问题的页面被重组了(因为这个bug)。后来,我在另一个页面上偶然发现了相同闪存组件的类似问题。

    问题是有时flash会给出Stage.height=0和Stage.width=0。当flash在浏览器视口外启动时,最有可能发生这种情况。我们使用Stage维度来缩放内容(在本例中为宽度=0,高度=0)。

    解决方案是添加一个onEnterFrame处理程序,该处理程序检查Stage维度,只有在满足以下条件时才继续进行> 0.