Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/375.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在过渡时使用“宽度”和“变换”会导致闪烁_Javascript_Html_Css - Fatal编程技术网

Javascript 在过渡时使用“宽度”和“变换”会导致闪烁

Javascript 在过渡时使用“宽度”和“变换”会导致闪烁,javascript,html,css,Javascript,Html,Css,查看此JSBIN: 点燃铬: 单击测试按钮 单击test2按钮 您将看到绿色条闪烁。我想这是因为“translate3d”计算像素的方式与“width”不同 当同时使用“left”和“width”属性时,它可以完美地工作,但性能不太好。原因是translate3d触发硬件加速,并使用亚像素计算,从而产生极其平滑的动画 是虫子吗?它是可解的吗?使用Firefox,效果非常好!那么可能是一个Chrome bug css #test { position: absolute; transiti

查看此JSBIN:

点燃铬:

  • 单击测试按钮
  • 单击test2按钮
  • 您将看到绿色条闪烁。我想这是因为“translate3d”计算像素的方式与“width”不同
  • 当同时使用“left”和“width”属性时,它可以完美地工作,但性能不太好。原因是translate3d触发硬件加速,并使用亚像素计算,从而产生极其平滑的动画

    是虫子吗?它是可解的吗?使用Firefox,效果非常好!那么可能是一个Chrome bug

    css

    #test {
      position: absolute;
      transition: transform 1s ease-out, width 1s ease-out;
      left: 0;
      top: 0;
      transform: translate3d(0, 0, 0);
      width: 300px;
      height: 25px;
      background-color: red;
    }
    
    #test2 {
      position: absolute;
      transition: transform 1s ease-out, width 1s ease-out;
      left: 0;
      transform: translate3d(0, 25px, 0);
      top: 0;
      width: 300px;
      height: 25px;
      background-color: green;
    }
    
    还有JS

    document.querySelector('#button').addEventListener('click', function () {
    
    var el = document.querySelector('#test');
      el.style.width = '150px';
      el.style.transform = 'translate3d(0px, 0px, 0)';
    
      var el = document.querySelector('#test2');
      el.style.width = '150px';
      el.style.transform = 'translate3d(150px, 0px, 0)';
    
    });
    
    document.querySelector('#button2').addEventListener('click', function () {
    
    var el = document.querySelector('#test');
      el.style.width = '300px';
      el.style.transform = 'translate3d(0px, 0px, 0)';
    
      var el = document.querySelector('#test2');
      el.style.width = '300px';
     el.style.transform = 'translate3d(0, 25px, 0)';
    
    });
    

    您可以通过从右侧设置绿色框的动画,而不是从左侧移动它来解决此问题。例如

    即使我用rom转换删除,闪烁仍然存在。有一个问题,您更改“宽度和左侧不可用”是什么意思?更新的注释解释:-)您使用的浏览器是什么?因为“translate3d”正在使用您的浏览器引擎。。并尝试在浏览器之间切换以查看不同的行为。如果我使用left和width,它看起来非常平滑…但我发现translate3d的性能更快,因此我猜它可能没有在细粒度级别进行计算,这可能是闪烁的原因。你知道,在FireFox中,它工作得很好。所以这可能是一个Chrome bug。谢谢你的建议,但是这个例子有点简化了。它不一定从边渲染。想象一下,它是三个盒子,其中一个在中间是动画。你会遇到同样的问题:-/不过建议不错!