2011-08-01 12 views
0

ユーザーがASP.NETボタンをクリックした後に「ページスクロールアニメーション」を作成しようとしています。asp.net MaintainScrollPositionOnPostbackの後のページスクロールで正しくjquery.animateを使用する方法

非常に簡単なアプローチ:

String script = "<script type=\"text/javascript\">" + "\n" + 
        "$(document).ready(function() {" + "\n" + 
         "var destination = $('#" + lblMessage.ClientID + "').offset().top;" + "\n" + 
         "alert($('html, body').scrollTop());" + "\n" + 
         "$('html, body').animate({ scrollTop: destination-20}, 500);" + "\n" + 
        "});" + 
       "</script>"; 
ClientScript.RegisterClientScriptBlock(this.GetType(), "scrollToMessage", script); 

この一つのことを除いて、すべての作品。私のボタンはページの折りたたみの下にあるので、ユーザーはそれをクリックするためにスクロールする必要があります。彼がそれをクリックすると、私のコードの背後にいくつかのビジネス用のものが置かれ、ページをスクロールするためのjavascriptが登録されます。 "どこから来たのか自分のラベルがどこにあるか"(これは位置ゼロのちょっと下にあります。私のjavascriptコードは、スクロール位置がASP.NETによって維持される前に実行されているので、スクロールアニメーションはゼロから私のラベルの位置に移動し、ボタンの位置からラベルの位置に移動しません。

そして、

この問題を回避するには、ASP.NETのMaintainScrollPositionOnPostback javascriptがdocument.readyの後に実行されると推測しています。私は単に遅延させることができます。理想的には「キュー」 "それは.NETスクロール調整の直後です。しかし、私はclを持っていませんそれを行う方法。

誰でも同様の問題がありましたか?何かヒント? ###

は、単に)ASP.NETのWebForm_RestoreScrollPosition(手動で呼び出す必要があったソリューションをBEGIN

// ###。清潔な結果。

String script = "<script type=\"text/javascript\">" + "\n" + 
        "$(document).ready(function() {" + "\n" + 
         "if (typeof(WebForm_RestoreScrollPosition) == 'function') {" + "\n" + 
          "WebForm_RestoreScrollPosition();" + "\n" + 
         "}" + "\n" + 
         "var destination = $('#" + lblMessage.ClientID + "').offset().top;" + "\n" + 
         "$('html, body').animate({ scrollTop: destination-20}, 500);" + "\n" + 
        "});" + 
       "</script>"; 
ClientScript.RegisterClientScriptBlock(this.GetType(), "scrollToMessage", script); 

// ### END SOLUTION ###

ありがとう!

+0

いいえ...良い回避策が見つかりました。私はWebForm_RestoreScrollPosition()を呼び出します。 (それが関数の場合)私のアニメーションの直前。すべてが一緒に来る。質問にコードを追加し、7時間後に回答します。 –

答えて

0

ASP.NETのWebForm_RestoreScrollPosition()を手動で呼び出すだけでした。清潔な結果。

String script = "<script type=\"text/javascript\">" + "\n" + 
       "$(document).ready(function() {" + "\n" + 
        "if (typeof(WebForm_RestoreScrollPosition) == 'function') {" + "\n" + 
         "WebForm_RestoreScrollPosition();" + "\n" + 
        "}" + "\n" + 
        "var destination = $('#" + lblMessage.ClientID + "').offset().top;" + "\n" + 
        "$('html, body').animate({ scrollTop: destination-20}, 500);" + "\n" + 
       "});" + 
      "</script>"; 
ClientScript.RegisterClientScriptBlock(this.GetType(), "scrollToMessage", script); 
1

ページ内のPageディレクティブにMaintainScrollPositionOnPostback="false"を設定すると、ポストバック時のデフォルトのページスクロールが無効になります。次に、ロジックごとにページをスクロールする必要があります。

関連する問題