【发布时间】:2012-06-28 02:17:31
【问题描述】:
我有一个关于使用 DOM 在 HTML 中通过 javascript 动画的问题。在这种情况下,我使用绝对位置和 css + jQuery 并为 div 设置动画。
因此,当我运行大量位置 x,y 时,动画运行非常缓慢。我以 100 毫秒(80 毫秒)的间隔运行,但似乎渲染速度不够快,我的动画耗时超过 10 秒...
重新运行动画时,似乎指令已被某种方式缓存(渲染)并且我的动画运行得非常完美。
如果我再等 5 分钟,它会再次变慢。 (好像是低级机器码内存被删除了,因为没有再使用?)
如果我的动画是第一次执行,我只是不知道如何让我的动画顺利运行。 我尝试使用 fabric.js 来渲染动画......同样的问题。在第一次运行它很慢。第二轮和后续都很顺利。
function render_mouse()
{
if(play_pos < mousefile_length)
{
$('.mouse').remove();
$("body").append(
$('<div id="mouse" class="mouse"></div>')
.css('position', 'absolute')
.css('top', play_mousefile[play_pos+1] + 'px')
.css('left', play_mousefile[play_pos] + 'px')
.css('width', mousesize)
.css('height', mousesize)
.css('background-image', 'url(images/cursor.png')
);
play_pos = play_pos +2;
}
else {
clearInterval(play_mousetimer);
}
}
UPDATED:
$('#mouse').animate({
left: rec_mousefile[play_pos]+"px",
top : rec_mousefile[play_pos+1]+"px"
},80);
【问题讨论】:
-
在此处发布您的代码将有助于解决问题
-
邮政编码。到目前为止,我最好的猜测是您正在尝试实时栅格化图像,而不是使用精灵。
-
这里是渲染鼠标的函数:pastebin.com/8gswL79R 我将 remove 替换为 animate x,y pos。但仍然存在同样的问题
-
pastebin.com/PtuwrfRB 使用 jQuery animate 的较新版本。
-
原始代码如此缓慢的部分原因是因为您每次都删除并插入 DIV。 IIRC,每次这样做都会导致回流。
标签: javascript html dom animation canvas