2013-03-26 44 views
1

我有一個div元素有很多裏面的內容後, 「取消隱藏」 向下滾動一個鏈接,元素id ='x'變成class ='hidden'槽javascript,其中包含:JS:</p> <pre><code><div id="x" class="unhidden"> text and more divs </div> </code></pre> <p>的CSS類 '取消隱藏' 載:</p> <pre><code>display: block; </code></pre> <p>當我點擊div元素

display: none; 

div元素現在被隱藏。到現在爲止還挺好。現在我想返回並顯示完整的div='x'並向下滾動到div id='x'中的某個div。

所以,當我點擊後退按鈕,第一類變成unhidden再次槽的JavaScript之後,我運行此腳本相同的功能:

window.scroll(0, findPos(document.getElementById(GoTo))); 

轉到一定的div我想要的ID向下滾動至。使用此功能可以向下滾動:

function findPos(obj) { 
    var curtop = 0; 
    if (obj.offsetParent) { 
     do { 
      curtop += obj.offsetTop; 
     } while (obj = obj.offsetParent); 

     return [curtop]; 
    } 
} 

該腳本確實找到要去的位置,但不向下滾動。

如果向下滾動腳本與隱藏/未隱藏部分分離,它也可以使用。但在這裏它不起作用,隱藏/顯示部分阻止了某些東西。

任何解決方案或想法?

回答

1

我認爲這是由於瀏覽器首先執行了所有JS代碼,然後纔將控制權交還給渲染引擎 - 所以更改類實際上並未使元素在代碼計算點再次可見元素位置被執行(並且沒有顯示的元素沒有任何位置)。

如果你換你的整個window.scroll呼叫到一個匿名函數並執行使用setTimeout最小的延遲,這應該解決的問題:

referenceToDivElement.className = "unhidden"; 
var targetElement = document.getElementById(GoTo); 
window.setTimeout(function() { 
    window.scroll(0, findPos(targetElement)); 
}, 5); 
+0

真棒!我只是在研究setTimeout,但目前爲止還沒有成功。你的功能非常完美,非常感謝! – 2013-03-26 16:05:58

相關問題