blob: 86195585e90486be7f261b88bbd3f5f2c75f80fe [file] [log] [blame]
(function () {
'use strict';
var burgerMenu = document.querySelector('#burger-menu'),
links = [].slice.call(document.querySelectorAll('.nav-link')),
body = document.querySelector('body'),
addClass = function (elem, className) {
if (elem.className.indexOf(className) === -1) {
elem.className += ' ' + className;
}
},
removeClass = function (elem, className) {
var classes = elem.className.replace(' ' + className, '');
elem.className = classes;
},
toggle = function (elem, expr, className) {
if (expr) {
addClass(elem, className);
} else {
removeClass(elem, className);
}
},
setPushStateUrl = function (target) {
window.history.pushState(null, target.text, target);
};
if (!window.location.hostname === 'localhost') {
var path = window.location.pathname.replace('/', '');
if (path) {
window.scrollTo(0, document.querySelector('#' + path).offsetTop);
}
}
[].slice.call(document.querySelectorAll('.ripple-btn')).forEach(function (btn) {
btn.addEventListener('mousedown', function (event) {
var ripple = this.querySelector('.ripple');
addClass(ripple, 'visible');
ripple.style.transform = 'translate(-50%, -50%) translate(' + event.layerX + 'px, ' + event.layerY + 'px) scale(0.0001, 0.0001)';
setTimeout(function () {
ripple.style.transform = ripple.style.transform.replace(' scale(0.0001, 0.0001)', '');
}, 200);
}, true);
btn.addEventListener('mouseup', function () {
var ripple = this.querySelector('.ripple');
removeClass(ripple, 'visible');
}, true);
});
links.forEach(function (link) {
link.addEventListener('click', function (e) {
var targetSection = document.querySelector('#' + this.getAttribute('href')),
endPos = targetSection.offsetTop,
startPos = window.scrollY;
e.preventDefault();
window.removeEventListener('scroll', onScrollMethod);
setPushStateUrl(this);
if (startPos <= endPos) {
animForward(startPos, endPos);
} else {
animBackward(startPos, endPos);
}
window.addEventListener('scroll', onScrollMethod);
}, true);
});
// document.querySelector('div.search').addEventListener('click', function() {
// var searchField = document.querySelector('.search-field');
//
// toggle(searchField, searchField.className.indexOf('active') === -1 , 'active');
// });
var animForward = function (startPos, endPos) {
var incrementer = .1,
step = function () {
var diffEndStart = (endPos - startPos);
incrementer += 1.25;
if (diffEndStart < 40) {
startPos += diffEndStart;
} else {
startPos += (1 * incrementer);
}
window.scrollTo(0, startPos);
if (startPos < endPos) {
window.requestAnimationFrame(step);
}
};
window.requestAnimationFrame(step);
};
var animBackward = function (startPos, endPos) {
var incrementer = .1,
step = function () {
var diffEndStart = (startPos - endPos);
incrementer += 1.25;
if (diffEndStart < 40) {
startPos -= diffEndStart;
} else {
startPos -= (1 * incrementer);
}
window.scrollTo(0, startPos);
if (startPos > endPos) {
window.requestAnimationFrame(step);
}
};
window.requestAnimationFrame(step);
};
document.querySelector('.back-to-top').addEventListener('click', function () {
window.history.replaceState(null, null, '/');
animBackward(window.scrollY, 0);
}, true);
burgerMenu.addEventListener('click', function () {
if (body.className.indexOf('active') === -1) {
addClass(body, 'active');
} else {
removeClass(body, 'active');
body.removeEventListener('click', this);
}
}, true);
var onScrollMethod = function () {
toggle(document.querySelector('header'), document.body.scrollTop >= 100, 'active');
toggle(document.querySelector('body'), document.body.scrollTop >= 280, 'scrolled');
};
window.addEventListener('scroll', onScrollMethod);
}());