Merge branch 'development'
All checks were successful
Build and Deploy / Build and Deploy (push) Successful in 17s
All checks were successful
Build and Deploy / Build and Deploy (push) Successful in 17s
This commit is contained in:
commit
718e6068b9
3 changed files with 73 additions and 10 deletions
|
|
@ -14,6 +14,9 @@
|
||||||
<li class="nav-item">
|
<li class="nav-item">
|
||||||
<a class="nav-link" href="/#section-pricing">Prijzen</a>
|
<a class="nav-link" href="/#section-pricing">Prijzen</a>
|
||||||
</li>
|
</li>
|
||||||
|
<li class="nav-item">
|
||||||
|
<a class="nav-link" href="/#section-fpv">Over FPV</a>
|
||||||
|
</li>
|
||||||
<li class="nav-item">
|
<li class="nav-item">
|
||||||
<a class="nav-link" href="/#section-about">Over mij</a>
|
<a class="nav-link" href="/#section-about">Over mij</a>
|
||||||
</li>
|
</li>
|
||||||
|
|
|
||||||
|
|
@ -1,17 +1,35 @@
|
||||||
document.addEventListener('DOMContentLoaded', () =>
|
const highlightSectionFromHash = () =>
|
||||||
|
{
|
||||||
|
const { hash } = window.location;
|
||||||
|
|
||||||
|
if (hash === '#section-contact')
|
||||||
|
{
|
||||||
|
const section = document.getElementById(hash.substring(1))?.parentElement;// .closest('section');
|
||||||
|
|
||||||
|
if (section)
|
||||||
|
{
|
||||||
|
setTimeout(() =>
|
||||||
|
{
|
||||||
|
section.classList.add('scrollto-highlight');
|
||||||
|
setTimeout(() => section.classList.remove('scrollto-highlight'), 1000);
|
||||||
|
}, 500);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
window.addEventListener('hashchange', highlightSectionFromHash);
|
||||||
|
|
||||||
|
window.addEventListener('pageshow', () =>
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
* @type {NodeListOf<HTMLVideoElement>}
|
* @type {NodeListOf<HTMLVideoElement>}
|
||||||
*/
|
*/
|
||||||
const parallaxElems = document.querySelectorAll('.parallax');
|
const parallaxElems = document.querySelectorAll('.parallax');
|
||||||
|
|
||||||
// Handle scroll events.
|
const refreshScrollLinkedPositioningEffect = () =>
|
||||||
window.addEventListener('scroll', () =>
|
|
||||||
{
|
{
|
||||||
// Add class to body when scrolled.
|
|
||||||
document.body.classList.toggle('is-scrolled', window.scrollY > 0);
|
document.body.classList.toggle('is-scrolled', window.scrollY > 0);
|
||||||
|
|
||||||
// Parallax effect.
|
|
||||||
parallaxElems.forEach(parallaxElem =>
|
parallaxElems.forEach(parallaxElem =>
|
||||||
{
|
{
|
||||||
const parentElem = parallaxElem.parentElement;
|
const parentElem = parallaxElem.parentElement;
|
||||||
|
|
@ -23,8 +41,16 @@ document.addEventListener('DOMContentLoaded', () =>
|
||||||
|
|
||||||
parallaxElem.style.top = `${(windowScroll - parentScroll) / 4}px`;
|
parallaxElem.style.top = `${(windowScroll - parentScroll) / 4}px`;
|
||||||
});
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
refreshScrollLinkedPositioningEffect();
|
||||||
|
window.addEventListener('scroll', refreshScrollLinkedPositioningEffect);
|
||||||
|
|
||||||
|
highlightSectionFromHash();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
document.addEventListener('DOMContentLoaded', () =>
|
||||||
|
{
|
||||||
/**
|
/**
|
||||||
* @type {NodeListOf<HTMLElement>}
|
* @type {NodeListOf<HTMLElement>}
|
||||||
*/
|
*/
|
||||||
|
|
@ -45,9 +71,10 @@ document.addEventListener('DOMContentLoaded', () =>
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
document.querySelectorAll('#navbarNav li.nav-item>a').forEach(anchor =>
|
// Collapse the navbar in mobile view after clicking a link.
|
||||||
|
document.querySelectorAll('#navbarNav li.nav-item>a').forEach(navLink =>
|
||||||
{
|
{
|
||||||
anchor.addEventListener('click', () =>
|
navLink.addEventListener('click', () =>
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
* @type {HTMLButtonElement}
|
* @type {HTMLButtonElement}
|
||||||
|
|
|
||||||
|
|
@ -94,6 +94,7 @@ body.home main {
|
||||||
@extend .pt-3;
|
@extend .pt-3;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
section,
|
||||||
main>* {
|
main>* {
|
||||||
@extend .pt-4;
|
@extend .pt-4;
|
||||||
@extend .pb-3;
|
@extend .pb-3;
|
||||||
|
|
@ -269,8 +270,7 @@ img.grayscale-effect {
|
||||||
.gradient-to-top-light::before {
|
.gradient-to-top-light::before {
|
||||||
content: "";
|
content: "";
|
||||||
position: absolute;
|
position: absolute;
|
||||||
top: 0;
|
inset: 0;
|
||||||
left: 0;
|
|
||||||
width: 100%;
|
width: 100%;
|
||||||
height: 100%;
|
height: 100%;
|
||||||
background: linear-gradient(to top, transparent 67%, rgba(var(--bs-light-rgb), 1) 100%);
|
background: linear-gradient(to top, transparent 67%, rgba(var(--bs-light-rgb), 1) 100%);
|
||||||
|
|
@ -334,3 +334,36 @@ img.grayscale-effect {
|
||||||
display: flex;
|
display: flex;
|
||||||
gap: .5rem;
|
gap: .5rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.scrollto-highlight {
|
||||||
|
position: relative;
|
||||||
|
overflow: hidden;
|
||||||
|
animation: highlight-fade 1s ease;
|
||||||
|
}
|
||||||
|
|
||||||
|
.scrollto-highlight::after {
|
||||||
|
content: "";
|
||||||
|
position: absolute;
|
||||||
|
inset: 0;
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
background: rgba(255, 255, 255, 0.20);
|
||||||
|
pointer-events: none;
|
||||||
|
animation: highlight-overlay-fade 1s ease-in-out forwards;
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes highlight-overlay-fade {
|
||||||
|
|
||||||
|
0% {
|
||||||
|
opacity: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
5%,
|
||||||
|
90% {
|
||||||
|
opacity: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
100% {
|
||||||
|
opacity: 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
Add table
Add a link
Reference in a new issue