卡片动画Jquery和CSS

时间:2015-01-23 13:56:14

标签: javascript jquery html css

我会使用此代码转换卡片的正面和背面,但是一次点击后我看到后面的卡片,然后在第二次点击后我看不到任何卡片!有什么问题?

$(".carta img").click(function() {
  $(this).toggleClass("flipped");
})
.contenitorecarta {
  position: relative;
  width: 100px;
  height: 150px;
  perspective: 800px;
}
.carta {
  width: 100px;
  height: 150px;
  position: absolute;
  transform-style: preserve-3d;
  transition: transform 1s;
}
.carta img {
  display: block;
  position: absolute;
  width: 100%;
  height: 100%;
  backface-visibility: hidden;
}
.carta.back {
  transform: rotateY(180deg)
}
.carta .flipped {
  transform: rotateY(180deg);
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<div class="contenitore-carta">
  <div class="carta">
    <div class="front">
      <img width="100" height="150" src="http://placehold.it/100x150/F44/000.png&text=Front">
    </div>
    <div class="back">
      <img width="100" height="150" src="http://placehold.it/100x150/44F/000.png&text=Back">
    </div>
  </div>
</div>

4 个答案:

答案 0 :(得分:3)

我假设你正在学习本教程?:http://desandro.github.io/3dtransforms/docs/card-flip.html

问题

您有四(4)个问题:

  • 在你的CSS中,你应该......
    • .contenitore-carta代替.contenitorecarta
    • .carta.flipped代替.carta .flipped
    • .carta .back代替.carta.back
  • 在您的JavaScript中,应更改以下内容...
    • $(".carta img")$(".carta")

此外,您需要添加以供应商为前缀的样式规则,以便转换可以在所有支持的浏览器中使用。有关详细信息,请参阅A List Apart: Prefix or Posthack

解决方案

以下代码应该可以正常工作。 注意:我将班级名称从意大利语翻译成英语:)

&#13;
&#13;
$(".card").click(function() {
  $(this).toggleClass("flipped");
})
&#13;
.container {
  width: 100px;
  height: 150px;
  position: relative;
  border: 1px solid #CCC;
  -webkit-perspective: 800px;
     -moz-perspective: 800px;
       -o-perspective: 800px;
          perspective: 800px;
}

.card {
  width: 100%;
  height: 100%;
  position: absolute;
  -webkit-transition: -webkit-transform 1s;
     -moz-transition:    -moz-transform 1s;
       -o-transition:      -o-transform 1s;
          transition:         transform 1s;
  -webkit-transform-style: preserve-3d;
     -moz-transform-style: preserve-3d;
       -o-transform-style: preserve-3d;
          transform-style: preserve-3d;
}

.card.flipped {
  -webkit-transform: rotateY(180deg);
     -moz-transform: rotateY(180deg);
       -o-transform: rotateY(180deg);
          transform: rotateY(180deg);
}

.card div {
  display: block;
  height: 100%;
  width: 100%;
  position: absolute;
  -webkit-backface-visibility: hidden;
     -moz-backface-visibility: hidden;
       -o-backface-visibility: hidden;
          backface-visibility: hidden;
}

.card .front {
  background: red;
}

.card .back {
  background: blue;
  -webkit-transform: rotateY(180deg);
     -moz-transform: rotateY(180deg);
       -o-transform: rotateY(180deg);
          transform: rotateY(180deg);
}
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<div class="container">
  <div class="card">
    <div class="front">
      <img width="100" height="150" src="http://placehold.it/100x150/F44/000.png&text=Front">
    </div>
    <div class="back">
      <img width="100" height="150" src="http://placehold.it/100x150/44F/000.png&text=Back">
    </div>
  </div>
</div>
&#13;
&#13;
&#13;

答案 1 :(得分:2)

我对你的CSS和JS进行了一些更改,以达到你想要的效果。

  1. 更改了JS,因此它向父.carta添加了一个类,因此可以根据状态的变化对两个子项进行样式设置
  2. 修正了CSS中的“contentitore-carta”选择器 - 它缺少连字符
  3. 我没有使用图像进行变换,而是将它们切换为使用父.front,.back div。这不是成败,但转换往往会更好地发挥div。
  4. 认为涵盖它。更新了以下代码。

    $(".carta").click(function() {
      $(this).toggleClass("flipped");
    })
    .contenitore-carta {
      position: relative;
      width: 100px;
      height: 150px;
      perspective: 800px;
    }
    .carta {
      width: 100px;
      height: 150px;
      position: absolute;
      transform-style: preserve-3d;
      transition: transform 1s;
    }
    .carta .front,
    .carta .back {
        display: block;
        position: absolute;
        z-index: 2;
        width: 100%;
        height: 100%;
        backface-visibility: hidden;
    }
    .carta .back {
      transform: rotateY(180deg)
    }
    .carta.flipped {
      transform: rotateY(180deg);
    }
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    
    <div class="contenitore-carta">
      <div class="carta">
        <div class="front">
          <img width="100" height="150" src="http://placehold.it/100x150/F44/000.png&text=Front">
        </div>
        <div class="back">
          <img width="100" height="150" src="http://placehold.it/100x150/44F/000.png&text=Back">
        </div>
      </div>
    </div>

答案 2 :(得分:0)

您只想使用toogle而不是rotateY

&#13;
&#13;
$(".carta img").click(function() {
   $('.front, .back').toggle(); 
});
&#13;
.contenitorecarta {
  position: relative;
  width: 100px;
  height: 150px;
  perspective: 800px;
}
.carta {
  width: 100px;
  height: 150px;
  position: absolute;
  transform-style: preserve-3d;
  transition: transform 1s;
}
.carta img {
  display: block;
  position: absolute;
  width: 100%;
  height: 100%;
  backface-visibility: hidden;
}
.carta .back { display:none}
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<div class="contenitore-carta">
  <div class="carta">
    <div class="front">
      <img width="100" height="150" src="http://placehold.it/100x150/F44/000.png&text=Front">
    </div>
    <div class="back">
      <img width="100" height="150" src="http://placehold.it/100x150/44F/000.png&text=Back">
    </div>
  </div>
</div>
&#13;
&#13;
&#13;

答案 3 :(得分:0)

由于已经给出了许多正确的答案,我只是提出了一个简化标记和更少风格的解决方案,并在最新的Chrome和Firefox上进行了测试

http://codepen.io/anon/pen/rawWdJ

标记

<div class="card">
  <img class="front" src="http://placehold.it/120x150/F44/000.png&text=Front">
  <img class="back" src="http://placehold.it/120x150/44F/000.png&text=Back">
</div>

的CSS

.card {
  position: relative;
  width: 120px;
  transform-style: preserve-3d;
  transition: 1s transform;
}

.card img {
  backface-visibility: hidden;
  position: absolute;
}

.card .back {
  transform: rotateY(180deg)
}

.card.flip {
  transform: rotateY(180deg) 
}

的js

$('.card').on('click', function() {
   $(this).toggleClass('flip');
});