0

Backbone.js と jQuery モバイルを実行するモバイル アプリケーションがあります。私は Backbone.js を持っているので、パフォーマンス上の理由から、すべての JQM ルーティングとトランジションを無効にしました。スクロール位置の保存が JQM で利用可能な機能であることは理解していますが、それを利用することはできません (私の知る限り)。

アイテムのリストが長くなる可能性があるリスト ビューがあります。ユーザーがモバイル デバイスでいずれかをタップすると、現在のスクロール位置が保存され、新しいビューがレンダリングされます。ユーザーが「戻る」ボタンをタップすると、履歴が 1 つ戻ります。

clickLink: ->
    window.lastScroll = $(window).scrollTop()

render: ->
    ...

    if window.lastScroll
        $.mobile.silentScroll window.lastScroll
        window.lastScroll = undefined

これはデスクトップ Safari では思いどおりに動作しますが、iOS Safari (シミュレーターと実際の両方) で使用しようとすると、固定フッター ナビゲーション バーに問題が発生します。

ユーザーがタップして戻ると、リストビューは意図したとおりに下にスクロールされますが、フッター ナビゲーション バーをタップすると、その下をタップしたかのように、その下にあるリスト項目が代わりにアクティブになります。ユーザーがナビゲーション バーをタップする前に少しスクロールすると、すべて正常に動作します。

誰にもアイデアはありますか?おそらく、この問題をすべて回避するより良いアプローチがあるでしょう。

助けてくれてありがとう。

4

2 に答える 2

0

チャド・スミスは、scrollTopがプログラムで変更された後、固定位置のボタンでこのモバイルSafariのバグに回答しました...?

彼の方法は私にとって最もうまくいった。これが彼の応答です:

101%の高divを追加し、(ほぼ)すぐに削除することで回避しました。

試す:

<style>
.iosfix {
  height: 101%;
  overflow: hidden;
}
</style>

スクロールすると:

window.scrollTo(0, _NEW_SCROLLTOP_);
$('body').append($('<div></div>').addClass('iosfix'));
setTimeout(function() {
  $('.iosfix').remove();
}, 500);

また、jQuery.scrollToでも機能します。

こちらの例をご覧ください。

于 2012-05-15T18:22:55.770 に答える