【问题标题】:Drag thousands of dom elements with performance in mind拖拽数千个 dom 元素,兼顾性能
【发布时间】:2012-12-27 10:43:07
【问题描述】:

作为一个爱好项目,我正在尝试创建一个基于 64 * 64 瓦片的地图原型,该地图可以以高性能的方式拖动。如果可行,我想将其扩展到 1024 x 1024 瓷砖。

目前的方法
包含所有“平铺”div 的“地图”div。 使用this jquery plugin,我使地图 div 可拖动。 平铺 div 具有 css sprite 背景,因此只需一次调用 img。 这对一些瓷砖效果很好,但随着更多瓷砖变得非常慢。

我尝试了什么
考虑通过将它们放在包装器 div 中来规避所有这些图块的 dom 回流,希望它可以在单独的层中呈现,然后可以作为一个层移动。没用。
尝试将地图 div 的父 div 溢出设置为隐藏,这样就不会渲染冗余图块。没用。
尝试删除对 j​​query 的依赖并自己执行可拖动的实现。工作同样糟糕。所以没用。
将背景图像换成背景颜色并不能提高性能,所以这不是问题。

我还不知道如何实现的想法
如何确保瓷砖不会触发回流?
将看不见的瓷砖设置为不可见吗?我可以通过一些努力来实现这一点,但不知道这是否会提高性能。

有什么建议吗?

【问题讨论】:

  • 你在网上有工作样本吗?
  • 如果我在家里的电脑上,我可以看看我是否可以制作一个。

标签: javascript performance dom


【解决方案1】:

将这组图块渲染到一个 CANVAS 元素,导出为 PNG,然后在拖动时移动它。

【讨论】:

  • 这是一个解决方案。它消除了动画瓷砖的可能性。
  • @BorisCallens:您可以为画布设置动画,但您必须为每一帧重新绘制它。大卫:不是可以简单地拖动画布吗?无需将画布保存为 PNG,这是一个相对繁重的功能。
  • 你当然可以拖动画布。拖动 PNG 会稍微轻松一些,具体取决于您“缓存”到图像的频率。
  • 在动画中,这通常是每秒至少 24 次。 @BorisCallens 必须看看两者中哪一个更快。
  • 取决于动画。你能摆脱动画 GIF/PNG 吗?拖的时候真的需要这么多细节吗?
猜你喜欢
  • 2021-10-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多