javascript - 修复 JS 粘性标题故障

标签 javascript jquery css wordpress sticky

已经有一些关于此的帖子,并且有一个答案解决了我遇到的问题,但修复不适用于我的设置。 ( Existing Post 1 ) ( Existing Post 2 )

-

我使用一些 JS 创建了一个 div,当用户滚动浏览器窗口时它会粘在浏览器窗口的顶部。当用户滚动经过父元素时,该设置通过将类 .sticky 应用于现有父容器 #stickywrapperaa 来工作。这是 JS:

<script>
jQuery(document).ready(function( $ ) {
   // Cache selectors outside callback for performance. 
   var $window = $(window),
       $stickyEl = $('#stickywrapperaa'),
       elTop = $stickyEl.offset().top;

   $window.scroll(function() {
        $stickyEl.toggleClass('sticky', $window.scrollTop() > elTop);
    });
});
</script>

这将创建 #stickywrapperaa.sticky 的元素 ID/类属性,然后我使用 CSS 对其进行定位和设置样式。 目前所有这些都有效


问题:

我遇到的问题是,当粘性标题被激活时,这会删除页面高度的一部分,并导致静态页面内容跳起与父容器相同的高度(#stickywrapperaa ).

从逻辑上讲,这是完全合理的,因为容器已移至静态页面内容之上,因此它现在从页面内容中消失了;然而,这会在我的页面上留下一个缺口,我现在需要填补这个缺口。

我考虑过创建一个与父容器 (#stickywrapperaa) 等高的空白空间,并触发它与粘性类一起出现,从而有效地用空白空间替换标题所在的位置.

谁能帮我实现这个或提供更好的解决方案?

最佳答案

切换粘性类时向主体添加填充顶部。填充应与标题的高度相同。

<script>
jQuery(document).ready(function( $ ) {
   // Cache selectors outside callback for performance. 
   var $window = $(window),
       $stickyEl = $('#stickywrapperaa'),
       elTop = $stickyEl.offset().top;

   $window.scroll(function() {
        $stickyEl.toggleClass('sticky', $window.scrollTop() > elTop);
        if ($window.scrollTop() > elTop){
            $("body").css("padding-top", $stickyEl.height());
        } else {
            $("body").css("padding-top", 0);
        }
    });
});
</script>

关于javascript - 修复 JS 粘性标题故障,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43978351/

相关文章:

javascript - 冗余让微软和谷歌托管 jQuery

javascript - 如何更改应用于几个元素中的跨度的类?

html - 图像的最大宽度不适用于 IE 11 的 flexbox 但适用于谷歌浏览器

javascript - 如何使用 id 输入类型 ="text"javascript 中的值设置自动 2 个十进制数?

javascript - 使用 XSLT 或任何其他方法将 XML 转换为 HTML 表

javascript - PhoneGap 应用程序适用于 iOS 但不适用于 Android

html - 对齐在同一行

javascript - JavaScript 中的触发事件

PHP OOP 概念付诸实践

jquery - 图像 slider float 修改