2013-02-04 203 views
4

因此,现在大多数浏览器都会自动重新定位页面刷新时的窗口滚动位置,这通常很棒,但我有一种情况,我需要重新加载页面并专注于用户离开页面的不同部分。 注意获取焦点的新元素开始隐藏,所以散列不起作用。我需要在JS中处理它,以便让div可见,等等。如何防止浏览器自动滚动重新加载JavaScript?

重装后调用...

$(document).ready(function(){ 
    $('#mydiv').show(); 
    var top = $('#myelement').offset().top; 
    window.scrollTo(0, top); 
}); 

尽管如此,页面关注用户从页面左侧的地方。经过很多调试之后,在我看来,代码运行良好,但浏览器正在处理重新加载事件后,我重新定位我新定位的滚动...它瞬间发生,但如果我刚刚发出警报我的滚动,它显示正确的屏幕位置。解除警报后,浏览器将回滚到IT认为它应该在的位置(至少在Chrome中它是这样做的)。

我的问题,有没有什么办法来防止浏览器(跨浏览器)处理重装事件?拖延我的滚动超时似乎工作,但它看起来非常不专业和跳动。

我已经试过

正如我看到在这里推荐的地方
$(document).unbind("scroll"); 

,但它没有做任何事情。

非常感谢您的帮助。

回答

2

这是FF(18),Chrome(24)和IE(9)中的解决方案。

将以下内容放在HEAD中。

function autoScroll() { 
    var div = document.getElementById("mydiv"); 
    div.style.display = ''; 
    var top = div.offsetTop; 
    if(window.scrollTop != top) 
     window.scrollTo(0, top); 
} 
function loadAutoScroll() { 
    autoScroll(); 
    window.onload = null; 
    return false; 
} 
function scrollAutoScroll() { 
    autoScroll(); 
    window.setTimeout(function(){ window.onscroll = null; }, 100); 
    return false; 
} 
window.onload = loadAutoScroll; 
window.onscroll = scrollAutoScroll; 

我确定可以派生出更清洁的解决方案。

+0

它的工作原理本。非常感谢你的努力。^_ ^ – dgeare

0

添加到您的网页头

<style> 
    body{ 
     overflow: hidden; 
     position: fixed; 
     top: 0; 
     left: 0; 
     width: 100%; 
    } 
</style> 
<script> 
    window.onload = function() { 
     jQuery('body').css({'overflow': 'auto', 'position': 'static'}); 
     window.scrollTo(0, 0); 
    }; 
</script>