微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Javascript Sticky Element onscroll 避免跳转

如何解决Javascript Sticky Element onscroll 避免跳转

当我向下滚动时,我正在尝试修复一个元素。 代码运行良好,但正如您在下面的 link 中看到的,带有 3 个黄色按钮的栏会在即将到达顶部时跳跃! 似乎有一些模板 css 类导致了这个问题, 但我不知道是哪一个

这是代码

var fixmetop = $('.pulsanti').offset().top;       

$(window).scroll(function() {                  

    var currentScroll = $(window).scrollTop(); 

    if (currentScroll >= fixmetop) {          
        $('.pulsanti').css({                      
            position: 'fixed',top: '0',zIndex: '1020'
        });
    } else {                                   
        $('.pulsanti').css({              
            position: 'relative'
        });
    }

});

谢谢大家

解决方法

我认为问题在于在加载某些元素之前分配了 fixmeTop

var fixmeTop = $('.pulsanti').offset().top;

我的 chrome 控制台输出:

> fixmeTop 
< 2314.3374633789062
> $('.pulsanti').offset().top; 
< 3207.5623779296875

您可以看到 fixmeTop 变量不是真正的元素位置。

也许您需要在 body.onload() 中分配它?

更新

页面加载后,在chrome控制台中执行fixmeTop = $('.pulsanti').offset().top;后,可以验证元素是否平滑地粘在页面顶部。

添加此代码片段将创建一个处理程序函数,当窗口的加载事件触发时将调用该函数。这将在加载所有内容(div、图像)后发生。这样 fixmeTop 将包含真正的元素位置。

window.onload = function () {
   fixmeTop = $('.pulsanti').offset().top;
}

您可以保留原始脚本中的变量声明,或者将其删除并在此处添加 var

另外,请记住在页面上的所有内容都加载之前它不会工作,并且当页面上的任何内容移动时它都无效 - 例如。页面调整大小,div 重新排列。您必须为每个此类事件添加侦听器以相应地调整值。像这样的东西可能有用:

function updateFixmeTop() {
    fixmeTop = $('.pulsanti').offset().top;
}

window.addEventListener("resize",updateFixmeTop);

编辑:在事件监听器中将元素主体更改为窗口

希望有帮助!

更新 2

假设您添加了 resize 事件侦听器 的代码并滚动到元素应该粘在顶部的位置。如果您要调整窗口大小,fixmeTop 将被分配一个与页面顶部元素相对应的值,而不是原始元素位置。

要解决此问题,您可能需要添加一个没有任何边距或填充的虚拟元素:

<div id="elementJustBeforeFixmeTop"></div> <! -- dummy element -->
<div class="pulsanti"> <! -- sticky element -->
    ...
</div>

并引用它的位置而不是粘性元素

fixmeTop = $('#elementJustBeforeFixmeTop').offset().top;

通过这种方式,您将存储您希望元素粘住的滚动位置,如果元素已经在顶部,则不会有所不同。

您可能想要检查您的页面是否没有在其他地方更改其布局,并更新那里的 fixmeTop 值以确保它始终指向正确的元素。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。