javascript - 包装 div 中的每个单词会导致性能问题

标签 javascript jquery html css

我正在创建一个单页网站,其中包含将近 5000 个单词作为文本以提供特定的动画效果,我需要将每个单词包装在一个 div 标签中,并使用这样的类。

<div class="word"> word</div>

这会导致 div 过多(DOM 中的元素过多)。 我完全理解 DOM 中有 5000 个元素是荒谬的

还有其他方法吗?

这是我想要达到的效果:

$('body').children('.word').each(function() {
  $(this).animate({
    "opacity": "1"
  }, Math.floor(Math.random() * 3000) + 500);
});
.word {
  opacity: 0;
  display: inline-block;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="word">
  hello,
</div>
<div class="word">
  how
</div>
<div class="word">
  are
</div>
<div class="word">
  you
</div>
<div class="word">
  doing
</div>

编辑: 这是更好的方法吗

http://jsfiddle.net/PrakharThakur/cxvuq96v/

最佳答案

您的问题是 $.animate 性能低下。它会导致大量的 DOM 更新(每秒数千次),使您的网站变慢。

您应该使用在 GPU 支持下执行且无需 DOM 更新的 CSS 动画或 CSS 转换。

您可以像这样创建代码:

$('body').children('.word').each(function() {
  $(this).style({transition: 'opacity '+ Math.floor(Math.random() * 3000) + 500) +'s'});
  $(this).addClass('visible');
});

并在CSS文件中添加如下代码:

 .visible {
      opacity: 1;
  }

关于javascript - 包装 div 中的每个单词会导致性能问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28044207/

相关文章:

javascript - JavaScript 中的原型(prototype)和构造函数(简单的英语)?

jquery - 在哪里可以下载 jQuery UI 的非缩小版?

javascript - Bootstrap 有状态按钮无法按预期工作

javascript - Bootstrap Navbar 在没有 JavaScript 的情况下展开/折叠移动设备

javascript - 查询 JSONB。 Sequelize Op.In 抛出错误 : Invalid value

javascript - 允许在 ShieldUI NumericTextBox 中输入欧洲格式

javascript - $(document).ready(function() 干扰日期选择器显示?

javascript - 从工具提示 html 元素中获取值

html - SCSS中自动计算旋转度数将多个元素从0度旋转到180度

android - 在原生 Android 游戏中使用 Box2D 而不是使用 HTML5 canvas 的 Box2Dweb 有很大的不同吗?