DOM 变化时动画缓慢

Posted

技术标签:

【中文标题】DOM 变化时动画缓慢【英文标题】:Sluggish animation on DOM change 【发布时间】:2015-03-20 16:07:14 【问题描述】:

假设我有一个持续运行的动画,而不是 css、javascript,或者在这种情况下为了简单起见是一个 .gif 文件,然后我 附加到 DOM 像 youtube iframe 这样的“重”元素和持续的动画会缓慢一秒钟。

是否有任何直接或变通的方法来实现这种 DOM 更改而不交错动画?

在下面的示例中,请注意,如果您将 iframe 更改为另一个 gif,甚至是一个具有相当简单网站的 iframe,动画运行时不会出现交错或迟缓的情况。

演示/示例:http://codepen.io/anon/pen/xbdewR

*** 发出警告,提示 codepen.io 的链接必须附有代码,这是我第一次发帖,所以我希望这是它所要求的:

$('.button').on('click', function(e) 
  // Sluggish
  $('.video-container').html('<iframe   src="//www.youtube.com/embed/FprQEGc3Za4" frameborder="0" allowfullscreen></iframe>');

  // Not Sluggish
  //$('.video-container').html('<img src="http://media2.giphy.com/media/e7FOBuKCDtwWI/giphy.gif"/>');

  // Not Sluggish
  //$('.video-container').html('<iframe   src="http://html5doctor.com/" frameborder="0" allowfullscreen></iframe>');

);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<img src="http://media.giphy.com/media/lRBEntSxN87WE/giphy.gif"  />
<div class="video-container">
  <a class="button" href='#'>wait for the gif to load completely and press me</a>
</div>

【问题讨论】:

每个tab只有一个主线程,dom重新布局和gif动画都使用它。某些视频可能是硬件加速的,但加载它可能总是会减慢渲染速度。 【参考方案1】:

很遗憾,您的问题没有解决方案...这是网络浏览器的问题。

这篇文章可能对你有所帮助:Why does my spinner GIF stop while jQuery ajax call is running?

【讨论】:

【参考方案2】:

加载 iframe 会导致加载、布局和 DOM 更改的大量延迟。

您可以通过使 iframe display: none 直到需要,然后使用 display: block 渲染它来减少一些影响。即使它不可见也不会自动播放。

【讨论】:

【参考方案3】:

您可以执行以下操作:

为您的 iframe 编写 html 代码,样式为 display : none

<iframe   src="//www.youtube.com/embed/FprQEGc3Za4" frameborder="0" style="display:none;" allowfullscreen></iframe>

当你点击按钮时,代码 js 代码应该是:

$('.button').on('click', function(e)
    $('iframe').css('display','block');
);

这样你的 gif 文件就不会卡顿了。

【讨论】:

不,这不起作用,显示无时仍然会发生惊人的情况,@eric-blade 提到的相同修复

以上是关于DOM 变化时动画缓慢的主要内容,如果未能解决你的问题,请参考以下文章

QML 为大量矩形设置动画时性能缓慢

SCD缓慢变化维拉链表

kettle学习之--缓慢变化维度(SCD)

popViewController(animated: true) 动画运行缓慢

UIView,动画背景颜色非常缓慢,挂起滚动视图(!)

几秒后,Jquery动画()响应非常缓慢