2013-05-21 18 views
11

私は、ユーザービューをページの上部にスクロールする機能を持つWebサイトを作成しました。問題の呼び出しは、次のとおりです。jQueryアニメーションスクロールトップ0は、Windows Phoneで動作していません

$('html,body').animate({scrollTop:0}, 150, 'swing'); 

これは、すべてのデスクトップブラウザ上で正常に動作しますが、Windows Phoneで、それだけで最大約180ピクセルをユーザーがスクロールし、その後、停止します。これは、デスクトップ上のトップにスナップが、それは電話でトップにスクロール

$('html,body').scrollTop(0); 

:私は機能を交換しようとしています。私はスムーズにスクロールをアニメートしようとするInternet Explorer Mobileのこの必要性を信じて、問題を引き起こしています。これが当てはまる場合(そうでない場合は誰かが私を修正することができます)、アニメーションを機能させるためにこの関数をどのようにオーバーライドできますか?

EDIT

なお、本との理想的ではない、それは限られた容量で動作するようには思えない、私が交換したスクロールコード:

$('html,body').animate({scrollTop:0}, 150, 'swing', function() { 
    $('html,body').scrollTop(0); 
}); 

しかし、どうかを知ることが良いでしょうプログラム的にモバイルIEのスムーズなスクロールを無効にするオプションがあります。

答えて

7

、私は同じ問題に実行しています。私は現在アニメーションが "完了"するまで待ってから、標準のwindow.scrollToを実行して正しい位置にスクロールさせるために、次のハックを行っています。

scrollHmtlBody: function (scrollToTarget, duration) { 
    $('html, body').animate({ scrollTop: scrollToTarget }, duration); 

    // Windows Phone doesn't animate properly, 
    // this makes sure it scrolls to the appropriate position (eventually) 
    setTimeout(function() { 
     window.scrollTo(0, scrollToTarget); 
    }, duration + 75); 
} 

私は結果に満足していない - それは動作しますが、理由は75msので、それはスクロールアニメーションを「終了」までにはためらいを持って遅らせます。遅れが少なくても、Windows PhoneはscrollToアクションの実行を拒否しているようです(おそらく、現在「スクロール」していると思われますか?)

デバイス検出ではif/else節に頼ることになります私はその道を踏み出すのではなく、より良い解決策を見出そうとしています。

+0

ええ、私が最後にしたものに似ています。 '.animate'の外で' setTimeout'呼び出しをする代わりに、 '.animate'内の完全なコールバック引数の一部でした。大丈夫だと思うが、遅れているのは迷惑だ。すべてのウィンドウアニメーションが独立したスクリプト – topherg

+0

Yahで処理される限り、デバイスディスカバリプログラム(サーバ側)は別のスクリプトを含むのが良いでしょう。なぜなら何らかの理由でエミュレータのコールバック内で動作しないからです。週末までに本当のW8Phoneを持っていなければ、違いがあるのか​​どうかは分かりません。 – LocalPCGuy

+0

時々、私が見つけたことは、アニメーションが始まり、それがちょうどある点で止まることです。私は、そのスクロールアップ中に中断するので、代わりに停止するので、それを考える。あなたが現在いる場所と現在の場所との間のピクセル数を決定するためのスクリプトが必要な場合は、レートを計算することができます(長すぎるはずはありません)。WPをスクロールする時間を決定できます。次に、少しのパディング(5msと言えば)で 'scrollTo(0)'を呼び出すことができます。演劇の少しを持っています。あなたの新しい携帯電話をお楽しみください – topherg

0

私はこの方法

にリンク、それを解決します。class = "スクロールに" >について</>

"約" <のhref = "#についての" データ・ターゲット=をアンカー名#aboutは、それが仕事をした何7. がしたこれらのソリューションの

 function scrollToElement(elementId) { 
      var top = $("#" + elementId).offset().top; 
      $('html,body').animate({ scrollTop: top }, 250); 
     } 

     $(".scroll-to").click(function() { 
      scrollToElement($(this).data("target")); 
     }); 
+0

本当に違いはありません。私はそれをテストページに実装しましたが、それは短い距離しか行きませんでした。 – topherg

1

なしのWindows Phone上で私のいずれかのために働いていないスムーズスクロールしてデバイス上で動作しますanimate()を削除し、htmlタグのscrollTopに単に依存してください。 これは誰かを助けてくれることを願っています。

この:

$('html').scrollTop(distance); 

の代わりに:Windowsの携帯電話8で

$('html,body').animate({ scrollTop: distance }, 250); 
+0

それはうまく動作しますが、アニメーション自体を行わないデバイス上で素敵なアニメーションを削除するという不幸な副作用がありますデスクトップ上のChrome) – topherg

1

私のWindows Phone 8で同じ問題が発生しました。私の場合はウィンドウを下にスクロールする必要がありましたが、電話ではうまく動作しませんでした。

最後に、私は@tophergと@LocalPCGuyソリューションの組み合わせを使用して、画面を一番下に取得するようにわずかに変化させました。 #最後のメッセージは、私がスクロールしたいdiv要素である場合は

$("html, body").stop().animate({ 
    scrollTop: $("#last-message").offset().top 
}, 2000, 'swing', function() { 
    $("html, body").scrollTop($("#last-message").offset().top); 
}); 

setTimeout(function() { 
    window.scrollTo(0, document.body.scrollHeight); 
}, 2075); 

:それは他の誰かを助け包み

は、ここに私のコードです。ちょっとハッキリしているようですが、Windows Phoneもそうです:P

関連する問題