通常我可以解决这些问题,但根据我所看到的情况,这个代码似乎偏离了实际偏移的大约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不会滚动/允许它,因此这个示例可能需要更多的东西甚至尝试测试。
答案 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());
});