スクロール中の可視性を制御したいヘッダーがあります。ページを下にスクロールすると、ヘッダーは他の要素と同じように動作する必要があります。ページを上にスクロールするとき、ページの位置に関係なく、ページが上がるにつれてヘッダーを表示したいと思います。この動作は、簡単な例を観察することで最もよく理解できます。
スクロール イベントをリッスンし、固定位置の div を負のトップ値で更新しています。
$(function()
{
var $header = $("#header");
var $window = $(window);
var headerHeight = $header.outerHeight();
var headerY = $header.outerHeight();
var scrollY = $window.scrollTop();
$window.on("scroll", function()
{
headerY += scrollY - $window.scrollTop();
if (headerY > headerHeight)
{
headerY = headerHeight;
}
else if (headerY < 0)
{
headerY = 0;
}
$header.css(
{
top: headerY - headerHeight,
});
scrollY = $window.scrollTop();
});
});
ただし、Chrome for Mobile での動作は、私が期待するものとはまったく異なります。多くの場合、ヘッダーはアニメーション化されず、境界が満たされるとすぐに表示または非表示になります。アニメーションを実行すると、パフォーマンスは停止するほど不規則になり、多くの場合、1 ~ 3 フレームしか描画されません。デスクトップ Chrome のモバイル エミュレーションを使用している場合、この動作は発生しません。実際のデバイスでのみ発生します。
これは、ページ上部の固定位置要素を処理する場合にのみ発生するようです。側面や底面から移動するなど、固定要素を別の方法で変更しようとすると、すべてが期待どおりに機能します。実際、固定位置のトップ要素と固定位置のサイド要素の両方を変更すると、トップ要素はより均一に動作します。
Chrome for Mobile が固定位置の要素をページの上部に配置すると、なぜ不安定になるのですか? 簡潔に説明できる方法はありますか?