gsap实现运动鞋商品主图幻灯片聚光灯交互效果代码
代码语言:html
所属分类:电商
代码描述:gsap实现运动鞋商品主图幻灯片聚光灯交互效果代码
代码标签: gsap 运动鞋 商品 主图 幻灯片 聚光灯 交互 代码
下面为部分代码预览,完整代码请点击下载或在bfwstudio webide中打开
<!DOCTYPE html>
<html lang="en" >
<head>
<meta charset="UTF-8">
<link
href="https://fonts.googleapis.com/css2?family=Gloria+Hallelujah&family=Noto+Sans:ital,wght@0,100..900;1,100..900&display=swap"
rel="stylesheet"
/>
<style>
@import url('https://unpkg.com/normalize.css') layer(normalize);
@layer normalize, base, demo, arrow;
@layer arrow {
.arrow {
mix-blend-mode: difference;
font-family: 'Gloria Hallelujah', cursive;
font-size: 0.875rem;
position: absolute;
left: 135%;
bottom: 65%;
rotate: 26deg;
transition: filter 0.26s ease-out, opacity 0.26s ease-out;
filter: blur(4px);
pointer-events: none;
line-height: 1.5;
z-index: 100;
opacity: 0;
span {
white-space: nowrap;
}
svg {
top: calc(100% + 0.5rem);
position: absolute;
translate: -50% 0;
scale: -1 -1;
left: -1rem;
width: 60px;
}
}
[data-reveal] .arrow {
opacity: 0.7;
filter: blur(0px);
}
}
@layer base {
html {
color-scheme: dark;
}
*,
*:after,
*:before {
box-sizing: border-box;
}
body {
background: light-dark(#fff, #000);
display: grid;
place-items: center;
padding-block: 1rem;
min-height: 100vh;
font-family: 'Noto Sans', '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,
transparent 1px var(--size)
)
calc(var(--size) * 0.36) 50% / var(--size) var(--size),
linear-gradient(var(--line) 1px, transparent 1px var(--size)) 0%
calc(var(--size) * 0.32) / var(--size) var(--size);
-webkit-mask: linear-gradient(-20deg, transparent 50%, white);
mask: linear-gradient(-20deg, transparent 50%, white);
top: 0;
transform-style: flat;
pointer-events: none;
z-index: -1;
}
.sr-only {
position: absolute;
width: 1px;
height: 1px;
padding: 0;
margin: -1px;
overflow: hidden;
clip: rect(0, 0, 0, 0);
white-space: nowrap;
border-width: 0;
}
}
@layer demo {
.grid {
display: flex;
flex-wrap: wrap;
gap: 10px;
max-width: calc(100vw - 2rem);
margin: 0 auto;
position: relative;
}
.card {
display: flex;
flex-direction: column;
gap: 16px;
max-width: 100%;
width: 320px;
aspect-ratio: 390 / 450;
background: hsl(0 0% 22%);
padding: 4px;
position: relative;
-webkit-tap-highlight-color: #0000;
border-radius: 24px;
cursor: pointer;
box-shadow: 0 1px 0 0 hsl(0 0% 100% / 0.08) inset,
0 0 0 1px hsl(0 0% 100% / 0.06), 0 4px 12px -4px hsl(0 0% 0% / 0.6);
&:is(:hover, :has(:focus-visible)) .card__body::before {
opacity: 1;
transition-delay: var(--hover-delay);
}
&:is(:hover, :has(:focus-visible)) a {
background: #000;
box-shadow: none;
transition-delay: var(--hover-delay);
}
&:is(:hover, :has(:focus-visible)) .icons {
translate: 50% 0;
transition: translate 0.16s var(--hover-delay) ease-out;
svg {
opacity: 1;
transition-delay: var(--hover-delay);
}
}
h2 {
display: grid;
span:first-of-type {
text-transform: uppercase;
font-size: 0.675rem;
font-weight: 800;
color: #9a9a99;
}
span:last-of-type {
font-size: 1.5rem;
}
}
}
.card:has(a:focus-visible) {
outline: 2px solid white;
outline-offset: 2px;
}
/* ── Card stack + reveal ── */
.card-stack {
display: grid;
transform-style: preserve-3d;
perspective: 200px;
> * {
grid-area: 1 / 1;
transition: transform 0.26s cubic-bezier(0.4, 0, 0.2, 1);
}
}
.card--blueprint {
--print-line: hsl(210 0% 40% / 1);
background: hsl(210 0% 100% / 0.1);
pointer-events: none;
transform: translate3d(0, 0, -50px);
cursor: default;
&,
* {
position: relative;
&::before,
&::after {
content: '';
position: absolute;
border: 1px solid var(--print-line);
inset: min(-10px, -5%) 0;
-webkit-clip-path: inset(2px 0 2px 0);
clip-path: inset(2px 0 2px 0);
z-index: 10;
}
&::after {
inset: 0 min(-10px, -5%);
border: 1px solid var(--print-line);
-webkit-clip-path: inset(0 2px 0 2px);
clip-path: inset(0 2px 0 2px);
}
}
.card__body a {
overflow: visible;
background: #0000;
border: 1px solid var(--print-line);
box-shadow: none;
.icons {
width: 100%;
grid-template-columns: 1fr;
svg path {
fill: none;
stroke: none;
}
}
}
.card__spotlight-carousel > ul {
-ms-scroll-snap-type: none;
scroll-snap-type: none;
overflow: hidden;
}
img {
width: 100%;
height: 100%;
-o-object-fit: cover;
object-fit: cover;
}
.card__body {
flex: 1.........完整代码请登录后点击上方下载按钮下载查看















网友评论0