デスクトップ ブラウザーで HTML ページをズームすると、固定位置の div はページの残りの部分と同様に拡大縮小され、ビューポートに対して固定された位置を維持します。これは、以前は Chrome モバイル ブラウザーでも同様でした (バージョン 39 ではまだそのように動作していました) が、Chrome for mobile 40 では、モバイル用 Safari と同様の動作を開始し、ページが拡大縮小されると、固定要素は拡大縮小された要素に固定されます。ページが 100% ズームの場合に配置される位置にドキュメントを配置します (いくつかの注意事項があります)。
これは、position:fixed の div を含むページです http://betterstatistics.org/tests/fixedpos
モバイルの場合、ズームに従ってdivをスケーリングし、position:fixedプロパティを保持して、スクロール時に位置を変更する必要がないように、ズームに従って位置を設定したいと思います。
これが私の試みです: http://betterstatistics.org/tests/fixedpos/attempt001.html (モバイルのみ)
関連する行:
orig_w = 300;
orig_h = 100;
document.body.addEventListener('touchend', repositionDiv);
function repositionDiv(){
var zoom = getZoom();
var d1 = document.getElementById("div_br");
var w = (orig_w / zoom);
var h = (orig_h / zoom);
d1.style.width = w + 'px';
d1.style.height = h + 'px';
d1.style.left = (window.scrollX + window.innerWidth - d1.offsetWidth) +'px';
d1.style.top = (window.innerHeight - d1.offsetHeight) +'px';
}
function getZoom(){
return document.documentElement.clientWidth / window.innerWidth;
}
モバイル用の Android Chrome でほぼ動作しますが、スクロール後に高さの位置を正しく取得できませんでした。次のことも試しました。
d1.style.top = (window.scrollY + window.innerHeight - d1.offsetHeight) +'px';
と:
d1.style.top = (window.scrollY / zoom + window.innerHeight - d1.offsetHeight) +'px';
同様の質問がいくつかあることは知っていますが、ほとんどがJQueryであり、解決策のあるものは見当たりませんでした。それらは主にiOSに関するものでしたが、今のところAndroid Chromeにもっと興味があります.