ipc.me を閲覧すると、ページを下に向けると右側のスライダーが常にウィンドウの端の下に浮かんでいるように感じます。Zhang Xinxu のブログの記事に基づいて、実装に成功しました。このような関数は次のとおりです (jquery に基づいて実装されているため、事前に jquery ファイルをページにインポートする必要があります):
<script type="text/javascript"> $.fn.smartFloat = function() { var position = function(element) { var top = element.position().top, pos = element.css("position"); $(window).scroll(function() { var scrolls = $(this).scrollTop(); if (scrolls > top) { if (window.XMLHttpRequest) { element.css({ position: "fixed", top: 0 }); } else { element.css({ top: scrolls }); } }else { element.css({ position: "absolute", top: top }); } }); }; return $(this).each(function() { position($(this)); }); }; $("要浮动的层id或class").smartFloat(); </script>
もちろん、IE ではテストされていないため、実行できるはずです。実装の原理は次のとおりです (見て原理を理解するのが最善です。ここで停止してください。見晴らしの良い高さから問題を見て、一目で山を確認してください):
デフォルトの状態です。位置決めは絶対的でも静的でも何もする必要はありません。重要なのは、ブラウザがスクロールし、オブジェクト (フローティングするレイヤー) をブラウザ インターフェイスのビューポートから削除する必要がある場合、オブジェクトがウィンドウの上端にフローティングして表示されるように、その位置属性を変更するだけであるということです。最適な位置属性は固定されており、IE6 以降やその他のブラウザーでフローティング レイヤーの位置をスムーズに固定できます。IE6 の以前のバージョンでは固定属性がサポートされていないため、代わりに絶対属性を使用します。ただし、副作用があります。 - スクロールがスムーズになりません。しかし、それについて私たちにできることは何もありません。
ここで重要なのは、現在のレイヤーがブラウザ ウィンドウの上端に接触しているかどうかを判断する方法です。フローティングレイヤーがブラウザウィンドウの上端に接している場合、実際にはページの垂直オフセット値はページのスクロール高さと同じになりますので、これを使って判断しても大丈夫です。ページ上の要素とページ間の距離を取得するにはどうすればよいですか?幸いなことに、JavaScript ライブラリ jQuery がこれらのタスクを解決するのに役立ちます。