在IE和Safari中粘性绝对DIV闪烁

时间:2013-09-01 07:24:56

标签: javascript jquery

请查看此fiddle。代码很重要。

我正在努力使两个DIVS坚持到顶部并留在动态更新的DIV内部。它正在工作,但在DIV内部正在发生闪烁。如何消除闪烁。

请帮我解决这个问题。

编写的代码用于修复:

 colFix.style.left = (holder.scrollLeft - view.offsetLeft) + "px";
 heaF.style.top = (holder.scrollTop - view.offsetTop) + "px";

2 个答案:

答案 0 :(得分:7)

您看到的闪烁是因为您的元素被重新插入DOM。在这种情况下,特别是在IE10中,它们从底部到顶部闪烁,因为您使用.appendChild,因此它会在页面底部呈现,然后在CSS应用后闪烁到顶部。

可以使用.insertBefore

修复从下到上的闪烁

view.insertBefore(colFix, view.firstChild);

这并不能完全解决问题,因为它会在每次重新插入时继续闪烁 - 现在就在顶部。

停止闪烁的一种方法是停止重新插入整个块,但保留一个已重新填充其内容的包装器。这可能仍会引起明显的跳跃,但我会留给您进行实验。


以下的实验,为了可能尝试回答的其他人而保留。上面提供了“如何消除闪烁”这一核心问题的答案 - 即停止不断重新插入布局元素。

Here is a fiddle

这已将#col-fixed#head-fixed更改为position: fixed;,然后在javascript中我更改了appendChild的行,以便在第一个子项之前插入 - 这可能与{{1}之后没有任何关联已被应用。

position: fixed

我也评论说:

view.appendChild(heaF);

view.insertBefore(colFix, view.firstChild);

答案 1 :(得分:1)

您可以尝试使用 iScroll插件link

这将保留滚动条,并且没有闪烁但是,为了这个工作,你需要有两个div。看看这个例子。

如果不重复使用iScroll,您可以修改类似于iScroll的代码(删除不需要的功能)。

示例链接: - a link