【问题标题】:Efficient way to animate a div absolute position within a container为容器内的 div 绝对位置设置动画的有效方法
【发布时间】:2011-09-24 11:30:47
【问题描述】:

我目前正在开发一个网站,该网站可以动态构建一个由小块组成的“城市”。建筑物和城市道具都使用“位置:绝对”和“左”定位。它们都放在一个容器 div 上(也带有“位置:绝对”),而容器 div 又放在另一个 div 上(带有“位置:相对”),该容器使用“溢出:隐藏”来限制可见部分。为了定位用户相机,我更新了容器 div 的“left”CSS 属性,有效地向左或向右移动内容。到目前为止,一切顺利。

问题在于,在功能较弱的浏览器和机器上,动画真的很慢。我目前正在使用一个 30 毫秒的计时器,它会调用一个刻度函数,这个刻度函数将处理用户输入,计算新的左侧并相应地更新 CSS。这自然会导致多次浏览器重排,有时动画看起来很慢。

您可以在这里查看:website>

脚本:script>

有人对我如何优化这个有什么建议吗?

【问题讨论】:

    标签: html css optimization animation css-position


    【解决方案1】:

    我最终优化了这一点,用滚动定位代替了绝对定位,并在 Mozilla 和 Webkit 上使用 requestAnimationFrame 技巧来提高帧率性能。以下是遇到此问题的人的一些提示:

    关于 requestAnimationFrame() 函数(支持浏览器的高效异步动画): https://developer.mozilla.org/en/DOM/window.mozRequestAnimationFrame

    在 jQuery 中获取和更新 div 的滚动位置: http://api.jquery.com/scrollLeft/

    【讨论】:

      【解决方案2】:

      使用jQuery.animate()

      这将使您能够完成您想要的,并且它可能比您目前拥有的更好。

      更新:这是我的example

      希望对你有帮助。

      【讨论】:

      • 问题是:只要鼠标悬停在箭头按钮上或用户按下左键或右键,我就需要相机向左或向右移动。
      • 你可以用jQuery.animate来做到这一点,它也可以让你停止动画,你可以在:hover事件上添加一个.animate()(首先检查它没有运行)然后.stop() 失去焦点时
      • :hover 事件只会在鼠标悬停时触发一次。我需要只要鼠标悬停,相机就会移动,然后在鼠标离开时平稳停止。此外,如果我在 jQuery.animate 上使用 :hover 选择器,则暗示我想为悬停的元素设置动画,但事实并非如此。
      • :hoveranimate(如果不是:animated)上,异步启动动画。然后当它失去焦点时你stop()。我会尝试用一个例子来更新。
      • 问题是在你的例子中动画只执行了一次。在我的情况下,只要光标保持在左箭头上,相机就需要继续向左移动。不过,感谢您的提示!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-06
      • 2010-10-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多