卡片翻转

相信大家都用过网易云音乐, 所以大家应该都对这个软件启动时候的翻转效果有印象。

好多地方都会有类似的特效,如:http://unitedstack.github.io/

今天这个demo也是如此,模拟卡片的翻转,先看demo:

https://pengjiyuan.github.io/rotateCard/

代码地址:https://github.com/PengJiyuan/rotateCard

如何实现

1. 舞台

我们需要构建一个舞台,这个舞台是我们构建3D变换的一个容器。在这个场景下,我们可以想象成牌桌。

<div class="stage"></div>

这个容器我们需要设定一个最重要的属性--透视!

perspective: 800px;

加上这个属性,3D效果才起作用。

2. 变换体

舞台构建完成之后,还需要一个做变换用的载体,在这个载体中,我们构建出需要的3D模型。在这个场景下,这个载体就是牌本身了。

<div class="container"></div>

在这个div中,我们需要设定同样重要的一个属性:

transform-style: preserve-3d;

表示这个元素已3D的形式展示。

再加上过渡效果:

transition: all 1s;

3. 构建3D模型

在载体中,我们需要构建出来做变换用的3D模型。在这个场景中,也就是牌的正反面。

<div class="front"></div>    

<div class="back"></div>

因为是正反面,所以是重叠在一起的,所以:

position: absolute;

为了更符合视觉效果,背面不可见。

backface-visibility: hidden;

背面是反向的,所以背面旋转180度。

transform: rotateY(180deg);

这样, 这张牌就构建好了。

4. 卡片翻转

给翻转体添加点击事件,旋转180度,就可以完成点击翻转的效果。

.flip {
  transform: rotateY(-180deg);
}
$('.stage').addEventListener('click', function() {
  this.classList.length === 1 ? this.classList.add('flip') : this.classList.remove('flip');
});

大功告成!

results matching ""

    No results matching ""