为什么JQuery Masonry,当我点击浏览器上的“返回”时,它会将用户重新回到顶端?

时间:2010-12-11 07:05:44

标签: javascript jquery html css templates

为什么它不能保持用户离开的位置?这对砌体来说是正常的吗? 当用户点击回来时,浏览器会转到用户离开的地方,但奇怪的是,Masonry让它回到了顶部!

顺便说一句,刷新工作正常。它将滚动条移动到用户离开的位置。但是回来不行。

编辑:当我点击“返回”时,它位于顶部。但后来我向下滚动了一点点(2个像素)。然后浏览器将跳回到左侧的位置。

URES。

编辑:如果我禁用此行,它将起作用:

$('#grid').masonry({ columnWidth:250, itemSelector:".awallpost", animate:false, resizeable:false });

3 个答案:

答案 0 :(得分:8)

我想我有一个解决方法,但你需要尝试确保。当我单步执行代码并手动执行时,它会起作用,我认为它会起作用。我会在底部解释。

在您调用masonry()插件的代码行之前...

$('#grid').masonry({ columnWidth:250, itemSelector:".awallpost", animate:false, resizeable:false });

...将网格的高度设置为当前高度。

var $grid = $('#grid');
$grid.height( $grid.height() ); // fix the height at its current height

$('#grid').masonry({ columnWidth:250, itemSelector:".awallpost", animate:false, resizeable:false });

如果在最初加载时或在某些浏览器中出现问题,请尝试仅在.height()大于某个数量时设置0。试试250或像var $grid = $('#grid'); var height = $grid.height(); if( height > 0 ) { // or some other number $grid.height( height ); } $('#grid').masonry({ columnWidth:250, itemSelector:".awallpost", animate:false, resizeable:false }); 这样的小号码。

masonry

问题的原因似乎是因为absolute将每个项目的定位设置为top,然后它会遍历它们并设置其leftabsolute个位置在收到masonry定位之前,手动进行任何操作。

问题是,在#grid有机会设置位置之前,0会折叠到#grid高度,因为内部的项目不再影响其高度。

似乎在某些浏览器中,当masonry()(以及文档的其余部分)的高度折叠时,它会忘记其滚动位置。这就是我们在调用absolute之前将其高度设置为设定数量的原因,以便在内容获得{{1}}定位时不会崩溃。

答案 1 :(得分:1)

这会对你有帮助,

我发现一个帖子具有相同的senario,并测试其工作

  

您好,   该网站为http://www.charlotte.com/mld/charlotte/

     

我刚检查过,是的,该网站正在发送缓存控制:标头中没有存储。

     

我还阅读了您发布的错误链接。男人,这件事已被记录多年。   您发布的特定链接似乎仍未解决,它是主要的,而不是欺骗。

     

如果我将自己的经验添加到错误报告中,或者我应该只是笑着忍受它,这会有帮助吗?

答案 2 :(得分:1)

你确定这是由砌体造成的问题吗?该网站以前是否使用后退按钮?根据BalusC的评论,问题似乎因浏览器而异,并且由先生确认。 Chavan,该网站发送Cache-Control: no-store所以我倾向于服务器软件或配置导致它而不是Masonry。

当HTTP响应具有某些Cache-Control:标头时,各种浏览器的文档行为会返回页面顶部。 (简而言之:FF在no-store - 或no-cache上排名靠前,如果使用HTTPS,则IE不会尊重Cache-Control。)

您可以在HTTP服务器(Apache,lighttpd等)或代码中设置缓存头。每个以网络为目标的语言都有设置HTTP标头的方法,解决问题的正确解决方案取决于您拥有的环境。

This SO post提供了一些解决方案,包括一些用JS和Cookie存储页面滚动位置的深奥方法。