ホームページ >ウェブフロントエンド >jsチュートリアル >jqueryは、ページのスクロールに合わせてスクロールするdivレイヤーを実装します。

jqueryは、ページのスクロールに合わせてスクロールするdivレイヤーを実装します。

伊谢尔伦
伊谢尔伦オリジナル
2016-11-22 11:45:121941ブラウズ

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 がこれらのタスクを解決するのに役立ちます。


声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。