巧用CSS steps()函数实现随机翻牌效果!

1. 引言

随着互联网技术的不断发展,给网页设计带来了很多好处,提高了用户的体验度,翻牌效果是其中之一。翻牌效果通常用于展示商品、产品或者活动,可以增加用户对网站的互动性、活力与趣味性。

2. CSS steps()函数

2.1 定义

steps()函数是CSS3中新增的动画步骤函数,可以用于平滑的过渡效果。它的语法如下:

steps(n[, [ jump-end|jump-none|jump-start]])

其中n是必须的参数,表示动画从开始到结束的状态需要经过多少步(步数)。

第二个参数可选,表示动画被分割后,最后一步的状态的变化(jump-none 默认值,即动画最后一步不做任何变化;jump-start 最后一步到第二步之间会跳跃一个步骤;jump-end 最后一步到最后一步之后会跳跃一个步骤)。

2.2 实现翻牌效果

翻牌效果通常用于展示商品、产品或者活动等,假设一个卡片的前面是一个图片(.card .front),背面则是内容(.card .back)。

首先,需要使用transform: rotateY()函数,将卡片进行旋转。当然,需要使用CSS动画属性transition来实现旋转动画效果。

.card {

width: 200px;

height: 300px;

position: relative;

cursor: pointer;

transition: 0.5s all ease;

}

.card .front {

background-image: url('front.jpg');

background-size: cover;

}

.card .back {

background: #fff;

transform: rotateY(180deg);

}

要实现翻牌效果,我们需要在:hover伪类中添加rotateY(180deg)函数。这样可以使得用户在鼠标悬停在卡片上时,观察到卡片翻转的效果。

但是,用户离开鼠标后,卡片还是原来的样子。为了让卡片翻转回去,需要使用CSS steps()函数来实现。

下面是代码:

.card:hover .front {

transform: rotateY(-180deg);

}

.card:after {

content: '';

position: absolute;

top: 0;

left: 0;

width: 100%;

height: 100%;

background: rgba(0,0,0,0);

transition: 0.5s all ease;

transform-origin: bottom;

transform: rotateX(90deg);

transform-style: preserve-3d;

pointer-events: none;

}

.card:hover:after {

background: rgba(0,0,0,0.6);

transform: rotateX(0deg) translateY(-50%);

}

其中,.card:after表示卡片的背景遮罩层。通过鼠标悬停增加背景遮罩层的透明度来达到卡片翻转的效果,即背面(.card .back)翻转展示在用户面前。

3. 随机翻牌效果

3.1 实现思路

以上实现翻牌效果的动画是固定的,与JS无关,不能进行随机翻牌的效果。如果想要实现随机翻牌,可以使用JS的Math.random()函数来实现。

翻牌的每个角落需要有一个对应的索引,而这个索引可以通过JS Math.random()函数来计算得出。

下面是实现代码:

function getRandomIndex() {

const rand = Math.random();

if (rand < 0.25) return 1;

if (rand < 0.5) return 2;

if (rand < 0.75) return 3;

return 4;

}

document.querySelectorAll('.cards').forEach(function(card) {

const back = card.querySelector('.back');

const rndIndex = getRandomIndex();

back.style.setProperty('animation', `flip .7s ${rndIndex}s ${getRandomIndex()} normal forwards`);

});

可以看出,上面的代码中使用了一个forEach()函数,对于每个卡片,通过card.querySelector('.back')选择了它的背面,并且为其新建一个随机索引值rndIndex。我们可以在动画属性animation中使用flip关键字,让JS动态地更改动画。上面的代码中,使用了一个随机的时间,将其分配给它的CSS属性animation。

4. 总结

CSS3的steps()函数可以使得动画变得更平滑,在实现网页翻牌效果时可以利用它。同时,通过JS Math.random()函数的配合,可以实现随机翻牌效果,让网页的互动效果更加有趣、有看点。