跳到主要内容

返回顶部小猫挂件

最后更新于:

返回顶部小猫挂件

image-20250509195046866

目录

[[toc]]

[toc]

简介

来给自己的Teek博客增加一个返回顶部小猫挂件功能。😊

版权

警告

本着开源共享、共同学习的精神:

本文是在 《Hyde Blog》博主的《返回顶部挂件》文章 基础上增加了一些自己的实际操作记录和修改,内容依旧属于原作者所有(感谢原作者分享的手把手文档💖💖💖)。转载无需和我联系,但请注明文章来源。如果侵权之处,请联系博主进行删除,谢谢。

环境

2025.5.9(已解决)

警告

次配置适用于Teek@1.1.4-2025.5.8版本(其它版本可自行测试)。

提示

自己开源的 《vitepress-theme-teek-one-public》网站模板。

此模板是在《Young Kbt blog》大佬开源项目《vitepress-theme-teek 》基础上修改为自己的风格而成,感谢大佬开发得主题,大佬威武。❤️❤️

安装

(1)新建组件

创建docs\.vitepress\theme\components\BackToTop.vue文件,添加如下代码:

  1<template>
  2    <div
  3      class="back_to_top"
  4      ref="toTop"
  5      :style="{
  6        top: top + 'px',
  7      }"
  8      @click="topTop"
  9    ></div>
 10  </template>
 11  <script setup lang="ts" name="BackToTop">
 12  import { useRoute } from "vitepress";
 13  import { nextTick, onUnmounted, ref, watch } from "vue";
 14  import { TkMessage } from "vitepress-theme-teek";
 15  
 16  const route = useRoute();
 17  const toTop = ref();
 18  const top = ref<number>(-900);
 19  const offsetHeight = ref<number>(0);
 20  
 21  const topTop = () => {
 22    top.value = -900;
 23    window.scrollTo({
 24      top: 0,
 25      behavior: "smooth",
 26      // @ts-ignore Safari兼容
 27      ...(typeof CSS !== "undefined" && CSS.supports("scroll-behavior", "smooth")
 28        ? {}
 29        : { left: 0 }),
 30    });
 31    TkMessage.success({
 32      message: "已达到顶部🎉",
 33      duration: 3000,
 34    });
 35  };
 36  
 37  let animationFrame: number | null = null;
 38  
 39  const backToTop = () => {
 40    if (!animationFrame) {
 41      animationFrame = requestAnimationFrame(() => {
 42        offsetHeight.value = document.documentElement.offsetHeight;
 43        const scrollTop = document.documentElement.scrollTop;
 44        if (scrollTop < 100) {
 45          top.value = -900;
 46        } else {
 47          top.value = (900 - (scrollTop / offsetHeight.value) * 900) * -1;
 48        }
 49        animationFrame = null;
 50      });
 51    }
 52  };
 53  
 54  window.addEventListener("scroll", backToTop);
 55  
 56  onUnmounted(() => {
 57    window.removeEventListener("scroll", backToTop);
 58  });
 59  
 60  watch(
 61    () => route.path,
 62    () => {
 63      nextTick(() => {
 64        offsetHeight.value = document.querySelector("html")!.offsetHeight;
 65      });
 66    }
 67  );
 68  </script>
 69  <style lang="scss" scoped>
 70  @keyframes float {
 71    0% {
 72      -webkit-transform: translateY(0);
 73      -ms-transform: translateY(0);
 74      transform: translateY(0);
 75    }
 76  
 77    50% {
 78      -webkit-transform: translateY(-10px);
 79      -ms-transform: translateY(-10px);
 80      transform: translateY(-10px);
 81    }
 82  
 83    100% {
 84      -webkit-transform: translateY(0);
 85      -ms-transform: translateY(0);
 86      transform: translateY(0);
 87    }
 88  }
 89  
 90  .back_to_top {
 91    cursor: pointer;
 92    position: fixed;
 93    right: 80px;
 94    top: -900px;
 95    z-index: 1000;
 96    width: 70px;
 97    height: 900px;
 98    background: url("/backToTop/scroll.gif");
 99    transition: all 0.5s ease-in-out;
100    opacity: 1;
101  
102    // 新增移动端隐藏
103    @media (max-width: 768px) {
104      background: none;
105    }
106  
107    &:hover {
108      animation: float 2s linear infinite;
109    }
110  }
111  </style>

(2)注册组件

编辑docs\.vitepress\theme\components\TeekLayoutProvider.vue文件,添加如下代码:(具体代码可从我开源库Teek-one里获取)

1import BackToTop from "./BackToTop.vue"; //导入 返回顶部小猫挂件
2
3
4  <!-- 返回顶部小猫挂件 -->
5  <BackToTop />

image-20250509195255524

image-20250509195318082

(3)运行测试

效果

每切换到一个网页时,会弹出如下弹框哦,有趣的特性。

image-20250509195337835

关于我

我的博客主旨:

  • 排版美观,语言精炼;
  • 文档即手册,步骤明细,拒绝埋坑,提供源码;
  • 本人实战文档都是亲测成功的,各位小伙伴在实际操作过程中如有什么疑问,可随时联系本人帮您解决问题,让我们一起进步!

🍀 个人网站

image-20250109220325748

🍀 微信二维码

x2675263825 (舍得), qq:2675263825。

image-20230107215114763

🍀 微信公众号

《云原生架构师实战》

image-20230107215126971

🍀 csdn

https://blog.csdn.net/weixin_39246554?spm=1010.2135.3001.5421

image-20230107215149885

🍀 知乎

https://www.zhihu.com/people/foryouone

image-20230107215203185

最后

如果你还有疑惑,可以去我的网站查看更多内容或者联系我帮忙查看。

如果你有更好的方式,评论区留言告诉我。谢谢!

好了,本次就到这里了,感谢大家阅读,最后祝大家生活快乐,每天都过的有意义哦,我们下期见!

最新文章

文档导航