【问题标题】:Switch a div to fixed CSS positioning without causing contents to disappear on mobile将 div 切换到固定的 CSS 定位,而不会导致内容在移动设备上消失
【发布时间】:2016-10-04 02:34:20
【问题描述】:

我正在尝试实现“滚动然后固定”的 HTML/CSS 布局。这个想法是用户可以稍微滚动页面 - 直到网站标题不在视野中 - 此时页面上的主要产品图像将固定在页面顶部,而页面的其余内容将继续滚动。这是我要实现的目标的模型:

如您所见,起初,网站标题是可见的,但用户可以向下滚动。当产品图片(黄色)到达页面顶部时,它会固定在窗口顶部。

我现在这样做的方式是监听文档中的滚动事件(使用 jQuery),然后在用户滚动超过页眉高度时更改产品图像的 CSS 位置属性。我试过 both CSS position fixed 和 absolute,但每个都有自己的问题:

  1. 如果我切换到固定定位,在移动设备(iOS和Android)上滚动非常流畅,并且产品图像完美锁定在窗口顶部。但是,如果您将手指放在屏幕上,产品图像的内容就会消失,并且 div 会从相对位置切换到固定位置。它们会在您释放后立即重绘,但在您滚动时它看起来已损坏。这只发生在移动设备或模拟器上;不在桌面浏览器中。 JSBin Example。
  2. 如果我切换到绝对定位(并提供顶部偏移),我不会遇到手机停止绘制产品图像的问题,但是,滚动确实呈锯齿状。滚动时产品图像会跳动。 JSBin Example。

对于#1,我会这样做:

  var docScrollTop = $(window).scrollTop();
  if (docScrollTop >= $('.dev-header-fixed').height()) {
    $fixableTop.css({
      'position': 'fixed',
      'top': 0,
      'z-index': 99,
      'display': 'block'
    });
  }

...对于#2,我这样做:

  var docScrollTop = $(window).scrollTop();
  if (docScrollTop >= $('.dev-header-fixed').height()) {
    $fixableTop.css({
      'position': 'absolute',
      'top': docScrollTop,
      'z-index': 99,
      'display': 'block'
    });
  }

我已经提供了完整的、有效的 JSBin 示例链接到上面的both 方法。有没有办法防止移动设备在切换到固定位置时隐藏内容?

【问题讨论】:

  • 只是一个更新:上述问题似乎已在最新版本的 iOS 和 Android 上的 Chrome 中得到修复。我可以在 iPhone iOS 9.0 上重现它,但不能在 iOS 11.2 上重现。我不确定它是什么时候修好的。

标签: javascript html css mobile


【解决方案1】:

它在 IE 中也是锯齿状的。用这个怎么样:

if (docScrollTop >= $('.dev-header-fixed').height()) {
    console.log('Fixed header state');
    $fixableTop.css({
      'position': 'fixed',
      'top': 0,
      'z-index': 99,
      'display': 'block'
    });

【讨论】:

  • 除非我遗漏了什么,否则与上面的 #1 相同。这种方法的问题在于,当您在移动设备上滚动时,当发生到固定位置的转换时,移动浏览器会停止绘制 fixableTop div(黄色)的内容并消失。
  • 哎呀......对不起......看起来我在睡觉;)
  • 请注意,两个示例都有相同的 url,这可能就是我搞砸的原因。我没有移动测试工具,但是您确定在固定位置并按住触摸屏的情况下,样式实际上会更新,但浏览器拒绝更新屏幕吗? (不能确定只看到 console.log)。
  • 我确实对固定样式有一些想法,但如果移动浏览器根本不更新屏幕,它们将无法工作。 1.设置类而不是内联样式。 2.每100ms左右触发一次滚动事件。 3. 使用 touchmove 事件 4. jquerymobile scrollstop 事件
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-25
  • 2014-12-29
  • 2014-01-24
  • 1970-01-01
  • 2017-05-25
  • 2018-11-27
相关资源
最近更新 更多