【发布时间】:2011-09-15 23:51:29
【问题描述】:
好的,所以我的目标是制作一个简单的动画,当点击多米诺骨牌时,多米诺骨牌会从一堆前面移动到后面。
我有一些东西在这里工作:http://jsfiddle.net/Kirkman/tDmHE/
但这包含大量嵌套回调,最终我将拥有超过五张多米诺骨牌。所以后来我了解到 jQuery 的队列可以帮助我保持我的代码更干净,而不必嵌套所有这些回调。
这就是我想出的。但它只在您第一次点击时有效:http://jsfiddle.net/Kirkman/R7TmU/8/
我想不通的是为什么它在以后的时间里不起作用。
下面是相关的JS函数:
function dominoSlide(theThis) {
$('#dominoes .nav ul li').removeClass('selected',500);
var thisDomino = theThis.parent();
$('#dominoes .nav ul').queue(function() {
thisDomino.switchClass('domino0','selected', 250);
$('.domino1').switchClass('domino1','domino0',10);
$('.domino2').switchClass('domino2','domino1',10);
$('.domino3').switchClass('domino3','domino2',10);
$('.domino4').switchClass('domino4','domino3',10);
thisDomino.addClass('domino4');
thisDomino.removeClass('selected',250);
resetHandlers();
});
}
function resetHandlers() {
$('#dominoes .nav ul li a').unbind();
$('.domino0 a').bind('click', function(event) {
var theThis = $(this);
dominoSlide(theThis);
event.preventDefault();
});
$('#dominoes .nav ul li:not(".domino0") a').bind('click', function(event) {
event.preventDefault();
});
}
【问题讨论】:
-
请在问题本身中包含您需要帮助的实际代码。
-
你使用 jQuery 1.3 有什么原因吗?
-
这是我的疏忽。它应该是 1.4.2,这是最终将实施的网站上使用的版本。
-
之前有人发布了一个答案,建议我使用 .live() 而不是 .bind(),但在我做出回应之前,该答案很快就被删除了。只想说这个答案几乎是正确的。我现在有我的代码工作。在这里查看:jsfiddle.net/Kirkman/aW4t7
-
另一件事:我使用上面的 resetHandlers() 结构的原因是为了只允许单击第一个多米诺骨牌。使用 .live() 而不是 .bind(),然后用
if ( !$('ul li').is(':animated') ) {包装 .click 事件处理程序完成了我想要的更好的事情。您可以在此评论正上方的 jsfiddle 链接上看到这一点。
标签: javascript jquery jquery-ui animation queue