gsap+svg实现播放按钮点击变换成收音机播放音乐效果代码

代码语言:html

所属分类:多媒体

代码描述:gsap+svg实现播放按钮点击变换成收音机播放音乐效果代码

代码标签: gsap svg 播放 按钮 点击 变换 收音机 播放 音乐

下面为部分代码预览,完整代码请点击下载或在bfwstudio webide中打开

<!DOCTYPE html>
<html lang="en" >

<head>
  <meta charset="UTF-8">
  


  
  
<style>
*,
*:after,
*:before {
	box-sizing: border-box;
	transform-style: preserve-3d;
}

:root {
	--handle-girth: 10;
	--handle-multiplier: 0.5px;
	--surface-1: hsl(210 10% 50%);
	--surface-2: hsl(210 10% 40%);
	--surface-3: hsl(210 10% 30%);
	--surface-4: hsl(210 10% 20%);
	--surface-5: hsl(210 10% 10%);
	--speaker: hsl(0 0% 6%);
	--trim: hsl(0 0% 90%);
	--tweeter: hsl(0 0% 30%);
	--handle: hsl(0 0% 8%);
/*	--handle: var(--trim);*/
	--label: hsl(0 0% 98%);
	--top: hsl(210 10% 65%);
	--front: var(--surface-1);
	--grill: hsl(0 0% 10%);
	--back: var(--surface-3);
	--cassette: hsl(0 0% 0%);
	--control: hsl(210 80% 80%);
	--play: hsl(10 80% 80%);
	--accent: hsl(10 50% 50%);
	--drawer: hsl(210 10% 6%);
}

body {
	background: hsl(210 34% 84%);
	display: grid;
	place-items: center;
	min-height: 100vh;
	font-family:  'Google Sans', sans-serif, system-ui;
}

span {
	display: block;
}

.play-btn {
	position: relative;
	border: 0;
	padding: 0;
	background: none;
}

.play-btn__text {
	color: white;
	padding: 1rem 2rem;
	background: var(--front);
}

.txt {
	display: flex;
	align-items: center;
	gap: 0.5rem;
}

.play-btn__text svg {
	width: 24px;
}

.play-btn__box {
	--depth: var(--boom-depth);
	display: none;
	position: absolute;
	inset: 0;
	color: var(--surface-3);
	opacity: 1;
	transform: translate3d(0, 0, -1px);
/*	transform: translate3d(0, 0, calc(var(--boom-depth) * -0.5px));*/
}

.play-btn__box > .cuboid > .cuboid__side:nth-of-type(2):after {
	content: "";
	height: 16%;
	width: 60%;
	position: absolute;
	bottom: 6%;
	right: 0;
	background:
		repeating-linear-gradient(0deg, var(--grill) 0 20%, transparent 20% 40%);
}

.speaker {
	position: absolute;
	height: 55%;
	aspect-ratio: 1;
	border-radius: 50%;
	bottom: 0;
	background: conic-gradient(from 190deg, hsl(0 0% 20%) 0 45deg, transparent 0deg), var(--speaker);
	border: 4px solid var(--trim);
}

.tweeter {
	position: absolute;
	top: 50%;
	left: 50%;
	transform: translate(-50%, -50%);
	height: 50%;
	aspect-ratio: 1;
	border-radius: 50%;
	background: var(--tweeter);
}

.controls {
	position: absolute;
	bottom: 10%;
	left: 10%;
	height: 16%;
	display: flex;
	gap: 4px;
}

.bear {
	position: absolute;
	left: 5%;
	top: 5%;
	width: 20%;
	rotate: -30deg;
}

.brand {
	color: var(--trim);
	text-shadow: 2px 2px red;
	position: absolute;
	right: 4%;
	top: 8%;
	font-size: 1rem;
	font-family: monospace;
	font-weight: bold;
}

.brand:after {
	content: "";
	position: absolute;
	top: 110%;
	width: 100%;
	aspect-ratio: 2 / 1;
	background: var(--label);
	right: 0;
}

.control {
	--depth: 20;
	height: 100%;
	aspect-ratio: 1;
	color: var(--control);
}

.control:nth-of-type(1) {
	color: hsl(130 80% 80%);
}

.cogs {
	position: absolute;
	top: 50%;
	left: 50%;
	translate: -50% -50%;
	height: 40%;
	width: 70%;
	display: flex;
	justify-content: space-between;
}

.cogs:after {
	content: "";
	font-family: cursive;
	background: white;
	height: 0.5rem;
	position: absolute;
	top: 110%;
	width: 80%;
	left: 50%;
	overflow: hidden;
	translate: -50% 0;
}

.cog {
	fill: black;
	stroke: var(--trim);
}

.control:nth-of-type(3) {
	aspect-ratio: 2 / 1;
	color: var(--play);
}

.speaker--left {
	left: 0;
	translate: 10% -10%;
}

.speaker--right {
	right: 0;
	translate: -10% -10%;
}

.cassette-hole {
	--depth: 20;
	color: var(--surface-4);
	aspect-ratio: 4 / 2.5;
	width: 25%;
	position: absolute;
	top: 50%;
	left: 50%;
	translate: -50% 0;
	transform-origin: 50% 100%;
	transform: translate3d(0, 0, -11px);
}

.cassette-hole .cuboid__side:nth-of-type(5) {
	display: none;
}

.cassette {
	--depth: 10;
	color: var(--cassette);
	width: 90%;
	aspect-ratio: 4 / 2.5;
	transform: translate3d(0, 0, -11px);
}

.cassette-deck {
	aspect-ratio: 4 / 2.5;
	background:
		linear-gradient(90deg, var(--drawer) 10px, transparent 10px calc(100% - 10px), var(--drawer) calc(100% - 10px)),
		linear-gradient(0deg, var(--drawer) 10px, transparent 10px calc(100% - 10px), var(--drawer) calc(100% - 10px)),
		linear-gradient(-65deg, transparent 70%, hsl(0 0% 100% / 0.5) 70.5% 80%, transparent 80.5% 82%, hsl(0 0% 100% / 0.5) 82.5% 84%, transparent 84.5%),
		hsl(0 0% 100% / 0.2);
	display: grid;
	place-items: center;
	width: 25%;
	position: absolute;
	top: 50%;
	left: 50%;
	translate: -50% 0;
	transform-origin: 50% 100%;
	transform: rotateX(0deg);
}

.cassette .cuboid__side:nth-of-type(5) {
	background: linear-gradient(90deg, transparent 60%, red 60.5% 70.5%, transparent 71%), var(--cassette);
}

.cassette-deck:after,
.cassette-deck:before {
	content: "";
	position: absolute;
	bottom: 0;
	height: 85%;
	width: 10%;
	background: var(--drawer);
}

.cassette-deck:after {
	left: 100%;
	transform-origin: 0 50%;
	transform: rotateY(90deg);
	-webkit-clip-path: polygon(0 0, 100% 25%, 100% 100%, 0 100%);
	        clip-path: polygon(0 0, 100% 25%, 100% 100%, 0 100%);
}

.cassette-deck:before {
	right: 1.........完整代码请登录后点击上方下载按钮下载查看

网友评论0