理解する必要がある利用可能なソリューションについて説明する前に、これはエラーではなく、完璧なソリューションもありません。問題は、別のページへの移行をアニメーション化するには、現在のページと移行中のページが垂直に並ぶように、ビューポートをページの上部に配置する必要があることです。
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/
そして、これは大きなリストビューといくつかのページを使用した実際のjsFiddleの例です: http://jsfiddle.net/Gajotres/5zZzz/
// Detect click on a li element and store its coordinate, change page to another
$(document).on('pagebeforeshow', '#index', function(){
$('#test-list li').on('click', function(){
storePosition.topCoordinate = $(this).offset().top;
$.mobile.changePage('#second');
});
});
// If there's a stored position use silentscroll function and scroll to correct location
$(document).on('pageshow', '#index', function(){
if(storePosition.topCoordinate !== null) {
$.mobile.silentScroll(storePosition.topCoordinate);
}
});
// Store position location
var storePosition = {
topCoordinate : null
}
残念ながら、あなたの例のように、このソリューションは pageshow でのみ機能します。jQM アーキテクチャのため、これは pageshow イベント中にのみ行うことができます。
最終的な注意事項
iScroll + iScrollView について詳しく知りたい場合、それらが実際の例でどのように機能するかについては、この記事をご覧ください。