mirror of
https://github.com/ChenQihan666/MyBlog-Next.git
synced 2026-08-14 11:29:33 +08:00
feat: add scroll indicator in blog posts (#249)
This commit is contained in:
@@ -48,6 +48,11 @@ const layoutProps = {
|
|||||||
|
|
||||||
<Layout {...layoutProps}>
|
<Layout {...layoutProps}>
|
||||||
<Header />
|
<Header />
|
||||||
|
|
||||||
|
<!-- <div class="progress-container fixed top-0 z-10 h-1 w-full bg-skin-fill">
|
||||||
|
<div class="progress-bar h-1 w-0 bg-skin-accent" id="myBar"></div>
|
||||||
|
</div> -->
|
||||||
|
|
||||||
<div class="mx-auto flex w-full max-w-3xl justify-start px-2">
|
<div class="mx-auto flex w-full max-w-3xl justify-start px-2">
|
||||||
<button
|
<button
|
||||||
class="focus-outline mb-2 mt-8 flex hover:opacity-75"
|
class="focus-outline mb-2 mt-8 flex hover:opacity-75"
|
||||||
@@ -107,6 +112,45 @@ const layoutProps = {
|
|||||||
</style>
|
</style>
|
||||||
|
|
||||||
<script is:inline>
|
<script is:inline>
|
||||||
|
/** Create a progress indicator
|
||||||
|
* at the top */
|
||||||
|
function createProgressBar() {
|
||||||
|
// Create the main container div
|
||||||
|
const progressContainer = document.createElement("div");
|
||||||
|
progressContainer.className =
|
||||||
|
"progress-container fixed top-0 z-10 h-1 w-full bg-skin-fill";
|
||||||
|
|
||||||
|
// Create the progress bar div
|
||||||
|
const progressBar = document.createElement("div");
|
||||||
|
progressBar.className = "progress-bar h-1 w-0 bg-skin-accent";
|
||||||
|
progressBar.id = "myBar";
|
||||||
|
|
||||||
|
// Append the progress bar to the progress container
|
||||||
|
progressContainer.appendChild(progressBar);
|
||||||
|
|
||||||
|
// Append the progress container to the document body or any other desired parent element
|
||||||
|
document.body.appendChild(progressContainer);
|
||||||
|
}
|
||||||
|
createProgressBar();
|
||||||
|
|
||||||
|
/** Update the progress bar
|
||||||
|
* when user scrolls */
|
||||||
|
function updateScrollProgress() {
|
||||||
|
const winScroll =
|
||||||
|
document.body.scrollTop || document.documentElement.scrollTop;
|
||||||
|
const height =
|
||||||
|
document.documentElement.scrollHeight -
|
||||||
|
document.documentElement.clientHeight;
|
||||||
|
const scrolled = (winScroll / height) * 100;
|
||||||
|
if (document) {
|
||||||
|
const myBar = document.getElementById("myBar");
|
||||||
|
if (myBar) {
|
||||||
|
myBar.style.width = scrolled + "%";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
document.addEventListener("scroll", updateScrollProgress);
|
||||||
|
|
||||||
/** Attaches links to headings in the document,
|
/** Attaches links to headings in the document,
|
||||||
* allowing sharing of sections easily */
|
* allowing sharing of sections easily */
|
||||||
function addHeadingLinks() {
|
function addHeadingLinks() {
|
||||||
|
|||||||
Reference in New Issue
Block a user