2017-05-13 12 views
1

私はdiv内にテーブルを置いて、テーブルで覆われたスペースを制限して代わりにスクロールするテクニックを使用します。 テーブル内にはチェックボックスがあります。これらのチェックボックスは、テーブルのレンダリング方法に影響します。 1つをクリックすると、div内でテーブルが再描画されます。これは、常に、スクロールバーを迷惑なトップに戻すようにします。 私はJavaScriptを使用してテーブルをレンダリングした後、再描画の前の位置にscrollTopの値を設定する関数を非同期に呼び出すsetTimeout呼び出しを行います。 は、ここで問題のコードのsnipitです:javascript 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に移動されたことを確認するために、タイムアウトを1秒間だけ行いました。私は主にクロムを使用していますが、最終的にクロスブラウザを使用する必要があります。私はjQueryを使用しません。デバッガでonscrollイベントをキャッチしたり、onscrollハンドラからログを取ろうとしても、スクロールバーをマウスで動かすとクロムデバッガがクラッシュします。

+0

あなたはあなたからそれを得た要素のscrollTopスプライトを設定されていません。 'o'はスクロール可能ですか? – Kaiido

+0

これは明らかに別のバグによって引き起こされた - 私は元々タイムアウト機能で同じ要素を取得していませんでした!私はDBからこの質問を削除する必要があります。 –

+0

質問を削除できます – Kaiido

答えて

0

正しいコードは次のとおりです。

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); 
    }; 
関連する問題