我有一个包含照片名称列表的div。单击某个名称时,将显示另一个div(在第一个div之外),其中包含照片和注释。当滚动第二个div时(使用主窗口滚动条),我不希望第一个div滚动,它应该保持原样。因此,只要我打开照片div,我就会将第一个div的位置从绝对更改为 fixed 。到目前为止一切顺利,这很好。
然而,当在打开照片之前滚动第一个div时,将此div设置为fixed会导致它跳回到顶部,而我希望它保持原样。有没有办法做到这一点?它为什么跳到顶端?
基本上我想达到和在Facebook上显示照片相同的效果。背景被冻结,而照片区域可以滚动。
谢谢!
答案 0 :(得分:6)
固定div跳到顶部因为没有顶部/底部值基本上意味着它们位于0。
现在,为了防止这种情况,您必须设置当前位置(在position
更改为fixed
之前)相对于窗口(这是关键部分)
查看我的jsfiddle
jquery部分来自:
$('#click').click(function() {
var ftop = $('#fixer').offset().top - $(window).scrollTop();
var fleft = $('#fixer').offset().left;
$('#fixer').css({position: 'fixed', left: fleft + 'px', top: ftop + 'px'});
});
在修正位置之前,会计算当前顶部坐标[offset().top - (window).scrollTop
],然后将其传递到#fixer
的{{1}}值。 top
很重要,因为它确保$(window).scrollTop()
在修复时始终处于视点。