我使用这段简短的代码来保存div内部的滚动(偏移)位置,以便在重新加载后我能够将div加载到相同位置的div:
$(window).on('beforeunload', function() {
var scrollToPos = jQuery('.active').position().top;
localStorage.setItem("scrollToPos", scrollToPos);
});
在页面点击后动态添加active
类,但问题是在第一次重新加载后我总是得到scrollToPos = 0
并且只从这一点开始保存正确的位置......任何想法为什么就是它? THX
更新:
好吧,我会分享整个画面,因为我认为它藏在那里的某个地方。 我有这个下拉列表:<ul id="sites" class="dropdown-menu pull-right">
<li><a href="#site_site1.com" class="sitePick">site1.com</a></li>
<li class=""><a href="#site_site2.com" class="sitePick">site2.com</a></li>
<li><a href="#site_site3.com" class="sitePick">site2.com</a></li>
</ul>
单击时调用此函数:
$('.sitePick').click(function(event){
$('.wrapperSite').css("display", "none");
var site = event.target.hash.replace(/\./, "\\.");
var offset = $(this).offset();
$(site).show();
initPlacements(site);
});
显示相关所选站点的div。第二个下拉列表是由第一个下拉列表创建的,如下所示:
function initPlacements(site){
$('#placemetnsList').remove(); // clean previous
var placements = ['<ul id="placemetnsList" class="dropdown-menu pull-right">'];
$(site).find('.placementName').each(function(){
placement = $.trim(this.innerHTML);
placements += '<li><a href="' + site.replace(/\\/g, '') + '" class="toPlacement" onclick="scrollToPlacement(\'' + placement +'\')">' + placement + '</a></li>';
});
placements += '</ul>';
$(placements).appendTo('#placementsNav');
}
当第二个下拉列表中的任何元素被点击时,将调用此函数:
function scrollToPlacement(placementName){
$("#wrapper").scrollTo($(".active>.placementWrapper>.placementName[title='" + placementName + "']"));
}
并且我按标题滚动到div但是我想使用该位置,以便如果有人滚动我仍然会重新加载到用户滚动的页面,所以我开始使用我的顶部的第一段代码题。现在我添加了这段代码来执行加载滚动:
$(document).ready(function(){
var site = window.location.hash.replace(/\./, "\\.");
if (site){
$(site).show();
initPlacements(site);
var pos = localStorage.getItem('scrollToPos')*(-1);
$("#wrapper").animate({ scrollTop: pos + 110 }, 1);
}
});
但它只有在第二次从下拉列表中选择一个网站时才有效...第一次无论我在哪里滚动到
,它总是初始化为零