【问题标题】:Bug with translate3d in Chrome v.44?Chrome v.44 中 translate3d 的错误?
【发布时间】: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


【解决方案1】:

如果你只是在 animation frame 中调用它,它就可以工作

http://jsfiddle.net/9ksx000q/4/

猜测问题是动画和位置计算同时发生,这导致事情变得奇怪

requestAnimationFrame(function () {
    var dtop = element.position().top;

    element.addClass('active').siblings().removeClass('active');

    canScroll = false;

    var translate3d = 'translate3d(0px, -' + Math.ceil(dtop) + 'px, 0px)';
    $('#container').css(getTransforms(translate3d));

    //after animations finishes we allow to scroll again
    setTimeout(function () {
        canScroll = true;
    }, 1000);    
    //1000s is the time set to the in the CSS for the container
    //transition: all 1000ms ease-in-out;
});

【讨论】:

  • 非常有趣! I had to create a substitute for IE < 10,就像it is not supported in all browsers,但它似乎工作正常!谢谢你! (虽然我相信 Chrome 的 bug 仍然需要解决)
  • 我在应用此解决方案时看到的一个问题是requestAnimationFrame 破坏了同步并可能导致那里出现一些问题。
  • 既然解决了 Chrome 中的错误,还有什么理由应该应用 requestAnimationFrame 吗?对此有何见解?
猜你喜欢
  • 2014-05-31
  • 2015-10-23
  • 1970-01-01
  • 2015-10-27
  • 1970-01-01
  • 1970-01-01
  • 2014-07-22
  • 2016-10-26
  • 1970-01-01
相关资源
最近更新 更多