CSS作为网页设计必不可少的一部分,不仅可以用来美化页面,还能创建出炫酷的效果。本篇文章将会带您从入门到高级的层层深入,教您如何用CSS制作出炫酷的转盘效果。
Step 1:制作基本的转盘背景
首先,我们需要一个基本的转盘背景。我们可以使用 box-shadow 来制作一个黑色和灰色相间的圆环,类似于一个实体的转盘。代码如下:
```css
.disk {
width: 200px;
height: 200px;
border-radius: 50%;
box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.4),
-5px -5px 5px rgba(255, 255, 255, 0.4),
-5px 5px 5px rgba(255, 255, 255, 0.4),
5px -5px 5px rgba(255, 255, 255, 0.4);
}
```
我们可以在任意元素中使用这个 class 使它呈现出转盘的样子。
Step 2:制作出转盘上的多个部分
接下来,我们要给转盘添上几个彩色的扇形。我们可以使用伪元素来制作出类似于餐桌上的盘子的扇形。代码如下:
```css
.disk::before, .disk::after {
content: "";
position: absolute;
width: 0;
height: 0;
border-width: 100px 0 0 100px;
border-style: solid;
border-color: transparent transparent transparent #f00;
transform-origin: 0 0;
}
.disk::before {
left: 50%;
top: 0;
transform: rotate(0deg);
}
.disk::after {
left: 50%;
bottom: 0;
transform: rotate(180deg);
}
.disk::before:nth-child(2) {
transform: rotate(30deg);
}
.disk::after:nth-child(2) {
transform: rotate(150deg);
}
.disk::before:nth-child(3) {
transform: rotate(60deg);
}
.disk::after:nth-child(3) {
transform: rotate(120deg);
}
.disk::before:nth-child(4) {
transform: rotate(90deg);
}
.disk::after:nth-child(4) {
transform: rotate(90deg);
}
.disk::before:nth-child(5) {
transform: rotate(120deg);
}
.disk::after:nth-child(5) {
transform: rotate(60deg);
}
.disk::before:nth-child(6) {
transform: rotate(150deg);
}
.disk::after:nth-child(6) {
transform: rotate(30deg);
}
```
这些代码创建了六个伪元素来制作出六个扇形,每个扇形都是一个红色的三角形。
Step 3:制作出转盘上的小球
转盘上的小球是我们从CSS中轻松创建的一种常见的动画效果。我们可以使用绝对定位以及 box-shadow 来制作出小球,让它们在转盘上自由移动。代码如下:
```css
.ball {
position: absolute;
width: 30px;
height: 30px;
border-radius: 50%;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
box-shadow: 0px 0px 10px #fff,
0px 0px 40px #fff,
0px 0px 60px #fff,
0px 0px 80px #fff,
0px 0px 120px #fff,
0px 0px 140px #fff,
0px 0px 160px #fff;
}
```
我们可以在 JavaScript 中改变小球的位置以使它在转盘上移动。代码如下:
```javascript
const disk = document.querySelector('.disk');
const ball = document.querySelector('.ball');
let rotateDeg = 0;
let ballDeg = 0;
function rotate() {
rotateDeg += 3;
disk.style.transform = `rotate(${rotateDeg}deg)`;
requestAnimationFrame(rotate);
}
function moveBall() {
ballDeg += 3;
ball.style.transform = `rotate(${-ballDeg}deg) translateY(-100px)`;
requestAnimationFrame(moveBall);
}
rotate();
moveBall();
```
到此为止,我们就完成了一个炫酷的基本转盘。接下来,我们可以进一步为它添加更多的功能。
Step 4:添加交互功能
我们可以在转盘上添加一个按钮或者鼠标点击事件来实现在转盘上转动小球的效果。代码如下:
```javascript
const startBtn = document.querySelector('.btn');
startBtn.addEventListener('click', () => {
const disk = document.querySelector('.disk');
const ball = document.querySelector('.ball');
let rotateDeg = 0;
let ballDeg = 0;
let interval = setInterval(() => {
rotateDeg += 3;
disk.style.transform = `rotate(${rotateDeg}deg)`;
}, 10);
setTimeout(() => {
clearInterval(interval);
}, 5000);
let time = setInterval(() => {
ballDeg += 3;
ball.style.transform = `rotate(${-ballDeg}deg) translateY(-100px)`;
}, 10);
setTimeout(() => {
clearInterval(time);
}, 5000);
});
```
我们使用 setInterval 来旋转转盘和操作小球,使用 setTimeout 来停止它们的运动。
Step 5:使用JS制作出更复杂的效果
现在,我们已经拥有了一个炫酷的转盘了。接下来,我们可以再复杂一点,为转盘添加更多的功能。比如,我们可以使用JS将小球随机掉落到六个扇形中的任意一个。
首先,我们要创建出一个矩形,它的宽度和高度与小球的直径相等,并且用伪元素代替它。
```css
.disk::before {
content: "";
position: absolute;
width: 30px;
height: 30px;
background-color: #000;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
opacity: 0;
}
```
现在,我们可以使用 JS 设置一个随机数,用它的值来决定小球掉落到哪个扇形中。代码如下:
```javascript
let random = Math.floor(Math.random() * 6);
let section = document.querySelectorAll('.disk::before');
let sectionTop = section[random].getBoundingClientRect().top;
let ballTop = ball.getBoundingClientRect().top;
let top = sectionTop - ballTop;
let time = setInterval(() => {
ballDeg += 3;
if (top < -95) {
ball.style.transform = `rotate(${-ballDeg}deg) translateY(-95px)`;
clearInterval(time);
} else {
ball.style.transform = `rotate(${-ballDeg}deg) translateY(${top * -1}px)`;
}
}, 10);
```
我们在 JS 中设置了一个随机数,让小球落入扇形中,并在页面上以动画形式显示它的降落位置。
通过本篇文章的教程,您已经可以使用CSS制作出一个整洁,美观,炫酷的转盘了。通过掌握本篇教程中的技巧,您可以将它们应用于任何网页设计中,从而将自己的网页设计技能带到更高的水平。