ユーザーがiPhoneのモバイルサファリのビューポート内で「スクロール」した距離のx/yオフセットを知りたいのですが。
言い換えると、(javascriptを介して)現在のページをリロードした場合、ドキュメント/ビューポートを現在のように再配置するために、window.scrollTo(...)に渡す必要のある値を見つけたいと思います。 。
window.pageXOffsetは常に0を報告します
jqueryの$( 'body')。scrollTop()は常に0を報告します
イベントにはpageXがありますが、これは、ジェスチャがページを上下に「フリック」する場合に指を離した後に発生するページのスクロールを考慮していません。つまり、指が画面から離れたときにポイントが表示されますが、スクロールが終了した後のページの位置とは必ずしも一致しません。
ポインタはありますか?
window.pageYOffset
は、現在のスクロールオフセットを提供するはずです。必要に応じてwindow.pageXOffset
もあります。
これは確かに機能します:
var scrollX = window.pageXOffset;
var scrollY = window.pageYOffset;
IFrame(たとえばWebViewsで一般的)でコンテンツを表示している場合は、親を追加する必要があります。
var scrollX = parent.window.pageXOffset;
また、これらの値は書き込み可能ではないことに注意してください。したがって、スクロール位置を変更するには、window.scrollToメソッドを使用する必要があります。
var scrollX = window.pageXOffset;
var scrollY = window.pageYOffset;
window.scrollTo(scrollX -100, scrollY -100);
私は同じ問題を抱えていました...これはトリックをしました:
var scrollX = window.pageXOffset; var scrollY = window.pageYOffset;
この質問から得ました: モバイル(iPhone)Safariでビューポートの現在の位置を取得します
これは、デバイスがiPhoneであるかどうかを確認し、何らかのアクションに基づいてスクロール位置を特定の位置に変更するための簡単なコードです。画像をクリックしてポップアップとして開くと、iphoneで問題が発生しました。これは、垂直スクロールが目的の場所よりも下がるためです。だから私はこのコードを書き、それは問題を解決しました。
if((navigator.userAgent.match(/iPhone|iPad|iPod/i))){
('#tutorial-landlord').click(function(){
window.scroll(100, 1500); // x, y (horizontal, vertical position)
});
}
スクロール位置を見つけるため。 chromeでコンソールに移動し、垂直方向にwindow.scrollYと記述して、位置がどのように変化するかを確認します。その番号をメモして、xとyの代わりに指定します。
グーグル閉鎖のユーザーのために:
IPadでも同じ問題が発生しました。コンソールを非アクティブ化するだけです。 Safariでコンソールを開くと、ビューポートの高さが変わります。
何らかの理由でpageXOffsetとpageYOffsetが失敗した場合、解決策は簡単ですが、かなりばかげています。
// force an element to top left of the page
var topLeftMarker = document.createElement("span");
topLeftMarker.style.position = "absolute";
topLeftMarker.style.left = "0";
topLeftMarker.style.top = "0";
document.body.appendChild(topLeftMarker)
function scrollOffset() {
// getBoundingClientRect() returns the rectangle of the element in viewport space,
// which *is* scrollLeft and scrollTop
const rect = topLeftMarker.getBoundingClientRect();
return { x: rect.left, y: rect.top }
}
純粋なjsの方法を試しましたか?
document.body.scrollTop