写这篇之前先说一个可能不太受欢迎的结论:如果你打算做的是首页顶部那种自动轮播的大 Banner,先别急着挑效果。
Jakob Nielsen 在 2013 年那篇讲自动轮播的文章里记录过一次可用性测试:西门子官网首页的轮播上挂着一条洗衣机立减 100 英镑的促销,五秒换一屏;测试对象被要求去找洗衣机优惠,人就坐在那条 Banner 前面,愣是没看见。原因很直白——那条促销在任意时刻只有五分之一的概率显示在屏上。他给出的几条理由到今天依然成立:会动的东西被当成广告自动忽略;内容还没读完就被换走,外语访客和阅读慢的人尤其吃亏;界面自己动会让人失去控制感;对手部动作不便的用户,「在它消失前点中它」本身就是一项挑战。他的建议只有一句:只有用户主动要求时才切换到下一屏。
这不是说轮播不能用,是说要用对地方。作品集、图册、商品图、影视推荐位这些「内容本身就是并列的一组」的场景,轮播是合适的容器;而首页那条想同时塞进五条不同业务诉求的 Banner,轮播只是把内部意见分歧甩给了访客。下面 15 款是童哲网上架的轮播与切换类效果,按实现路数和落地成本分四组:常规轮播、3D 卡片轮播、滚动驱动的横向画廊、WebGL 重型效果。成本差异比看上去大得多,第二组开始就有硬门槛了。
第一组 · 常规轮播(01 - 03)—— 换上素材就能用
01. 轻量可访问图片轮播 —— 本文唯一把无障碍写进卖点的一款
原生 JS 键盘可操作 缩略图懒加载
支持键盘操作、平滑滚动切换、缩略图懒加载、相邻图片预加载。功能清单看着朴素,但这一款在本文十五个里是唯一一个把「键盘用户能不能用」当成正经卖点写出来的——其余大多数只写了「支持方向键」,那和完整的键盘可达性不是一回事。
它的两个加载策略也值得说:缩略图懒加载 + 相邻图片预加载,是轮播里最务实的组合。前者保证首屏不会因为二十张缩略图一起下载而卡住,后者保证用户点下一张时图已经在本地了、不会看到白框。很多华丽的轮播恰恰输在这里——要么一次性加载全部图片,首屏慢得离谱;要么完全不预加载,每次切换都闪一下白。
缺点是它没什么视觉记忆点,就是一个规规矩矩的图片轮播。想要「一眼哇哦」的效果得看后面几组。但如果你要做的是电商商品图、企业案例展示、博客相册这类轮播只是容器、内容才是主角的场景,规矩恰恰是优点。
02. 毛玻璃图片轮播 —— 取景框不动,风景在流动
原生 HTML+CSS+JS 毛玻璃面板 配置集中
它最讲究的一点是毛玻璃面板独立于滑动层:切换时面板本身纹丝不动,只有背后的照片横向推走,面板里的城市名、标签、坐标原地交叉淡出淡入。比整块内容一起飞出去要克制得多,也更像电影转场。照片和外层还做了不同速度的位移,有视差纵深。玻璃质感来自 backdrop-filter 的模糊加饱和度提升,再叠色调层和边缘光晕。交互给得很全:点击、方向键、移动端滑动、圆点跳转,另有自动播放、进度条、图片预加载进度条和自定义跟随光标。
对二次开发最友好的一点是数据全部集中在脚本顶部的一个数组里——城市、坐标、文案、配图、滤镜逐条配置,DOM 由 JS 生成。换成自己的内容只改这一处,不用去 HTML 里逐个复制粘贴 slide 结构。这在轮播类素材里是明显加分项,很多同类效果的内容是硬写在 HTML 里的,加一张图要改三个地方(图、圆点、计数)。
要留意两点:它自带自动播放,按开头说的道理,用在首屏之前建议先关掉或者至少加暂停;另外 backdrop-filter 在低端安卓机上滚动时可能掉帧,移动端可以考虑把模糊半径调小或者退化成半透明纯色面板。
03. 仿 Netflix 流媒体首页轮播 —— 交互方式给得最足的一款
GSAP + Draggable 无限循环 四种操作方式
整体是影视平台那套界面:中央是当前主推的片子,海报大图配标题、匹配度、年份、分级、画质标签和简介,下面是播放和详情两个按钮;两侧是缩小压暗带模糊的相邻卡片,纵深层次很明确。底部有编号和进度条,顶部是完整导航栏和用户头像位,深色配红色强调。
它给了四种操作方式——拖拽、点两侧箭头、直接点旁边的卡片、左右方向键,而且是无限循环,往哪个方向拖都不到头。「直接点旁边的卡片就能切过去」这个细节很多轮播不做,但它其实是最符合直觉的操作:我看见了想看的那张,为什么要先点箭头。切换时当前卡片放大变亮、文字信息按顺序错开浮现,不是整块一起出现,节奏感就是这么来的。
这一款适合的是「重点推荐少数几个内容」的场景:影视和视频站首页、课程平台、游戏商城、作品集。不适合的是拿它去做企业首页 Banner——它的信息密度是为影视卡片设计的(评分、年份、分级、时长),换成企业的业务口号会显得很空。另外用了 GSAP 的 Draggable,顺带一提,GSAP 的全部插件从 2025 年 4 月起已经免费、商用也不例外(Webflow 2024 年 10 月收购 GreenSock 之后开放的),所以不必担心授权成本;条款会变,上商业项目前按惯例去 官方许可页确认一眼。
第二组 · 3D 卡片轮播(04 - 08)—— 注意后三款要 React
04. CSS 3D 环形封面流 —— 不用任何库的立体感
CSS + JS 环形排布 无第三方库
卡片在三维空间里沿圆弧轨迹错落堆叠,形成一种把观者包住的环形纵深,配深色底和渐变质感,气质偏艺术向。适合高端时尚 Lookbook、艺术设计作品集、奢侈品线上展厅这类需要视觉调性的场合。
技术上最值得注意的是:这种环形包裹感过去通常要动用 3D 引擎,这一款只用网页原生的 CSS 3D 透视就做出来了,性能开销极轻。CSS 的 perspective 和 transform 是走 GPU 合成的,几十张卡片同时做变换也不会掉帧,而且不引入任何运行时依赖——包体积、构建流程、版本升级这些麻烦全都没有。本组后面三款 React 方案的视觉效果并不比它强多少,但落地成本高一个量级,值得对照着看。
限制在于 CSS 3D 只能做「摆位置」,做不了光照、折射、材质这些需要着色器的东西(想要那些看第四组)。另外环形轨迹上的卡片两侧会被压扁到很窄,实际能看清的只有中间两三张,所以它适合展示「氛围」而不是「内容」——如果每张卡片上有必须读到的文字,这个形态就不合适。
05. 分层视差 3D 卡片轮播 —— 四种切换方式都做了
CSS 3D + 原生 JS + SVG 四种切换方式 无框架
每张卡片由背景层、边框层、内容层叠加而成,鼠标移动时卡片跟着倾斜,各图层按不同深度偏移,SVG 波浪和几何装饰也以不同速度错位跟随,纵深感很实在;移开即平滑复位。切换支持左右按钮、圆点跳转、键盘方向键、移动端滑动手势四种,缓动柔和,窗口缩放后位置自动重算。示例内容按健康、数学、生物等类别配色区分,每张卡带独立标题、说明和跳转按钮。
它和上一款都是不依赖框架的 CSS 3D 方案,但定位不同:上一款是「氛围型」,这一款是「内容型」——卡片是正面朝向观者的,标题、说明、按钮都能正常读,所以它能真的承载信息。产品功能展示、工具导航页、课程与专题介绍这类每张卡都要说清一件事的场景更适合它。
「四种切换方式都做了」这件事我要单独夸一句。轮播是最容易在操作方式上偷工的组件:只做点击不做滑动,手机上就难用;只做滑动不做键盘,桌面端和无障碍就丢了。这一款四种全给,加上窗口缩放自动重算位置,说明作者是按实际项目的标准做的,不是做个演示截图交差。
06. React 3D 倾斜堆叠轮播 —— 从这一款开始要 React
React + Motion 倾斜堆叠 导航状态
两侧卡片以特定角度倾斜错落堆叠,切换时是流畅的 3D 空间位移加角度过渡,视线被稳稳压在中央那张上。带导航状态指示,立体感和秩序感都有,适合创意作品集、产品亮点展示、音乐相册、高质感落地页。
这里必须停下来说清楚一件事,因为它决定了本组后三款你能不能用:3919、3966、4031 都是 React + Motion(旧名 Framer Motion)组件,不是能直接扔进 HTML 页面的代码片段。 如果你的站点是 WordPress、静态 HTML 模板、Thymeleaf/PHP 这类服务端渲染的传统结构,想用它们就得先有一套 React 构建环境——起 Vite 或 Next 的工程、装依赖、打包,再把产物挂到页面上;或者退而求其次做成独立页面用 iframe 嵌进去(能跑,但样式联动和高度自适应都要额外处理)。这不是一两个小时的事。
反过来,如果你本来就是 React 项目,这三款的性价比就非常高:Motion 的弹簧动效参数化程度很好,组件化之后复用、改数据源、接接口都顺手,比用 CSS 硬凑 3D 状态机干净得多。所以这一组的选型判断很简单——先看你的技术栈,再看效果好不好看。顺序反了会白花时间。
07. React 斜向轨迹画廊轮播 —— 打破水平和垂直的第三条路
React + Motion 斜向轨迹 缩放 + 倾斜
卡片切换时沿斜向轨迹平滑位移,同时叠加动态缩放和角度倾斜,空间层次比常规的左右推移丰富不少。适合创意作品集、时尚品牌展示、个人主页画廊、设计类站点的核心展示区。
斜向运动这个选择是有道理的:水平和垂直的位移在视觉上是「平移」,斜向位移天然带一点纵深暗示,同样的动画时长,观感上信息量更大。代价是可预测性下降——用户不太能预判下一张会从哪个方向来,所以它适合「随便看看」的浏览场景,不适合需要精确定位第几张的场景。
依赖问题同上一款,需要 React 环境。另外这一款的描述里没有提到操作方式的完整程度(键盘、触屏手势有没有做全),下单前建议在演示页上用键盘和手机各试一遍,这类偏视觉的组件容易只做鼠标点击。
08. React 抽屉式 3D 相册 —— 三款 React 里质感最干净的
React + Motion + Tailwind 抽屉式 弹簧动效
图片像文件柜里的卡片一样侧立排列,靠 3D 透视和旋转做纵深;点任意一张,它向上抽出并放大,其余卡片留在原位。切换用的是弹簧动效,回弹自然不生硬。底部悬浮控制条支持左右翻页和圆点直达,当前位置以指示条拉长的方式呈现。配毛玻璃质感和柔和灰调背景,观感干净高级;卡片宽度是响应式取值,大小屏都自适应。
「其余卡片留在原位」是这一款和前两款最大的区别。 常规轮播切换时整排都在动,用户要重新建立空间感;抽屉式只有被选中的那张出列,其余作为静止的背景保持稳定,所以「我在这一组的第几张」这个位置感始终不丢。做摄影作品集、设计师作品展示、产品图册、品牌故事页时,这种稳定感比动得花哨更有用。
它还额外带了 Tailwind CSS 依赖。如果你的项目已经在用 Tailwind,那是白捡;如果没用,就是又多一层构建配置。加上 React 本身的门槛,这一款的落地成本在本文十五个里排前几名——效果确实好,但要把账算清楚。
第三组 · 滚动驱动的横向画廊(09 - 11)—— 用竖向滚轮浏览横向内容
09. GSAP 横向滚动 Coverflow —— 把区块钉住再推进
GSAP + ScrollTrigger 滚动钉住 Coverflow
玩法是「用竖向滚轮驱动横向浏览」:页面滚到这个区块时把它钉在屏幕中央,此后继续滚动不再上移,而是让卡片队列横向推进,走完全程才放行。卡片做了 Coverflow 式的立体处理——每帧根据它离屏幕中心的距离实时算 Y 轴旋转、缩放和 Z 轴纵深,越靠中间越正越大,两侧倾斜后退,排成一条弧。容器开了透视和 3D 上下文,卡片是黏土质感的内外双层阴影,标题和下方的订阅表单用滚动触发的上移淡入。
这种「钉住 + 横向推进」的做法(业内叫 pinned horizontal scroll)观感确实高级,但它借用了用户的滚动条,所以有代价:滚动到这里的人会发现页面「卡住不往下走了」,如果卡片很多、推进行程很长,一部分人会以为页面坏了或者失去耐心。稳妥的做法是把行程控制在两三屏之内,并且给一点视觉提示(进度条或者「继续滚动」的暗示),让人知道这是设计而不是故障。另外这类效果在移动端要谨慎,触屏滚动的惯性和这套接管逻辑容易打架。
它同样是 GSAP 方案(ScrollTrigger),授权问题见第 03 款的说明。适合产品陈列、品牌故事、作品集、电商首页展示区。
10. 横向无限视差画廊 —— 自动吸附居中的那个细节
原生 JS + CSS 无限循环 惯性 + 吸附
深酒红底色上一排横向圆角图片,右上角压着大字标题,画廊海报式的排版。滚轮在页面任意位置都能用,不必把鼠标移到图片上;也可以直接拖着滑,松手后带惯性走一段再慢慢衰减。图片列表复制了几份首尾相接,怎么滑都不到头。每张图的实际尺寸比框大一圈,滚动时在框内反向轻微位移,所以看起来有前后层次而不是整块平移。没有依赖任何库。
最值得学的是「停下来后自动吸附,把最近的那张图对正到屏幕中央」。听着是小事,但没有这一步的横向画廊,用户松手后经常卡在两张图中间,画面构图就散了,还得再拨一下。这个细节和第 08 款的「其余卡片留在原位」是同一类考量:让界面自己收敛到一个整齐的状态,而不是把对齐的工作丢给用户。
它有一个要处理的地方:图片素材走的是外部图床。 这一组三款都有这个情况,我放在第 11 款一起说。
11. 滚动翻转 3D 立方体画廊 —— 顺带说说外部图床这件事
CSS 3D + Lenis 六面切换 背景同步
屏幕中央一个立方体,六个面各贴一张摄影作品。往下滚,立方体依次翻到下一面,转到哪一面整个页面背景就同步换成那张图的放大模糊版,前景清晰、背景朦胧、色调统一,画面很整。图片按作者分成七组,一组六张对应六个面,转完一圈自动换下一组。左下角实时显示当前作品的标题和摄影师署名。做了预加载,下一张提前备好,翻面时不会出现白块。用 Lenis 接管滚动之后,滚轮和触控板的手感明显比原生顺。
现在说图床。本文有三款(第 10、11、12 款)在说明里都明确写了同一句话:图片来自外部图床,自己用记得换成本地素材。 作者肯说这句话是负责任的,但很多人会当耳旁风,所以展开讲讲为什么必须换:一是可用性,免费图床随时可能限流、改域名或者直接关停,到时候你的首屏就是一片空白,而且往往是几个月后才被发现;二是速度,境外图床在国内的访问延迟经常是自有服务器的好几倍,这类效果又恰恰是首屏视觉,直接拖累最大内容绘制的时间;三是版权,演示用的图基本都是图库随机抓的,商用出问题的是你不是作者。换成本地素材顺便还能做一件事:按实际显示尺寸压缩并转成 WebP,这一步对加载速度的改善通常比任何前端优化都大。
另外这一款用了 Lenis 做平滑滚动。平滑滚动库能明显改善手感,但它是接管了浏览器原生滚动的,如果站点里还有其他依赖滚动位置的功能(吸顶导航、锚点跳转、滚动动画),要一起联调,别装上就走。
第四组 · WebGL 重型效果(12 - 15)—— 效果上限最高,也最挑设备
12. Three.js 五层视差无限图片墙 —— 循环复用才是它性能稳的关键
Three.js 五层视差 对象回收
整屏横向流动的照片分成五层,越靠前的越大越亮跑得越快,越靠后的越小越淡跑得越慢,叠起来纵深感很强。每张图还在轻微上下浮动、缓慢呼吸缩放,画面始终是活的。按住拖动浏览,松手带惯性;滚轮可以加速,往哪个方向滚就往哪个方向跑,还能反向。图片是从图库里随机不重复抽取的,每次刷新排列都不一样。
技术上真正的关键是这句:图片滑出屏幕后自动回收到另一端重新排队。 这是对象池的思路——屏幕上始终只有固定数量的对象在渲染,不管用户滑多久,内存和绘制开销都是恒定的。如果换成「滑到头就往后再建一批」,滑个几分钟就会越来越卡直到崩掉。这类无限滚动效果里,做没做回收是能不能长时间使用的分水岭。
代价是 Three.js 本身的体积和 GPU 开销。五层同时在动,中低端手机会明显发热和掉帧,用在首屏还会因为要先加载运行库和贴图而拖慢首次渲染。适合摄影作品集、设计工作室官网、品牌视觉墙、展览活动页这类「视觉即内容」的场合;企业官网、内容型站点没必要。素材同样来自外部图床,见上一款。
13. Three.js 3D 螺旋无限滚动 —— 自己写清楚了两条限制
Three.js + 自定义着色器 单次绘制 限制已注明
二十多张图片沿螺旋轨迹环绕成一条上升的「胶片带」,滚轮或触屏上下滑动让它连续旋转穿行,松手后带摩擦衰减的惯性慢慢停下;鼠标拖拽能小幅倾斜整个螺旋换视角,左右方向键微调远近。
实现思路很聪明:它没有摆二十多张独立卡片,而是把所有图先拼进一张长条画布当作总贴图,再把一个平面网格按公式弯成螺旋,滚动时只是平移 UV 坐标并循环取值。 结果是既没有接缝,帧率也稳——因为不管多少张图,都是同一次绘制。换图只改 imageUrls 数组,圈数和高度会跟着数量自动调整,每张图的宽高比也保留。
这一款我要专门表扬一句:它把自己的两条硬限制明明白白写在了说明里——图片被烘进单张贴图,数量或分辨率过高会顶到显卡贴图尺寸上限,建议控制在几十张、单边不超过 800px;另外用了 canvas 读图,图片源必须支持跨域,否则会加载失败。这两条都是买回去当天就会撞上的问题,肯提前说的素材不多。跨域这条尤其要留意:如果你把图片放在第三方对象存储或 CDN 上,得先在那边配好允许跨域访问,否则效果直接白屏。
14. 全息镭射折射卡片轮播 —— 本文视觉上限
Three.js + WebGL 折射着色器 实时反射
多切面折射着色器加实时地面镜像反射,卡片在旋转流转中折射出镭射渐变光泽,再叠泛光辉光和边缘色差偏移,像全息卡牌那种通透流动的光学质感。把珠宝切割的光影美学搬进网页交互,适合摄影和设计作品集、数字藏品展示、高端品牌首屏、潮流单品与艺术展落地页。
这是本文里视觉冲击最强的一款,也是设备门槛最高的一款。折射和实时反射都是逐像素的着色器计算,反射还意味着场景要多渲染一遍,这在桌面独显上轻松,在中低端手机上就是另一回事了。用它之前请务必在真机上测:不只是看帧率,还要连续跑两分钟看发热和降频。
另一个现实问题:它的美学是「卡牌」的美学——光泽、切面、收藏感。这套语言用在数字藏品、潮牌、限量单品上非常贴,用在普通商品或者企业内容上会显得用力过猛,而且强烈的光泽会盖过卡面上的信息本身。所以选它之前先确认:你要展示的东西,够不够格被这样打光。
15. Three.js 魔方全息画廊 —— 把切换动作本身变成了内容
Three.js + Canvas + CSS3 六面画作 自动复原动画
页面中央一个可自由旋转的 3D 魔方,六个面分别对应一套用 Canvas 程序化生成的数字画作。左侧色块列表就是导航——点选任意一面,魔方自动「复原」到该面朝向观众,把作品完整展示出来,并且展示复原的全过程动画;底部还有打乱、重置、自动旋转三个开关。配色走浅底加高饱和色块的极简路线,玻璃拟态面板压得很轻,视觉重心始终在魔方上。
它最妙的地方是把「解魔方」这个动作转成了切换画作的交互逻辑。常规轮播的切换过程是纯粹的过场,用户等它走完;这里的切换过程本身就是一段值得看的表演,等待变成了内容的一部分。想给页面找一个视觉钩子的话,这种「交互即内容」的设计比单纯把动效做华丽更有记忆点。
它的限制和整组一样是设备与体积,另外还有一层:六个面就是六张,这个数量是被几何形状锁死的,多了放不下、少了面会空。而且六个面里同一时刻只能看到一到两面,其余全靠转,所以它天然不适合需要横向比较的内容(比如商品列表)。适合作品集首页、创意工作室展示页、产品概念站、需要一个钩子的活动页。
常见问题
Q:首页顶部那条自动轮播 Banner,到底还该不该做?
A:开头引的那个研究已经给了答案,这里说得再实际一点。首页 Banner 做轮播,通常不是设计需要,是内部意见没谈拢——市场想推活动、销售想推产品、老板想放企业形象,谁也不让谁,于是做成五屏轮着来,结果是五条信息都没人看清。真正有效的做法是:选一条最重要的做成静态首屏,把其余的放到下面的区块里,各自有各自的位置。如果确实必须轮播(比如电商的多个并行活动),那就守住两条底线:默认不自动播放,或者给一个明显的暂停按钮;以及每一屏都必须有独立可点的入口和说清楚的文案,不要用「了解更多」这种什么都没说的按钮。
Q:轮播会拖慢网站吗?
A:会,而且拖的往往是最要命的那个指标。首屏轮播里的大图通常就是页面的最大内容绘制元素,它多久出现,用户就多久才感觉到「页面加载好了」。三个常见错误:一是一次性加载全部图片,五张图就是五倍的首屏流量,而用户九成只会看第一张;二是把轮播容器的高度交给 JS 算,图片加载完撑开容器,页面内容整个往下跳,布局偏移分数就是这么来的;三是图片没按显示尺寸压缩,直接把 4000px 的原图丢进一个 1200px 宽的容器。对应的做法也简单:第一张图正常加载并提高优先级,其余的懒加载;给容器写死宽高比预留空间;素材按实际尺寸导出并转成 WebP。本文第 01 款的「缩略图懒加载 + 相邻预加载」就是这套思路的现成实现。
Q:那三款 React 的,我的静态网站能用吗?
A:不能直接用,但有办法。三条路:一是搭一套构建环境(Vite / Next),把组件打包成 JS 文件挂到页面上——最正规,但你的项目从此多了一条前端构建链,后续维护要有人接得住;二是做成独立页面用 iframe 嵌入——最省事,代价是样式不联动、高度要自己传消息同步,而且 iframe 里的内容搜索引擎抓取效果差;三是干脆换一款不依赖框架的——本文第 04、05 两款都是 CSS 3D 加原生 JS,视觉效果并不输多少。多数情况下第三条是最划算的。选之前先问自己一句:为了这个轮播,值不值得给项目引入一整套构建体系。
Q:WebGL 的那几款,在手机上会不会卡?
A:会,程度取决于机器和效果的复杂度。判断方法是在真机上连续跑两分钟,看三件事:帧率有没有稳定在流畅区间、机身有没有明显发热、系统有没有因为发热开始降频(表现是跑着跑着突然变卡)。桌面端跑得飞快说明不了任何问题。稳妥的工程做法是做条件加载:检测到移动端或者低性能设备时,直接换成一个静态大图或者第一组那种轻量轮播,别让访客用发烫的手机看你的酷炫效果。另外要考虑没有 WebGL 的极端环境(老设备、部分内嵌浏览器、关闭了硬件加速的机器),至少保证页面不是一片黑。
Q:轮播里的图片和文字,搜索引擎能读到吗?
A:分情况。如果 slide 的内容是写在 HTML 里、只靠 CSS 控制显示与隐藏,能读到;如果是像本文第 02 款那样由 JS 从数组里生成 DOM,就取决于搜索引擎渲染 JS 的能力——主流引擎能渲染,但要多花一轮抓取,而且不保证每次都执行。所以如果轮播里承载的是重要内容(比如产品名和卖点),最稳的做法是把文字同时写进 HTML;如果只是装饰性图片,怎么生成都无所谓。另外别忘了给每张图写有意义的 alt ——这既是无障碍要求,也是图片搜索的唯一入口,写成「图片1」「banner-2」等于白放。


























