mirror of
https://github.com/gcushen/hugo-academic.git
synced 2025-07-26 19:15:16 +02:00
153 lines
4.9 KiB
JavaScript
153 lines
4.9 KiB
JavaScript
/*************************************************
|
|
* Hugo Academic: an academic theme for Hugo.
|
|
* https://github.com/gcushen/hugo-academic
|
|
**************************************************/
|
|
|
|
(function($){
|
|
|
|
/* ---------------------------------------------------------------------------
|
|
* Add smooth scrolling to all links inside the main navbar.
|
|
* --------------------------------------------------------------------------- */
|
|
|
|
$('#navbar-main li.nav-item a').on('click', function(event){
|
|
|
|
// Store requested URL hash.
|
|
var hash = this.hash;
|
|
|
|
// If we are on the homepage and the navigation bar link is to a homepage section.
|
|
if( hash && $(hash).length && ($("#homepage").length > 0)){
|
|
// Prevent default click behavior
|
|
event.preventDefault();
|
|
|
|
var navbarHeight = $('.navbar-header').innerHeight();
|
|
|
|
// Use jQuery's animate() method for smooth page scrolling.
|
|
// The numerical parameter specifies the time (ms) taken to scroll to the specified hash.
|
|
$('html, body').animate({
|
|
scrollTop: $(hash).offset().top - navbarHeight
|
|
}, 800, function () {
|
|
// Add hash (#) to URL once finished scrolling to hash position
|
|
if (hash == "#top"){
|
|
window.location.hash = ""
|
|
}else {
|
|
window.location.hash = hash;
|
|
}
|
|
});
|
|
}
|
|
});
|
|
|
|
/* ---------------------------------------------------------------------------
|
|
* Smooth scrolling for Back To Top link.
|
|
* --------------------------------------------------------------------------- */
|
|
|
|
$('#back_to_top').on('click', function(event){
|
|
event.preventDefault();
|
|
|
|
$('html, body').animate({
|
|
'scrollTop': 0
|
|
}, 800, function(){
|
|
window.location.hash = ""
|
|
});
|
|
});
|
|
|
|
/* ---------------------------------------------------------------------------
|
|
* Smooth scrolling for mouse wheel.
|
|
* --------------------------------------------------------------------------- */
|
|
|
|
function smoothScroll(scrollTime, scrollDistance){
|
|
|
|
if (navigator.userAgent.indexOf('Mac') != -1 || navigator.userAgent.indexOf('Firefox') > -1 || jQuery('body').hasClass('is-horizontal')){
|
|
return;
|
|
}
|
|
|
|
jQuery(window).on("mousewheel DOMMouseScroll", function(event){
|
|
|
|
event.preventDefault();
|
|
|
|
var delta = event.originalEvent.wheelDelta/120 || -event.originalEvent.detail/3;
|
|
var scrollTop = jQuery(window).scrollTop();
|
|
var finalScroll = scrollTop - parseInt(delta*scrollDistance);
|
|
|
|
TweenMax.to(jQuery(window), scrollTime, {
|
|
scrollTo : { y: finalScroll, autoKill:true },
|
|
ease: Expo.easeOut,
|
|
autoKill: true,
|
|
overwrite: 5
|
|
});
|
|
|
|
});
|
|
|
|
}
|
|
|
|
/* ---------------------------------------------------------------------------
|
|
* Hide mobile collapsable menu on clicking a link.
|
|
* --------------------------------------------------------------------------- */
|
|
|
|
$(document).on('click','.navbar-collapse.in',function(e){
|
|
if( $(e.target).is('a') && $(e.target).attr('class') != 'dropdown-toggle' ){
|
|
$(this).collapse('hide');
|
|
}
|
|
});
|
|
|
|
/* ---------------------------------------------------------------------------
|
|
* Filter projects.
|
|
* --------------------------------------------------------------------------- */
|
|
|
|
var $container = $('#container-projects');
|
|
$container.imagesLoaded(function () {
|
|
// Initialize Isotope after all images have loaded.
|
|
$container.isotope({
|
|
itemSelector: '.isotope-item',
|
|
layoutMode: 'masonry'
|
|
});
|
|
|
|
// Filter items when filter link is clicked.
|
|
$('#filters a').click(function () {
|
|
var selector = $(this).attr('data-filter');
|
|
$container.isotope({filter: selector});
|
|
$(this).removeClass('active').addClass('active').siblings().removeClass('active all');
|
|
return false;
|
|
});
|
|
});
|
|
|
|
/* ---------------------------------------------------------------------------
|
|
* On window load.
|
|
* --------------------------------------------------------------------------- */
|
|
|
|
$(window).load(function(){
|
|
|
|
// Enable smooth scrolling with mouse wheel
|
|
smoothScroll(1.3, 220);
|
|
|
|
// When accessing homepage from another page and `#top` hash is set, show top of page (no hash).
|
|
if (window.location.hash == "#top") {
|
|
window.location.hash = ""
|
|
}
|
|
|
|
// Initialize Scrollspy.
|
|
var $body = $('body');
|
|
var $navbar = $('.navbar-header');
|
|
var navbar_offset = $navbar.innerHeight() + 1;
|
|
$body.scrollspy({offset: navbar_offset });
|
|
|
|
// Make Scrollspy responsive.
|
|
function fixScrollspy() {
|
|
var data = $body.data('bs.scrollspy');
|
|
if (data) {
|
|
navbar_offset = $navbar.innerHeight() + 1;
|
|
data.options.offset = navbar_offset;
|
|
$body.data('bs.scrollspy', data);
|
|
$body.scrollspy('refresh');
|
|
}
|
|
}
|
|
|
|
// Call `fixScrollspy` when window is resized.
|
|
var resizeTimer;
|
|
$(window).resize(function() {
|
|
clearTimeout(resizeTimer);
|
|
resizeTimer = setTimeout(fixScrollspy, 200);
|
|
});
|
|
|
|
});
|
|
|
|
})(jQuery);
|