Skip to content

Commit

Permalink
Fix the compatibility of the smooth scrolling in Safari
Browse files Browse the repository at this point in the history
Safari(at least on v14) does not support CSS property `scroll-behavior`
  • Loading branch information
cotes2020 committed Dec 27, 2020
1 parent 081e77d commit aa6c335
Show file tree
Hide file tree
Showing 5 changed files with 50 additions and 2 deletions.
1 change: 0 additions & 1 deletion assets/css/_addon/main.scss
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,6 @@ html[mode=dark] {

:root {
font-size: 16px;
scroll-behavior: smooth;
}

body {
Expand Down
4 changes: 3 additions & 1 deletion assets/js/_commons/back-to-top.js
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,9 @@ $(function() {
});

$("#back-to-top").click(() => {
$("body,html").scrollTop(0);
$("body,html").animate({
scrollTop: 0
}, 800);
return false;
});
});
42 changes: 42 additions & 0 deletions assets/js/_utils/smooth-scroll.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
/*
Safari doesn't support CSS `scroll-behavior: smooth`,
so here is a compatible sollution for all browser to smooth scrolling
See: <https://css-tricks.com/snippets/jquery/smooth-scrolling/>
Warning: It must be called after all `<a>` tags (e.g., the dynamic TOC) are ready.
*/

$(function() {
$("a[href*='#']")
.not("[href='#']")
.not("[href='#0']")
.click(function(event) {

if (location.pathname.replace(/^\//, "") === this.pathname.replace(/^\//, "")
&& location.hostname === this.hostname) {

var target = $(decodeURI(this.hash));

if (target.length) {

event.preventDefault();

$("html, body").animate({
scrollTop: target.offset().top
}, 800, function() {
var $target = $(target);
$target.focus();

if ($target.is(":focus")) { /* Checking if the target was focused */
return false;
} else {
$target.attr("tabindex", "-1"); /* Adding tabindex for elements not focusable */
$target.focus(); /* Set focus again */
}
});
}
}

}); /* click() */
});
2 changes: 2 additions & 0 deletions assets/js/page.min.js
Original file line number Diff line number Diff line change
Expand Up @@ -9,3 +9,5 @@ layout: compress
---

{% include_relative _commons.js %}

{% include_relative _utils/smooth-scroll.js %}
3 changes: 3 additions & 0 deletions assets/js/post.min.js
Original file line number Diff line number Diff line change
Expand Up @@ -17,3 +17,6 @@ layout: compress
{% include_relative _utils/img-hyperlink.js %}

{% include_relative _utils/lang-badge.js %}

{% comment %} `smooth-scroll.js` must be called after ToC is ready {% endcomment %}
{% include_relative _utils/smooth-scroll.js %}

0 comments on commit aa6c335

Please sign in to comment.