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