我有功能GoToCell(number);
这个功能可以渲染玩家的动作。我有这样一种情况发生:在最后一次执行调用之前,该人调用了此函数两次。一个呼叫被挂断并从 2 个呼叫开始运行。我需要调用两次都没有工作,直到结束是怎么执行的呢?
问问题
333 次
3 回答
4
您遇到的问题可能与线程无关,而是与动画或电影播放有关。从这个问题很难说。
但在这两种情况下的答案是确保您设置一个标志,告诉自己动画或任何正在进行中,并在其上使用完成回调来清除标志。然后,当用户单击小部件或其他任何内容时检查标志,并且不要启动动画/等的第二个副本。
同样,没有任何代码或上下文,很难具体提供帮助,所以这里有一个使用 jQuery 动画的示例。我不是说“使用 jQuery”或任何东西,只是演示上面列出的概念(设置标志,防止重复激活,使用完成回调):
HTML:
<input type="button" id="theButton" value="Click to animate">
<div id="target"></div>
<div id="output"></div>
CSS:
#target {
position: absolute;
left: 0px;
top: 3em;
border: 1px solid black;
background-color: #00d;
width: 20px;
height: 20px;
}
#output {
margin-top: 6em;
}
JavaScript:
jQuery(function($) {
var animating = false;
var direction = "+";
$("#theButton").click(function() {
// Are we already animating?
// (Of course, ideally you'd disable the button or similar)
if (animating) {
// Yes, say we're busy
display("Animation still in progress");
}
else {
// No, do it
display("Animating...");
animating = true;
$("#target").animate({
left: direction + "100"
}, 3000, function() {
// Completion callback, we're not animating anymore
animating = false;
display("Done");
});
direction = direction === "+" ? "-" : "+";
}
});
function display(msg) {
$("<p>").html(String(msg)).appendTo("#output");
}
});
于 2012-04-30T14:09:09.790 回答
1
你可能想看看网络工作者。 https://developer.mozilla.org/En/Using_web_workers
到目前为止,在 javascript 中具有类似线程的行为是唯一的可能性。不过,我认为并非所有浏览器都实现了它。
于 2012-04-30T14:07:51.443 回答
1
我不确定你需要工人或线程来做你正在寻找的东西。
IMO Underscore 的 Functions 功能可以帮助您实现所需的功能debounce
,throttle
或once
如果您不想使用下划线,我建议您阅读库的源代码,它非常简短且注释很好。
于 2012-04-30T14:08:22.100 回答