Zafixování elementu v prohlížeči pomocí Java Scriptu

07.06.2024 Programování #javascript #html #fixed

Jednoduchý kód pro zafixování například menu v horní části prohlížeče. Typické je to právě pro stálé zobrazení odkazů na webových stránkách.


Pro ukotvení elementu na stránce lze využít vlastnosti CSS position:fixed, nebo sticky. To má svá pravidla, jako sticky element musí být v kořenu html apod. Druhou možností je využít Javascript v kombinaci s CSS.

HTML

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Sticky Menu Example</title>
    <link rel="stylesheet" href="styles.css">
    <script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
</head>
<body>
    <div class="contain-to-grid stickyMenu">
        <div class="container">
            <div class="topmenucatalog">
                <nav class="navbar navbar-expand-md upmenu">
                    <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#upMenu" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation">
                        <span class="navbar-toggler-icon"><i class="fa fa-bars" aria-hidden="true"></i></span>
                    </button>
                    <div class="collapse navbar-collapse" id="upMenu">
                        Menu Items
                    </div>
                </nav>
            </div>
        </div>
    </div>

    <script src="script.js"></script>
</body>
</html>

CSS

.stickyMenu.is-stuck {
    position: fixed;
    top: 0;
    width: 100%;
    z-index: 1000;
}

Javascript

$(document).ready(function() {
    var stickyMenu = $('.stickyMenu');
    var stickyMenuOffset = stickyMenu.offset().top;

    $(window).on('scroll', function() {
        if ($(window).scrollTop() >= stickyMenuOffset) {
            stickyMenu.addClass('is-stuck');
        } else {
            stickyMenu.removeClass('is-stuck');
        }
    });
});
  • Po načtení dokumentu získáme offset horního okraje elementu stickyMenu.
  • Při scrollování okna zkontrolujeme, zda je horní okraj stránky (scrollTop) větší nebo roven offsetu elementu stickyMenu.
  • Pokud ano, přidáme třídu is-stuck pro fixní pozici.
  • Pokud ne, třídu is-stuck odstraníme.

Tímto způsobem bude váš element stickyMenu zafixován u horního okraje prohlížeče při scrollování.