shautvast.github.io/assets/js/mediumish.js
2023-08-24 21:05:05 +02:00

129 lines
4 KiB
JavaScript

jQuery(document).ready(function($){
//fix for stupid ie object cover
if (document.documentMode || /Edge/.test(navigator.userAgent)) {
jQuery('.featured-box-img-cover').each(function(){
var t = jQuery(this),
s = 'url(' + t.attr('src') + ')',
p = t.parent(),
d = jQuery('<div></div>');
p.append(d);
d.css({
'height' : '290',
'background-size' : 'cover',
'background-repeat' : 'no-repeat',
'background-position' : '50% 20%',
'background-image' : s
});
t.hide();
});
}
// alertbar later
$(document).scroll(function () {
var y = $(this).scrollTop();
if (y > 280) {
$('.alertbar').fadeIn();
} else {
$('.alertbar').fadeOut();
}
});
// Smooth on external page
$(function() {
setTimeout(function() {
if (location.hash) {
/* we need to scroll to the top of the window first, because the browser will always jump to the anchor first before JavaScript is ready, thanks Stack Overflow: http://stackoverflow.com/a/3659116 */
window.scrollTo(0, 0);
target = location.hash.split('#');
smoothScrollTo($('#'+target[1]));
}
}, 1);
// taken from: https://css-tricks.com/snippets/jquery/smooth-scrolling/
$('a[href*=\\#]:not([href=\\#])').click(function() {
if (location.pathname.replace(/^\//,'') == this.pathname.replace(/^\//,'') && location.hostname == this.hostname) {
smoothScrollTo($(this.hash));
return false;
}
});
function smoothScrollTo(target) {
target = target.length ? target : $('[name=' + this.hash.slice(1) +']');
if (target.length) {
$('html,body').animate({
scrollTop: target.offset().top
}, 1000);
}
}
});
// Hide Header on on scroll down
var didScroll;
var lastScrollTop = 0;
var delta = 5;
var navbarHeight = $('nav').outerHeight();
$(window).scroll(function(event){
didScroll = true;
});
setInterval(function() {
if (didScroll) {
hasScrolled();
didScroll = false;
}
}, 250);
function hasScrolled() {
var st = $(this).scrollTop();
// Make sure they scroll more than delta
if(Math.abs(lastScrollTop - st) <= delta)
return;
// If they scrolled down and are past the navbar, add class .nav-up.
// This is necessary so you never see what is "behind" the navbar.
if (st > lastScrollTop && st > navbarHeight){
// Scroll Down
$('nav').removeClass('nav-down').addClass('nav-up');
$('.nav-up').css('top', - $('nav').outerHeight() + 'px');
} else {
// Scroll Up
if(st + $(window).height() < $(document).height()) {
$('nav').removeClass('nav-up').addClass('nav-down');
$('.nav-up, .nav-down').css('top', '0px');
}
}
lastScrollTop = st;
}
$('.site-content').css('margin-top', $('header').outerHeight() + 'px');
// spoilers
$(document).on('click', '.spoiler', function() {
$(this).removeClass('spoiler');
});
});
// deferred style loading
var loadDeferredStyles = function () {
var addStylesNode = document.getElementById("deferred-styles");
var replacement = document.createElement("div");
replacement.innerHTML = addStylesNode.textContent;
document.body.appendChild(replacement);
addStylesNode.parentElement.removeChild(addStylesNode);
};
var raf = window.requestAnimationFrame || window.mozRequestAnimationFrame ||
window.webkitRequestAnimationFrame || window.msRequestAnimationFrame;
if (raf) raf(function () {
window.setTimeout(loadDeferredStyles, 0);
});
else window.addEventListener('load', loadDeferredStyles);