gsap实现网格反向uv投影悬浮交互动画代码
代码语言:html
所属分类:悬停
代码描述:gsap实现网格反向uv投影悬浮交互动画代码,可调节参数。
代码标签: gsap 网格 反向 uv 投影 悬浮 交互 动画 代码
下面为部分代码预览,完整代码请点击下载或在bfwstudio webide中打开
<!DOCTYPE html> <html lang="en" > <head> <meta charset="UTF-8"> <link rel="preconnect" href="https://fonts.googleapis.com" /> <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin /> <link href="https://fonts.googleapis.com/css2?family=Gloria+Hallelujah&display=swap" rel="stylesheet" /> <link rel="stylesheet" href="https://public.codepenassets.com/css/normalize-5.0.0.min.css"> <style> @import url('https://unpkg.com/normalize.css') layer(normalize); @layer normalize, base, demo, cubes; @layer cubes { .card { touch-action: none; } body { overflow-x: hidden; } .cuboid { width: 100%; /*height: calc(200% - (var(--proximity, 0) * 200%));*/ height: 200%; /*scale: calc(1 - var(--proximity, 0)) 1;*/ position: absolute; bottom: 50%; transform-origin: 50% 100%; transform: rotateX(-90deg) translateY(50%) scaleY(calc(1 - (var(--proximity, 0) * 0.9))); container-type: inline-size; transform-style: preserve-3d; div { background: light-dark( hsl(280 calc(10% + (var(--proximity, 0) * 280%)) 70%), hsl(10 calc(10% + (var(--proximity, 0) * 280%)) 30%) ); } div:nth-of-type(1) { position: absolute; width: 100%; aspect-ratio: 1; top: 0; transform: translateY(-50%) rotateX(-90deg); } div:nth-of-type(2) { position: absolute; width: 100%; height: 100%; aspect-ratio: 1; top: 0; left: 0; transform-origin: 0 50%; transform: rotateY(-90deg) translateX(-50%); filter: brightness(0.25); } div:nth-of-type(3) { position: absolute; width: 100%; height: 100%; aspect-ratio: 1; top: 0; left: 0; transform-origin: 0 50%; transform: translate3d(0, 0, 50cqi); filter: brightness(0.5); } } .arrow { display: inline-block; position: fixed; font-size: 0.875rem; opacity: 1; font-family: 'Gloria Hallelujah', cursive; transition: opacity 0.26s ease-out; rotate: 10deg; width: 60px; z-index: 99999; top: 50%; left: 50%; translate: -200% -350%; span { display: inline-block; rotate: -24deg; width: 160%; translate: -20% 110%; } svg { scale: 1 -1; translate: 60% 60%; rotate: -5deg; left: 0%; width: 80%; } } } @layer demo { .card { position: relative; width: calc(var(--width) * 1px); height: calc(var(--height) * 1px); transform: rotateX(calc(var(--x1, 0) * 1deg)) rotateY(calc(var(--y1, 0) * 1deg)) rotateX(calc(var(--x2, 0) * 1deg)); /* isometric-ish */ transform-style: preserve-3d; display: grid; grid-template: repeat(8, 1fr) / repeat(8, 1fr); gap: 4px; div:not([class]) { /*background: hsl(calc(0 + (var(--proximity, 0) * 120)) 100% 50%);*/ background: #0000; display: grid; place-items: center; /*overflow: hidden;*/ position: relative; transform-style: preserve-3d; } } /* markers to “carry” the corners through the transform */ .corners { position: absolute; inset: 0; } .corners .c { position: absolute; width: 0; height: 0; pointer-events: none; } .corners .tl { left: 0; top: 0; } .corners .tr { right: 0; top: 0; } .corners .bl { left: 0; bottom: 0; } .corners .br { right: 0; bottom: 0; } .readout { position: fixed; bottom: 8px; right: 8px; font: 600 14px/1.2 ui-monospace, SFMono-Regular, Menlo, monospace; } } @layer base { :root { --font-size-min: 16; --font-size-max: 20; --font-ratio-min: 1.2; --font-ratio-max: 1.33; --font-width-min: 375; --font-width-max: 1500; } html { color-scheme: light dark; } [data-theme='light'] { color-scheme: light only; } [data-theme='dark'] { color-scheme: dark only; } :where(.fluid) { --fluid-min: calc( var(--font-size-min) * pow(var(--font-ratio-min), var(--font-level, 0)) ); --fluid-max: calc( var(--font-size-max) * pow(var(--font-ratio-max), var(--font-level, 0)) ); --fluid-preferred: calc( (var(--fluid-max) - var(--fluid-min)) / (var(--font-width-max) - var(--font-width-min)) ); --fluid-type: clamp( (var(--fluid-min) / 16) * 1rem, ((var(--fluid-min) / 16) * 1rem) - (((var(--fluid-preferred) * var(--font-width-min)) / 16) * 1rem) + (var(--fluid-preferred) * var(--variable-unit, 100vi)), (var(--fluid-max) / 16) * 1rem ); font-size: var(--fluid-type); } *, *:after, *:before { box-sizing: border-box; } body { background: light-dark(#fff, #000); display: grid; place-items: center; min-height: 100vh; font-family: 'SF Pro Text', 'SF Pro Icons', 'AOS Icons', 'Helvetica Neue', Helvetica, Arial, sans-serif, system-ui; } body::before { --size: 45px; --line: color-mix(in hsl, canvasText, transparent 80%); content: ''; height: 100vh; width: 100vw; position: fixed; background: linear-gradient( 90deg, var(--line) 1px, .........完整代码请登录后点击上方下载按钮下载查看
网友评论0