jQuery同步动画触发器

时间:2015-05-22 16:55:08

标签: javascript jquery html css

我正在用jQuery编写一个游戏而且我有点陷入困境。 我想在绘制阶段同步触发一系列webkit动画,中间有1秒的延迟。我附上相关代码(不能正常工作)。:

jQuery的:

var colour_sequence = [];
var drawGame = function() {
  for (var index = 0; index < colour_sequence.length; index++) {
    $(queue_selector).queue("syncFnQueue", runMe(toggle_tile, colour_sequence[index], queue_selector));
  }
  var current_tile = chooseRandomTileId();
  $(queue_selector).queue("syncFnQueue", runMe(toggle_tile, current_tile, queue_selector));
  $(queue_selector).dequeue("syncFnQueue");

  colour_sequence.push(current_tile);
}


var toggle_tile = function(element) {
  $(element).toggleClass(animated_img_class);
  $(element).toggleClass(simple_img_class);
};

var runMe = function(fn, e, selec) {
  return function() {
    fn(e);
    setTimeout(function() {
      $(selec).dequeue("syncFnQueue");
    }, 1000);
  };
};

CSS:

.game-img {
  opacity: 1;
}
.game-img-animated {
  -webkit-animation: grow-shrink 1s ease-in-out;
  animation: grow-shrink 1s ease-in-out;
}

HTML:

<img id="red-brain" class="img-responsive game-img" src="images/brain_red.png" alt="" />
<img id="yellow-brain" class="img-responsive game-img" src="images/brain_yellow.png" alt="" />
<img id="green-brain" class="img-responsive game-img" src="images/brain_green.png" alt="" />
<img id="blue-brain" class="img-responsive game-img" src="images/brain_blue.png" alt="" />

编辑:对于上一个问题的模棱两可,我们深表歉意。问题是上面的代码似乎相当随机地触发了动画。有时它们有时会正确触发。

编辑2:已解决。将在几天内用解决方案更新。

2 个答案:

答案 0 :(得分:1)

您可以在CSS中使用animation-delay选项以及可以从data-attribute中获取和获取的相对编号。

<img id="red-brain" class="img-responsive game-img" data-delay=".3s" src="images/brain_red.png" alt="" />

$(this).css({"animation-delay" : $(this).attr(data-delay)})

答案 1 :(得分:1)

看起来问题的一部分是你实际上是在调用runMe函数而不是将它排队等待运行:

这将立即调用runMe

$(queue_selector).queue("syncFnQueue", 
  runMe(toggle_tile, colour_sequence[index], queue_selector));

这将对稍后调用runMe的函数进行排队:

$(queue_selector).queue("syncFnQueue",
 function(){ runMe(toggle_tile, colour_sequence[index], queue_selector)});