在jquery中偏移顶部的奇怪问题

时间:2013-09-26 17:25:25

标签: javascript jquery scrolltop

通常我可以解决这些问题,但根据我所看到的情况,这个代码似乎偏离了实际偏移的大约700个像素。

我在这里做的基本上是当你滚过它时,在一个固定的标题下面锁定一个按钮。测试控制台输出我可以看到根据此代码,按钮距离顶部约713像素。然而它实际上距离顶部大约1300像素。 713像素大致位于另一个元素的中间,所以逻辑上我不可能得到那个数字。

这是我的代码。

    window.contOffset = jQuery('#cont-step3').offset();
    window.contWidth = jQuery('#cont-step3').outerWidth();
    jQuery(window).scroll(function(){
        if(window.contOffset.top<jQuery(document).scrollTop()){
            jQuery('#cont-step3').css({
                position:'fixed',
                top:'70px',
                left:window.contOffset.left+'px',
                width:window.contWidth+'px'
            });
        }else{
            jQuery('#cont-step3').removeAttr('style');
        }
        console.log(window.contOffset,jQuery(document).scrollTop());
    });
    jQuery('#core-values2').sortable({
        update:function(event,ui){
            updateValues();
        }
    });

这个问题可能不会向我跳出来,我在这段代码中的逻辑是,当用户滚过元素时(大约1300像素,但网站响应所以我必须计算它)。它将为元素添加内联样式,使其具有固定位置。当用户向上滚动时,它会将其删除。非常简单的概念,而不是需要很多代码,这个问题让我感到困惑,对于一个最多需要5分钟的脚本,我已经花了2个小时进行调试。

有没有其他人遇到这个?我完全错过了什么吗?我之前使用过类似的方法没有问题。

我正在使用jQuery 1.10.2

正在进行的工作 here jsfiddle不会滚动/允许它,因此这个示例可能需要更多的东西甚至尝试测试。

1 个答案:

答案 0 :(得分:0)

问题不只是检查dom完成,而是通过dom中的每次更改重新初始化事件,任何其他可能更改属性的javascript(如菜单)都会抛出滚动事件。

我设法将函数连接起来删除,然后每次对任何事情进行更改时重新初始化事件。

jQuery(window).off('scroll').on('scroll',function(){
        if(window.contOffset.top<jQuery(document).scrollTop()){
            jQuery('#cont-step3').css({
                position:'fixed',
                top:'70px',
                left:window.contOffset.left+'px',
                width:window.contWidth+'px'
            });
        }else{
            jQuery('#cont-step3').removeAttr('style');
        }
        console.log(window.contOffset,jQuery(document).scrollTop());
    });