滚动旋转揭示特效(卡片旋转入场,轴与角度实时可调)

JSCSS 许可:自研原创

滚动旋转揭示特效:卡片随滚动带旋转角度入场,支持平面、绕 X 轴、绕 Y 轴三种旋转轴,角度 5-45 度实时可调,透视 3D 质感,零依赖自研实现。

效果演示(真实可交互)

🎡 向下滚动:卡片带旋转角度入场,旋转轴与角度均可调

滚动旋转揭示

比单纯的淡入上移多一分「戏剧感」:卡片带着角度旋入视口,落定后归正,像翻开一张张扑克牌。

01 平面旋转绕 Z 轴旋转,最常用、最克制
02 绕 X 轴立体翻转,像翻开牌面
03 绕 Y 轴门轴式旋入,适合卡片墙
04 角度可调5° 轻转 vs 45° 大翻转
05 组合位移旋转 + 上移叠加更灵动
06 错峰入场逐张延迟 70ms 节奏更好

三种轴各有性格:平面旋转像轻巧的翻牌,绕 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.65s0.5-0.8s 区间观感最佳
触发阈值threshold: 0.2元素进入视口 20% 时触发

兼容性与性能

常见问题

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(缓动曲线)等属性即可,代码中有注释说明。

✍️ 作者与审核