2015-12-20 18:03:44 +01:00
|
|
|
|
|
|
|
var SmoothScroll = (function(w, d) {
|
|
|
|
|
|
|
|
'use strict';
|
|
|
|
|
|
|
|
var app, _private, _config;
|
|
|
|
|
|
|
|
// workaround for blog
|
|
|
|
var $ = jQuery;
|
|
|
|
|
|
|
|
_config = {
|
|
|
|
win: $(window)
|
|
|
|
},
|
|
|
|
|
|
|
|
_private = {
|
|
|
|
|
|
|
|
scrollToTarget: function() {
|
|
|
|
|
|
|
|
// Check window width helper
|
|
|
|
function isWide() {
|
|
|
|
return _config.win.width() >= _config.minWidth;
|
|
|
|
}
|
|
|
|
|
2016-01-13 13:03:48 +01:00
|
|
|
$("a[href*='#']").not("[href='#'], .nav a[href*='#']").click(function(e) {
|
2015-12-20 18:03:44 +01:00
|
|
|
if (location.pathname.replace(/^\//,'') == this.pathname.replace(/^\//,'') && location.hostname == this.hostname) {
|
|
|
|
var target = $(this.hash);
|
|
|
|
target = target.length ? target : $('[name=' + this.hash.slice(1) +']');
|
|
|
|
|
|
|
|
if (target.length) {
|
|
|
|
e.preventDefault();
|
|
|
|
|
|
|
|
if (typeof document.body.style.transitionProperty === 'string') {
|
|
|
|
var avail = $(document).height() - _config.win.height();
|
|
|
|
|
|
|
|
scroll = target.offset().top;
|
|
|
|
|
|
|
|
if (scroll > avail) {
|
|
|
|
scroll = avail;
|
|
|
|
}
|
|
|
|
|
|
|
|
$('html').css({
|
|
|
|
'transform': 'translate3d(0, ' + ( _config.win.scrollTop() - scroll ) + 'px, 0)',
|
|
|
|
'transition' : '.6s ease-in-out'
|
|
|
|
}).data('transitioning', true);
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
// fallback for dumb browsers
|
|
|
|
$('html, body').animate({
|
|
|
|
scrollTop: target.offset().top
|
|
|
|
}, 600);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
});
|
|
|
|
},
|
|
|
|
|
|
|
|
//
|
|
|
|
// remove styles after transition has finished
|
|
|
|
//
|
|
|
|
removeStyles: function() {
|
|
|
|
|
|
|
|
$('html').on('transitionend webkitTransitionEnd msTransitionEnd oTransitionEnd', function (e) {
|
|
|
|
if (e.target == e.currentTarget && $(this).data('transitioning') === true) {
|
|
|
|
$(this).removeAttr('style').data('transitioning', false);
|
|
|
|
$('html, body').scrollTop(scroll);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
});
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
|
|
|
app = {
|
|
|
|
init: function() {
|
|
|
|
_private.scrollToTarget();
|
|
|
|
_private.removeStyles();
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
|
|
|
return app;
|
|
|
|
|
|
|
|
})(window, document);
|