【发布时间】:2015-10-13 00:56:51
【问题描述】:
Chrome 44 (44.0.2403.89 m) 刚刚发布,我在使用 translate3d 时遇到了问题。 (在 Mac 和 Windows 版本中)
这正在影响像 fullPage.js 这样的插件,因此目前是 thousands of pages。 (Opened issue at fullpage.js github)
在我看来,当在短时间内连续将两个不同的翻译值应用于同一个元素时,当我应用新值时,它会将其位置重新设置为 0,从而导致之前的转换被错过。
我无法完全隔离它并像我希望的那样干净地复制它,但这是我能做到的:
http://jsfiddle.net/9ksx000q/3/
要重现它,只需向下滚动。如果您连续执行此操作,您会注意到它如何返回到每个滚动的上一部分。 例如:你会看到第一个红色部分两次。
如果您使用任何其他浏览器打开相同的测试,您将不会看到问题。
在我的例子中,正在应用的过渡如下(它们取决于视口大小):
translate3d(0px, -641px, 0px);
translate3d(0px, -1282px, 0px);
translate3d(0px, -1923px, 0px);
但在第 1 次和第 2 次之间,以及第 3 次和第 4 次之间,它似乎又回到了translate3d(0,0,0);,导致第一部分一次又一次地显示为起点。
【问题讨论】:
-
@misterManSam 问题已更新。
-
我应用了这个过渡:
translate3d(0px, -255px, 0px); translate3d(0px, -510px, 0px); translate3d(0px, -765px, 0px); translate3d(0px, -1020px, 0px) -
@Hackerman 是的,这取决于视口的大小。但问题仍然存在。相关的是它回到了位置 0,0,0 的第一部分。
-
是的,这很时髦,但翻译却被这样的时髦问题所困扰,比如固定/绝对元素上的嵌套翻译会失控。也许不用翻译整个容器,您可以只翻译将在屏幕上移动的两个对象。您可以让所有对象在屏幕外绝对 100% 定位,然后将要移动的对象转换为 0,同时将另一个对象转换为 -100%。这也将减少每次移动的性能成本。
-
@RooWM 我没看到。您建议在我只制作一个时在两个元素上创建两个过渡。为什么会降低性能成本?
标签: javascript jquery css google-chrome