2013-02-04 155 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>