私は html2canvas ライブラリを使用しています。html2canvas.Parse() を呼び出すと、ページが一番上にスクロールします。
html2canvas.Parse() を呼び出す前の位置を覚えていれば、元のスクロール位置に戻ることができると思いました。
- ブラウザのスクロール (特に垂直) の現在の位置を取得しますか?
- 以前に保存した位置にスクロールして戻りますか?
私は html2canvas ライブラリを使用しています。html2canvas.Parse() を呼び出すと、ページが一番上にスクロールします。
html2canvas.Parse() を呼び出す前の位置を覚えていれば、元のスクロール位置に戻ることができると思いました。
これを処理する最新の html5 ブラウザーの方法を選択しました。最後のスクロール位置をクライアント Web ブラウザー自体に保存し、ページのリロード時にブラウザーから最後のスクロール位置まで設定を読み取ります。
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
<script type="text/javascript">
$(document).ready(function () {
if (localStorage.getItem("my_app_name_here-quote-scroll") != null) {
$(window).scrollTop(localStorage.getItem("my_app_name_here-quote-scroll"));
}
$(window).on("scroll", function() {
localStorage.setItem("my_app_name_here-quote-scroll", $(window).scrollTop());
});
});
</script>
スクロールを記憶するには、このコードを使用します
$(document).ready(function (e) {
let UrlsObj = localStorage.getItem('rememberScroll');
let ParseUrlsObj = JSON.parse(UrlsObj);
let windowUrl = window.location.href;
if (ParseUrlsObj == null) {
return false;
}
ParseUrlsObj.forEach(function (el) {
if (el.url === windowUrl) {
let getPos = el.scroll;
$(window).scrollTop(getPos);
}
});
});
function RememberScrollPage(scrollPos) {
let UrlsObj = localStorage.getItem('rememberScroll');
let urlsArr = JSON.parse(UrlsObj);
if (urlsArr == null) {
urlsArr = [];
}
if (urlsArr.length == 0) {
urlsArr = [];
}
let urlWindow = window.location.href;
let urlScroll = scrollPos;
let urlObj = {url: urlWindow, scroll: scrollPos};
let matchedUrl = false;
let matchedIndex = 0;
if (urlsArr.length != 0) {
urlsArr.forEach(function (el, index) {
if (el.url === urlWindow) {
matchedUrl = true;
matchedIndex = index;
}
});
if (matchedUrl === true) {
urlsArr[matchedIndex].scroll = urlScroll;
} else {
urlsArr.push(urlObj);
}
} else {
urlsArr.push(urlObj);
}
localStorage.setItem('rememberScroll', JSON.stringify(urlsArr));
}
$(window).scroll(function (event) {
let topScroll = $(window).scrollTop();
console.log('Scrolling', topScroll);
RememberScrollPage(topScroll);
});
これは私のために働いた:
window.onbeforeunload = function () {
var scrollPos;
if (typeof window.pageYOffset != 'undefined') {
scrollPos = window.pageYOffset;
}
else if (typeof document.compatMode != 'undefined' && document.compatMode != 'BackCompat') {
scrollPos = document.documentElement.scrollTop;
}
else if (typeof document.body != 'undefined') {
scrollPos = document.body.scrollTop;
}
document.cookie = "scrollTop=" + scrollPos + "URL=" + window.location.href;
}
window.onload = function () {
if (document.cookie.includes(window.location.href)) {
if (document.cookie.match(/scrollTop=([^;]+)(;|$)/) != null) {
var arr = document.cookie.match(/scrollTop=([^;]+)(;|$)/);
document.documentElement.scrollTop = parseInt(arr[1]);
document.body.scrollTop = parseInt(arr[1]);
}
}
}
このコードのほとんどは別の場所で見つけましたが、残念ながらソースが見つかりません。スクロール位置が他のページではなく、同じページに対してのみ保存されるように、URL が同じかどうかを確認するチェックを追加しました。