簡體   English   中英

javascript scrollTop似乎不起作用

[英]javascript scrollTop doesn't seem to work

我使用一種技術,我在div中有一個表,以限制表所覆蓋的空間並滾動。 表格中有復選框。 這些復選框會影響表的呈現方式。 單擊一個時,表將在div中重新呈現。 這總是會導致滾動條返回頂部,這很煩人。 所以在我用javascript渲染表之后,我執行了一個setTimeout調用來異步調用一個函數,該函數將scrollTop值設置回重新渲染之前的位置。 這是有問題的代碼片段:

注意:(ge()== geMaybe()== document.getElementById())

o.renderAndScroll = function() {
    var eTestSection = geMaybe(o.id + '-testSection');
    var scrollTop = 0;
    if (eTestSection) {
        scrollTop = eTestSection.scrollTop;
    }

    o.render();

    if (eTestSection) {
       setTimeout(
           function() { 
               console.log('Scrolling from ' + ge(o.id).scrollTop + ' to ' + scrollTop);
               ge(o.id).scrollTop = scrollTop;
               console.log('Scrolled to ' + ge(o.id).scrollTop);
          }, 
          1000);
    }            
}

每次更改復選框狀態時,我的控制台日志輸出都是這樣:

Scrolling from 0 to 1357
Scrolled to 0

還有其他方法讓這項工作? 請注意,我將超時設置為一整秒,以確保在調用滾動代碼時將渲染移動到DOM。 我主要使用chrome,但最終需要它才能跨瀏覽器工作。 我不使用jQuery。 如果我嘗試在調試器中捕獲onscroll事件,甚至從onscroll處理程序記錄內容,則當使用鼠標移動滾動條時,chrome調試器會崩潰。

正確的代碼是:

o.renderAndScroll = function(fForce) {
        var scrollTop = 0;
        var eTestSection = geMaybe(o.id + '-testSection');
        if (eTestSection) {
            scrollTop = eTestSection.scrollTop;
        }
        o.render(fForce);
        setTimeout(
            function() {
                // re-lookup element after being rendered
                var eNewTestSection = ge(o.id + '-testSection');
                eNewTestSection.scrollTop = scrollTop;
            },
            1);
    };

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM