モバイル版アプリ(実機)でスクロール位置を制御したいです。
あるレコードを選んで詳細画面に遷移した後戻ってきたら、遷移前のスクロール位置になるようにしたいです。
以前の投稿では、 URLの「k」の後ろに「m」を入れる方法で確認していました。
この方法では問題なく動きますが、
実際iPhoneのモバイルアプリ(ver3.0.5)で確認してみると、うまくいきません。
「戻る」ボタンで戻った場合は、一覧ページのトップ位置に遷移します。
スワイプで戻った場合は一瞬遷移前のスクロール位置になるのですがその後に読み込みが入って一覧ページのトップ位置に遷移してしまいます。
その他確認したこと
・Safari(604.1)
「戻る」ボタンで戻る:一覧ページのトップ位置に遷移
スワイプで戻る:一瞬遷移前のスクロール位置になるが、その後に読み込みが入って一覧ページのトップ位置に遷移
・Chrome(136)
「戻る」ボタンで戻る:一覧ページのトップ位置に遷移
スワイプで戻る:一瞬遷移前のスクロール位置になるが、その後に読み込みが入って一覧ページのトップ位置に遷移
スクロールの制御にはこのような記述を書いています。
(() => {
'use strict';
kintone.events.on('mobile.app.record.index.show', (event) => {
// sessionStorage用にキーの値を作成
var skey = 'mobile-top-' + event.appId;
// sessionStorageのキーに対応する値を取得
var strTop = window.sessionStorage.getItem(skey);
// 現在のURLのハッシュ部分を取得
var hashAfter = window.location.hash;
console.log('hashAfter:', hashAfter);
var hashBefore = window.sessionStorage.getItem('hashBefore')
// sessionStorageに保存したhashBeforeとhashAfterを比較
// もし同じ値の場合(同じページの場合)
if (hashBefore == hashAfter) {
// strTopに値があれば
if (strTop) {
//スクロール位置をstrTopに合わせる
$('.gaia-mobile-v2-viewpanel-contents').scrollTop(strTop);
}
}
// ページ移動(詳細画面など)前に、現在のスクロール位置とハッシュ部分をsessionStorageに保存
$(window).on('beforeunload', function (ev) {
var top = $('.gaia-mobile-v2-viewpanel-contents').scrollTop();
window.sessionStorage.setItem(skey, top);
console.log('top:' + top)
// 現在のURLのハッシュ部分を取得
hashBefore = window.location.hash;
// sessionStorageにhashBeforeの値を保存
window.sessionStorage.setItem('hashBefore', hashBefore);
console.log('hashBefore:', hashBefore);
});
return event;
});
})();