0

通常我可以弄清楚这些事情,但根据我所看到的,这段代码似乎与实际偏移量相差大约 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

work in progress fiddle here jsfiddle 不会滚动/允许它,所以这个例子可能需要更多的东西来尝试测试。

4

1 回答 1

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());
    });
于 2013-09-26T19:00:39.737 回答