单个CSS3转换后的双CSS3变换

时间:2016-04-16 17:00:15

标签: jquery css html5 css3 animation

我有一个HTML5,jQuery卡记忆游戏,你可以通过一次翻转两张卡来匹配卡片。我希望在匹配两张卡时播放动画,但因为我已经将"transform: rotationY(180deg)"应用于翻转的卡片,所以它会出错。

卡片HTML

<div id="card1" class="card">
    <figure class="front">
        <img src="front.jpg">
    </figure>
    <figure class="back">
        <img src="back.jpg">
    </figure>
</div>

首先,玩家会揭示这一点,并将“翻转”类添加到其中。

.flipped {
    transform: rotateY(180deg);
}

然后我删除“翻转”类并添加类scaleOut。 rotateY用于保持旋转,以便右侧不断向玩家显示,并且刻度可以隐藏卡片。

.scaleOut {
    -webkit-transform: rotateY(180deg) scale(0.0);
}

这似乎不起作用,即使只是添加翻转的类成功翻转卡片。 Chrome似乎可以运行动画,但会立即播放它们,而Firefox根本不播放缩放动画。

这是我更改类的代码。它可以很好地添加和删除类。

 $(#card1).removeClass('flipped');
 $(#card1).addClass('scaleOut');

卡片和纸板CSS

#board {
    padding-top: 10px;
    width: 600px;
    height: 450px;
    background-color: rgb(228, 223, 208);
    -webkit-perspective: 1000px;
    perspective: 1000px;
}

.card {
    float:left;
    width: 106px;
    height: 100px;
    margin-left: 10px;
    margin-bottom: 10px;
    border: 1px solid #cfcfcf;
    cursor: pointer;
    -webkit-transform-style: preserve-3d;
    transform-style: preserve-3d;
    -webkit-transition: -webkit-transform 1s;
    transition: transform 1s;
}

1 个答案:

答案 0 :(得分:1)

我没有理由说明为什么会这样,但在scale(1)transform内设置.flipped时似乎工作正常。由于scale(1)是初始状态,并且卡片在翻转但不匹配时应该是可见的,我不认为将此添加到transform属性会导致任何问题。(我会当我设法找到此行为的原因时更新答案。

这适用于Chrome,Firefox和Edge的最新版本。

注意:在您更新了有关电路板和卡的CSS之前,已准备好该代码段。 CSS有点不同,但解决方案仍然适用于您的情况。

var temp1 = $('#card1');
temp1.on('click', function() {
  temp1.addClass('flipped');
  setTimeout(function() {
    temp1.removeClass('flipped');
    temp1.addClass('scaleOut');
  }, 2500);
})
''
.flipped {
  transform: rotateY(180deg) scale(1);
}
.scaleOut {
  transform: rotateY(180deg) scale(0);
}
.front {
  background: yellowgreen;
}
.back {
  background: green;
}
.card {
  position: relative;
  height: 100px;
  width: 100px;
  border: 1px solid;
  transform-style: preserve-3d;
  transition: all 1s;
}
figure {
  position: absolute;
  height: 100%;
  width: 100%;
  top: 0;
  left: 0;
  margin: 0;
  backface-visibility: hidden;
}
.back {
  transform: rotateY(180deg);
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="card1" class="card">
  <figure class="front">
    <img src="front.jpg">
  </figure>
  <figure class="back">
    <img src="back.jpg">
  </figure>
</div>