Boas colegas estou com o seguinte problema num projecto de website. Criei um navbar com ajuda do bootstrap para agilizar o processo e tal… Então decidi adicionar uma funcionalidade que ao rolar para baixo esse navbar ficaria estático e haveria de diminuir a sua altura em conjunto com a imagem de logo… Até aí tudo bem, mas complicou quando quis suavizar a mudança do navbar estático alterado pelo scroll para o navbar inicial porque era muito brusca, criei uma regra do css com a propriedade transition para a tag NAV, mas não suavizou de todo, ou seja não fiz correctamente ou não era o que eu queria… Abaixo deixarei o código html, css e js para uma ajuda…
HTML
<header>
<nav class="navbar navbar-expand-lg navbar-light">
<a href="index.html" class="navbar-brand">
<img src="_imgs/IMG_28082020 mini-Logotipo.png" alt="logotipo" loading="lazy" class="logo">
</a>
<button class="navbar-toggler" type="button" data-toggle="collapse"
data-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation">
<i class="fas fa-bars navbar-toggler-icon"></i>
</button>
<div class="collapse navbar-collapse" id="navbarSupportedContent">
<ul class="navbar-nav ml-auto">
<li class="nav-item">
<a href=#"" class="nav-link active">...</a>
</li>
<li class="nav-item">
<a href="#" class="nav-link">...</a>
</li>
<li class="nav-item">
<a href="#" class="nav-link">...</a>
</li>
<li class="nav-item">
<a href="#" class="nav-link">...</a>
</li>
<li class="nav-item">
<a href="#" class="nav-link">...</a>
</li>
<li class="nav-item">
<a href="#" class="nav-link">...</a>
</li>
</ul>
</div>
</nav>
</header>
<!--
Hero Section
-->
<div class="hero container-fluid">
<h1 class="h1">....</h1>
<hr class="hr-hero">
</div>
CSS
nav {
background-color: #fff !important;
height: auto;
}
.logo{
width: 114.99px;
height: 109.99px;
}
.active-scrolling{
background-color: rgba(255, 255, 255, 0.95) !important;
box-shadow: 2px 2px 6px rgba(31, 30, 30, 0.3);
height: 5em;
}
.active-scrolling .logo{
width: 69px;
height: 66px;
}
div.hero {
padding: 70px 0;
background-image: linear-gradient(120deg, #d5fc79e1 0%, #7ec588 100%);
box-shadow: 3px 3px 12px rgba(31, 30, 30, 0.3);
}
JS
function activeOnScrolling() {
const nav = document.querySelector("nav");
const windowPosition = window.scrollY > 0;
if (windowPosition) {
nav.classList.add("fixed-top");
nav.classList.toggle("active-scrolling", windowPosition);
} else {
setTimeout(function () {
nav.classList.remove("fixed-top", "active-scrolling")
}, 200);
}
}
Nos documentos HTML evoquei o método através do evento scroll
window.onload = function () {
document.addEventListener("scroll", handleScroll);
scrollToTopButton.addEventListener("click", scrollToTopAction);
document.addEventListener("scroll", activeOnScrolling);
}