滚动旋转揭示特效(卡片旋转入场,轴与角度实时可调)
滚动旋转揭示特效:卡片随滚动带旋转角度入场,支持平面、绕 X 轴、绕 Y 轴三种旋转轴,角度 5-45 度实时可调,透视 3D 质感,零依赖自研实现。
效果演示(真实可交互)
🎡 向下滚动:卡片带旋转角度入场,旋转轴与角度均可调
滚动旋转揭示
比单纯的淡入上移多一分「戏剧感」:卡片带着角度旋入视口,落定后归正,像翻开一张张扑克牌。
三种轴各有性格:平面旋转像轻巧的翻牌,绕 X 轴像日历翻页,绕 Y 轴像开门迎客。选型时结合内容气质——严谨的官网用平面小角度,创意站点可以玩大角度与立体轴。
配合 perspective 透视值,立体轴旋转会有真实的近大远小,这是让 3D 感「成立」的关键:透视值越小效果越夸张,600-1000px 是安全区间。
演示区用内嵌滚动容器模拟页面滚动:标题、段落与六张卡片都带旋转角度入场。下方控件可切换三种旋转轴并实时调节旋转角度,「重新播放」一键重看。
完整代码
<div class="sr-scroller" id="srScroller" data-axis="plane" style="--sr-angle: 14deg">
<div class="sr-item">滚动旋转揭示……</div>
</div>
.sr-scroller[data-axis="plane"] .sr-item {
transform: rotate(var(--sr-angle, 14deg)) translateY(22px);
}
.sr-scroller[data-axis="x"] .sr-item {
transform: perspective(700px) rotateX(calc(var(--sr-angle, 14deg) * -1)) translateY(22px);
}
.sr-scroller[data-axis="y"] .sr-item {
transform: perspective(700px) rotateY(var(--sr-angle, 14deg)) translateY(22px);
}
.sr-item { opacity: 0; transition: opacity .65s ease, transform .65s cubic-bezier(.4, 0, .2, 1); }
.sr-item.in { opacity: 1; transform: none; }
const io = new IntersectionObserver(entries => {
entries.forEach(en => {
if (en.isIntersecting) {
en.target.classList.add('in');
io.unobserve(en.target);
}
});
}, { root: scroller, threshold: 0.2 });
items.forEach(el => io.observe(el));
实现要点:初始状态叠加旋转与位移,进入视口后过渡回 transform: none 归正。旋转角度用 CSS 变量 --sr-angle 统一管理;立体轴需要 perspective 才能产生近大远小的真实 3D 感,透视值 600-1000px 最安全。
参数说明
| 参数 | 位置 | 说明 |
|---|---|---|
| 旋转轴 | data-axis 属性 | plane(平面)/ x(绕 X)/ y(绕 Y) |
| 旋转角度 | --sr-angle 变量 | 5-45 度,品牌场景建议 8-20 度 |
| 透视值 | perspective(700px) | 600-1000px 安全,越小越夸张 |
| 动画时长 | transition 的 0.65s | 0.5-0.8s 区间观感最佳 |
| 触发阈值 | threshold: 0.2 | 元素进入视口 20% 时触发 |
兼容性与性能
- 动画只操作
transform与opacity,均在合成器线程完成;perspective已内联进 transform,不额外创建层 - IntersectionObserver 异步调度,触发一次后立即
unobserve,滚动全程零 JS 计算、零残余观察器 - 旋转过渡使用
cubic-bezier(.4,0,.2,1)缓动,落定前有轻微「回正感」,观感自然不生硬 - 全浏览器兼容(Chrome / Safari / Firefox / Edge / iOS / Android 现代版本),无需任何 polyfill
常见问题
Q: 绕 X/Y 轴旋转时没有 3D 立体感? 检查是否加了 perspective:没有透视时 rotateX/rotateY 只是平面压扁,加上 perspective(700px) 后近大远小立即出现,立体感由此而来。
Q: 角度调大后旋转过程看起来很「晃」? 大角度(30° 以上)配合长距离位移会产生晃动感。建议大角度时去掉 translateY 位移,只保留纯旋转,观感更干净。
Q: 卡片墙想错峰入场怎么做? 参考「滚动卡片交错」组件:为同一批卡片递增 transition-delay(每张 70ms),并把它们放进同一个 .in 触发批次即可。
Q: 可以商用吗? 可以。本组件为粤喵自研原创代码,免费商用无需署名,无任何协议限制。
许可与来源
- 许可证:自研原创 —— 粤喵自研原创,可免费用于个人与商业项目,无需署名。查看来源公示与许可清单
- 来源:粤喵团队原创自研(从效果思路到代码实现均为独立完成,未直接复制第三方代码)
- 首次发布:2026-09-01 · 最近更新:2026-09-01
- 修改日志:2026-09-01 首次发布;2026-09-13 补充许可证与来源标注、复制按钮说明与法务页入口
- 纠错:联系页面 / min@cactus.asia,2 个工作日内核实处理
常见问题
这个组件可以商用吗?
可以。本组件为粤喵自研原创,可免费用于个人和商业项目,无需署名。
浏览器兼容性如何?
支持所有现代浏览器(Chrome / Firefox / Safari / Edge 最新版本)。旧版 IE 不支持 CSS 动画相关特性。
怎么修改动画参数?
直接调整 CSS 中的 animation-duration(时长)、animation-timing-function(缓动曲线)等属性即可,代码中有注释说明。