15158846557 在线咨询 在线咨询
15158846557 在线咨询
所在位置: 首页 > 营销资讯 > 网站运营 > html + css + js 制作卡片旋转效果

html + css + js 制作卡片旋转效果

时间:2023-09-27 16:12:01 | 来源:网站运营

时间:2023-09-27 16:12:01 来源:网站运营

html + css + js 制作卡片旋转效果:

卡片旋转效果

在网页设计中,类似以下的卡片旋转效果是十分常用的:








下面,说明以下实现思路与代码。

实现思路

(这里只介绍关键代码与思路)

在网页中,多数元素是以2D形式存在的,这意味着它们没有正反面之分,就无法实现旋转的效果。

所以,首先要使卡片元素具有3D属性。在css中设置如下属性来实现:

.card { transfrom-style: preserve-3d;}这样就可以设置卡片的正面与反面,也就是说一个卡片的HTML结构应如下:

<body> <div class="card"> <div class="front"></div> <div class="back"></div> </div></body>这样写之后,网页变成这样:




可以看到,卡片并没有像我们想的那样,一个在前,一个在后,而是仍上下排列。这是由于定位的问题造成的。

添加绝对定位后可以解决:

.front,.back { position: absolute;}然后发现,网页变成了这样:




背面的元素居然显示在前面!

这又是什么原因呢?

这是因为我们并没有指定哪个是正面,哪个是反面,由于CSS的层叠特性,后写的背面自然而然地显示出来

那么,要怎么设置呢?

只要将要显示在背面的绕着Y轴旋转180度,就可以让其转到背面去了

.back { translate: rotateY(180deg);}网页变成了这样:




观察单词hello的奇形怪状,我们发现其确实转到了背面,为什么显示的还是背面呢?

因为,css的这个3D属性并不会有遮挡效果,所以理论上,我们是既可以看到正面,又可以看到背面的,由于先后顺序,我们相当于是透过了正面看到背面

解决办法也很简单,只要将背面设置为不可见即可

.front,.back { position: absolute; backface-visibility: hidden;}卡片成功正确显示:




这时候,有人就会问了:你不是说设置背面不可见吗?怎么正面也设置了呢?

当然啦,不设置也是完全OK的,我这里只是为了偷懒,不用再开一个选择器:

.back { backface-visibility: hidden;}到这里,卡片的编写已经完成,接下来要考虑如何让它有旋转的效果。

这时候有人又会说了,旋转前面不是讲过吗,简单!

那就错了,前面的旋转代码会让图片一步到位直接显示,并没有动画效果,那怎么办呢?

css给我们提供了过渡的动画显示,会帮我们补充中间的过程动画,只需给卡片设置如下属性即可:

.card { transfrom-style: preserve-3d; /* 后面的秒数代表从初始到终止的历时 */ transition: 1s;}现在万事具备,只欠东风

那么如何编写js代码,实现点击旋转的效果呢?

通过前面的介绍,其实这一步非常简单:哪一面被点击了就让它旋转180度即可。

<script> window.onload = function(){ var card = document.getElementsByClassName('card')[0]; card.onclick = function(){ this.classList.toggle('flipped'); } }</script>.flipped { translate: rotateY(180deg);}

代码

1.HTML

<!DOCTYPE html><html lang="zh-CN"><head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <link rel="stylesheet" href="card.css"> <title>卡片旋转效果</title> <script> window.onload = function(){ var card = document.getElementsByClassName('card')[0]; card.onclick = function(){ this.classList.toggle('flipped'); } } </script></head><body> <div class="card"> <div class="front"></div> <div class="back">hello</div> </div></body></html>2.css

* { margin: 0; padding: 0;}.card { height: 270px; width: 270px; margin: 40px auto; /* 使该盒子具有3D属性 */ transform-style: preserve-3d; /*动画效果历时1秒 */ transition: 1s; /* 使具有旋转效果 */ perspective: 1000px;}.front { width: 100%; height: 100%; background-image: url('./img/youli.jpg');}.back { width: 100%; height: 100%; background-color: aqua; color: white; font-size: 26px; text-align: center; line-height: 270px; /* 让在背面显示的内容转到背面 */ transform: rotateY(180deg);}.front,.back { /* 让卡片背面与正面重合 */ position: absolute; /* 隐藏卡片背面 */ backface-visibility: hidden;}/* 点击时切换的样式 */.flipped { transform: rotateY(180deg);}
完整的源码如下:

链接:https://pan.baidu.com/s/1r1vO3HDYYMT5FjRJCudtOg

提取码:yard

作者初学,如有纰漏,恳请批评指正。

关键词:卡片,旋转,效果

74
73
25
news

版权所有© 亿企邦 1997-2025 保留一切法律许可权利。

为了最佳展示效果,本站不支持IE9及以下版本的浏览器,建议您使用谷歌Chrome浏览器。 点击下载Chrome浏览器
关闭