はじめに
理解する必要がある利用可能なソリューションについて説明する前に、これはエラーではなく、完璧なソリューションもありません。問題は、別のページへの移行をアニメーション化するには、現在のページと移行中のページが垂直に並ぶように、ビューポートをページの上部に配置する必要があることです。
1 つのページ (たとえば 1000 ピクセル) の長いリストの途中にあり、転送先のページの高さが数百ピクセルしかない場合、現在のページは画面から適切にアニメーション化されますが、新しいページは次のように表示されません。ビューポートの上になります。
実行可能な解決策は 2 つあります。
iScroll とその jQuery Mobile 派生 iScrollview
iScroll ホームページ: http://cubiq.org/iscroll-4
iScrollview ホームページ: https://github.com/watusi/jquery-mobile-iscrollview
iScroll は、iPhone や Android などのモバイル デバイスのネイティブ スクロールと非常によく似た動作で、Web ブラウザー内のウィンドウ内のコンテンツをスクロールできる JavaScript です。これは、ネイティブのようなスクロールバーと物理演算を使用して、ブラウザー内でウィンドウをスクロールできることを意味します。
これは、現在の問題の解決策でもあります。iScroll の実装により、リストビューがどれだけスクロールされても、ページはページの高さの 100% を占めます。これは、返されたリストビューが同じ位置に留まる理由でもあります。
もちろん、このソリューションを実装したい場合は、iScrollview 実装を選択する必要があります。iScroll を実装することはできますが、もっと時間がかかります。
サイレントスクロール
公式ドキュメント: http://jquerymobile.com/demos/1.1.0-rc.1/docs/api/methods.html
この jQuery Mobile 機能は、そもそもこの問題が発生する理由と同じです。ページ遷移がトリガーされる前に、元のページが静かに一番上にスクロールされます。
私たちの場合、リストビューが選択されている場合、ページが変更される前に、その位置を覚えておく必要があります (ここでは、ページ遷移中に格納されているデータ/パラメーターの解決策を見つけることができます。章を検索するだけです: ページ遷移間のデータ/パラメーター操作)。その場合、前のページに戻ったときに pagebefpreshow イベントを使用して、ページが表示される前に静かに一番下までスクロールできます。
//scroll to Y 100px
$.mobile.silentScroll(100);
そして、ここにサイレントスクロールの実例があります: http://jsfiddle.net/Gajotres/2xfrM/
残念ながら、あなたの例のように、このソリューションは pageshow でのみ機能します。jQM アーキテクチャのため、これは pageshow イベント中にのみ行うことができます。
より詳しい情報
このトピックについて詳しく知りたい場合は、この記事をご覧ください。実際の例も見つかります。