You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

垂直swiper容器内固定头部滚动时无法吸顶的问题求助

问题根源梳理
  • 滚动监听完全错配:你现在做的垂直滚动效果完全是Swiper容器内部消化的,页面本身根本不会触发浏览器窗口层面的滚动,所以你写的$(window).scroll监听根本不会运行,$(window).scrollTop()永远是0,根本到不了>=100的判断条件,给头部加固定样式的逻辑自然完全失效。
  • 高度计算失效:.Con1写了height:50%,百分比高度得靠父元素有明确的固定高度才能计算生效,现在html、body都没设置满屏高度,这个50%最后算出来可能就是0,Swiper容器连正常高度都没有,滚动本身就不符合预期。
  • 固定样式不匹配:就算手动给头部加上fixed类,你写的样式里把宽度设成了100%,原来的头部是在宽度70%的容器里的,固定之后直接撑满整个屏幕,位置和原来完全对不上。
可直接落地的修正方案
  1. 先补上全局高度规则,让百分比高度能正常计算:
html, body {
  height: 100%;
  margin: 0;
}
  1. 把原来监听窗口滚动的代码换掉,直接用Swiper实例自带的滚动事件判断什么时候触发吸顶:
// 写在Swiper初始化代码的后面,实时监听容器内部的滚动偏移
swiper.on('scroll', function() {
  const headerHeight = $('.ConHeader').outerHeight();
  // 当头部被完全滚出可视区域的时候,触发吸顶
  if (Math.abs(this.translate) >= headerHeight) {
    $('.ConHeader').addClass('fixed');
  } else {
    $('.ConHeader').removeClass('fixed');
  }
})
  1. 修正fixed类的样式,和原有容器的尺寸、位置对齐:
.fixed {
  position: fixed;
  top: 0;
  // 和外层Con1的宽度保持一致,不要撑满整个屏幕
  width: 70%;
  // 和容器的水平居中位置对齐
  left: 50%;
  transform: translateX(-50%);
  z-index: 10;
}
  1. 避免布局跳动:头部变成fixed定位之后会脱离正常文档流,下面的幻灯片内容会往上挪导致错位,可以在头部原本的位置放一个和头部等高的空占位块,当头部固定的时候显示这个占位块,撑住原来的文档流高度,就不会出现跳版了。

内容的提问来源于stack exchange,提问作者anon20010813

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.25 00:54:04