Javascript IE和Safari中闪烁的粘性绝对DIV

Javascript IE和Safari中闪烁的粘性绝对DIV,javascript,jquery,Javascript,Jquery,请看看这个。代码很难发布 我试图使两个DIV粘在顶部,并在动态更新的DIV内左移。它正在工作,但在DIV内发生闪烁。如何消除闪烁 请帮我做这个 为修复而编写的代码: colFix.style.left = (holder.scrollLeft - view.offsetLeft) + "px"; heaF.style.top = (holder.scrollTop - view.offsetTop) + "px"; 您看到的闪烁是因为您的元素被重新插入到DOM中。在本例中,特别是在IE10

请看看这个。代码很难发布

我试图使两个DIV粘在顶部,并在动态更新的DIV内左移。它正在工作,但在DIV内发生闪烁。如何消除闪烁

请帮我做这个

为修复而编写的代码:

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

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

可使用
.insertBefore
从下到上固定闪烁:

view.insertBefore(colFix,view.firstChild)

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

停止闪烁的一种方法是停止重新插入整个块,但保留一个包装器,重新填充其内容。这可能仍然会导致一个可见的跳跃,但我把它留给你们去实验


下面是之前的实验,为了其他可能尝试回答的人而保留。上面给出了“如何消除闪烁”这一核心问题的答案,即停止连续重新插入布局元素

这将
#col fixed
#head fixed
更改为
位置:fixed然后在javascript中,我更改了在第一个子元素之前将子元素追加到insertChild的行-一旦应用了
position:fixed
,这可能就没有任何相关性了

view.appendChild(heaF);

view.insertBefore(colFix, view.firstChild);
我还评论说:

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

您可以尝试使用iScroll插件

这将保持滚动条和滚动条没有闪烁,但要使其工作,您需要有两个div。看看这个例子

另外,如果不重用iScroll,您可以在类似于iScroll的平台上修改代码(删除非必需的功能)


示例链接:-

看看这个[定位][1][1]:我觉得你做得太过分了。1.这是一个表格数据。你为什么不用真正的桌子?2.也许这个线程可以帮助你,因为你的提琴太满了,而且你还没有指定我们应该在示例中查看的内容。@GEUI在提琴中,从第104-119行开始,我添加了粘性标题。@user2675751我也在寻找相同的内容,并在这里执行相同的代码,我希望避免闪烁的发生。固定的缺点是,我无法滚动鼠标,将鼠标放在固定元素上。下一步是它将根据屏幕定位,需要额外的努力使其与windowSo的resize上的元素对齐,我想我从您的代码中了解到(很抱歉,这可能是非常错误的)是您替换了整个绝对定位的div,并将其添加回scroll。如果是这样的话,那么我会尝试只替换绝对定位div的内容。这有意义吗?您是对的,最好的选择是保留容器并替换子对象。您提到的其他替代方案会导致回流,这是正在发生的FOUC的一部分。