Files
portfolio/script.js
T

74 lines
2.1 KiB
JavaScript

/*jslint browser maxlen:80 */
/*global window */
const mainTitle = document.querySelector('.main-title');
const navBarElems = document.querySelector('body > header > nav');
function toMove(toClass, inClass) {
"use strict";
const elementsToMove = document.querySelectorAll(toClass);
if (elementsToMove !== null) {
elementsToMove.forEach(function (elem) {
const distInView = (
elem.getBoundingClientRect().bottom - (elem.offsetHeight) / 2
) - window.innerHeight;
if (distInView < 0) {
elem.classList.add(inClass);
} else {
elem.classList.remove(inClass);
}
});
}
}
function scrollHandler() {
"use strict";
toMove('.to-fade', 'fade-in');
toMove('.to-grow', 'grow-in');
toMove('.to-slide', 'slide-in');
const y = window.scrollY;
const titlePos = mainTitle.getBoundingClientRect();
if (titlePos.bottom > 0) {
const distanceToTop = window.pageYOffset + titlePos.top;
const elementHeight = mainTitle.offsetHeight;
const opacity = 1 - ((y - distanceToTop) / elementHeight) * 2;
if (opacity > 0) {
const pixelsSpacing = (y * 0.005 <= 0.1
? 0.1
: y * 0.005);
mainTitle.style.letterSpacing = (pixelsSpacing * 2) + 'em';
mainTitle.style.opacity = opacity;
}
}
}
scrollHandler();
window.addEventListener('scroll', scrollHandler);
function switchNavBar() {
"use strict";
const header = document.querySelector('.hamburger').parentNode.classList;
if (header.contains('slide-in') || header.contains('to-cross')) {
header.remove('slide-in');
header.remove('to-cross');
navBarElems.classList.remove('slide-elements');
} else {
header.add('slide-in');
header.add('to-cross');
navBarElems.classList.add('slide-elements');
}
}
document.querySelectorAll('nav a').forEach(function (a) {
"use strict";
a.onclick = switchNavBar;
});