mirror of
https://github.com/McShelby/hugo-theme-relearn.git
synced 2024-11-23 07:47:54 +00:00
feat: add sticky bar with smooth scroll
This commit is contained in:
parent
e37af28876
commit
da208441c0
5 changed files with 91 additions and 7 deletions
|
@ -3,9 +3,9 @@
|
||||||
- créer une section Showcase
|
- créer une section Showcase
|
||||||
- refaire la possibilité d'overrider le style/script/etc -> TODO
|
- refaire la possibilité d'overrider le style/script/etc -> TODO
|
||||||
- créer des jolis thèmes de base (avec des noms) -> TODO
|
- créer des jolis thèmes de base (avec des noms) -> TODO
|
||||||
- ajouter Travis pour tester le thème quotidiennement avec les nouvelles versions de Hugo -> TODO
|
- ajouter les attachments -> TODO
|
||||||
|
|
||||||
|
|
||||||
|
- ajouter Travis pour tester le thème quotidiennement avec les nouvelles versions de Hugo -> OK
|
||||||
- #54 -> OK
|
- #54 -> OK
|
||||||
- corriger slider menu qui ne fonctionne plus -> OK
|
- corriger slider menu qui ne fonctionne plus -> OK
|
||||||
- Update font awesome -> OK
|
- Update font awesome -> OK
|
||||||
|
|
|
@ -1 +1,2 @@
|
||||||
<link rel="shortcut icon" href="/images/favicon.png" type="image/x-icon" />
|
<link rel="shortcut icon" href="/images/favicon.png" type="image/x-icon" />
|
||||||
|
<link rel="icon" href="/images/favicon.png" type="image/x-icon" />
|
||||||
|
|
|
@ -34,7 +34,7 @@
|
||||||
{{ partial "menu.html" . }}
|
{{ partial "menu.html" . }}
|
||||||
<section id="body">
|
<section id="body">
|
||||||
<div id="overlay"></div>
|
<div id="overlay"></div>
|
||||||
<div class="padding highlightable">
|
<div class="padding highlightable sticky-parent">
|
||||||
{{if not .IsHome}}
|
{{if not .IsHome}}
|
||||||
<div id="top-bar">
|
<div id="top-bar">
|
||||||
{{ if and (or .IsPage .IsSection) .Site.Params.editURL }}
|
{{ if and (or .IsPage .IsSection) .Site.Params.editURL }}
|
||||||
|
|
|
@ -56,10 +56,10 @@ images.each(function(index){
|
||||||
});
|
});
|
||||||
|
|
||||||
// Stick the top to the top of the screen when scrolling
|
// Stick the top to the top of the screen when scrolling
|
||||||
//$("#top-bar").stick_in_parent( {
|
$("#top-bar").stick_in_parent( {
|
||||||
// parent: ".sticky-parent",
|
parent: ".sticky-parent",
|
||||||
// spacer: ".sticky-spacer",
|
spacer: ".sticky-spacer",
|
||||||
//});
|
});
|
||||||
|
|
||||||
|
|
||||||
jQuery(document).ready(function() {
|
jQuery(document).ready(function() {
|
||||||
|
|
|
@ -251,6 +251,89 @@ jQuery(document).ready(function() {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Fix anchor scrolling that hides behind top nav bar
|
||||||
|
* Courtesy of https://stackoverflow.com/a/13067009/28106
|
||||||
|
*
|
||||||
|
* We could use pure css for this if only heading anchors were
|
||||||
|
* involved, but this works for any anchor, including footnotes
|
||||||
|
**/
|
||||||
|
(function (document, history, location) {
|
||||||
|
var HISTORY_SUPPORT = !!(history && history.pushState);
|
||||||
|
|
||||||
|
var anchorScrolls = {
|
||||||
|
ANCHOR_REGEX: /^#[^ ]+$/,
|
||||||
|
OFFSET_HEIGHT_PX: 50,
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Establish events, and fix initial scroll position if a hash is provided.
|
||||||
|
*/
|
||||||
|
init: function () {
|
||||||
|
this.scrollToCurrent();
|
||||||
|
$(window).on('hashchange', $.proxy(this, 'scrollToCurrent'));
|
||||||
|
$('body').on('click', 'a', $.proxy(this, 'delegateAnchors'));
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return the offset amount to deduct from the normal scroll position.
|
||||||
|
* Modify as appropriate to allow for dynamic calculations
|
||||||
|
*/
|
||||||
|
getFixedOffset: function () {
|
||||||
|
return this.OFFSET_HEIGHT_PX;
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* If the provided href is an anchor which resolves to an element on the
|
||||||
|
* page, scroll to it.
|
||||||
|
* @param {String} href
|
||||||
|
* @return {Boolean} - Was the href an anchor.
|
||||||
|
*/
|
||||||
|
scrollIfAnchor: function (href, pushToHistory) {
|
||||||
|
var match, anchorOffset;
|
||||||
|
|
||||||
|
if (!this.ANCHOR_REGEX.test(href)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
match = document.getElementById(href.slice(1));
|
||||||
|
|
||||||
|
if (match) {
|
||||||
|
anchorOffset = $(match).offset().top - this.getFixedOffset();
|
||||||
|
$('html, body').animate({ scrollTop: anchorOffset });
|
||||||
|
|
||||||
|
// Add the state to history as-per normal anchor links
|
||||||
|
if (HISTORY_SUPPORT && pushToHistory) {
|
||||||
|
history.pushState({}, document.title, location.pathname + href);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return !!match;
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Attempt to scroll to the current location's hash.
|
||||||
|
*/
|
||||||
|
scrollToCurrent: function (e) {
|
||||||
|
if (this.scrollIfAnchor(window.location.hash) && e) {
|
||||||
|
e.preventDefault();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* If the click event's target was an anchor, fix the scroll position.
|
||||||
|
*/
|
||||||
|
delegateAnchors: function (e) {
|
||||||
|
var elem = e.target;
|
||||||
|
|
||||||
|
if (this.scrollIfAnchor(elem.getAttribute('href'), true)) {
|
||||||
|
e.preventDefault();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
$(document).ready($.proxy(anchorScrolls, 'init'));
|
||||||
|
})(window.document, window.history, window.location);
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
jQuery(window).on('load', function() {
|
jQuery(window).on('load', function() {
|
||||||
|
|
Loading…
Reference in a new issue