Vue实现导航栏吸顶效果

简介: Vue实现导航栏吸顶效果
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <title>Vue实现导航栏吸顶效果</title>
  </head>
  <body>
    <script src="static/js/vue.js"></script>

    <style>
      body {
        margin: 0;
      }

      /* 背景 */
      #app {
        height: 2000px;
        margin: 0 auto;
        background-color: #eeeeee;
      }

      /* 导航 */
      .nav {
        width: 100%;
        height: 30px;
        background-color: #666666;
      }

      /* 固定导航 */
      .fix-nav {
        position: fixed;
        top: 0;
        z-index: 999;
      }
    </style>

    <div id="app">
      <div id="nav" class="nav" :class="{'fix-nav': navBarFixed}"></div>
    </div>

    <script>
      const app = new Vue({
        el: "#app",

        data() {
          return {
            navBarFixed: false,
          };
        },

        mounted() {
          // 事件监听滚动条
          window.addEventListener("scroll", this.watchScroll);
        },

        destroyed() {
          // 移除事件监听
          window.removeEventListener("scroll", this.watchScroll);
        },

        methods: {
          watchScroll() {
            // 滚动的距离
            var scrollTop =
              window.pageYOffset ||
              document.documentElement.scrollTop ||
              document.body.scrollTop;

            // 容器的高度
            var offsetTop = document.querySelector("#nav").offsetHeight;

            console.log("scrollTop=>", scrollTop, "  offsetTop=>", offsetTop);

            //  滚动的距离如果大于了元素到顶部的距离时,实现吸顶效果
            if (scrollTop > offsetTop) {
              this.navBarFixed = true;
            } else {
              this.navBarFixed = false;
            }
          },
        },
      });
    </script>
  </body>
</html>

参考

Vue 事件监听实现导航栏吸顶效果(页面滚动后定位)

            </div>
目录
相关文章
|
前端开发 API
Axios请求成功和失败时分别执行哪个函数?
Axios请求成功和失败时分别执行哪个函数?
347 1
|
安全 前端开发 Java
基于springboot的微信公众号管理系统(支持多公众号接入)
基于springboot的微信公众号管理系统(支持多公众号接入)
412 2
|
JavaScript
Vue的vant notify组件报错Notify is not defined
Vue的vant notify组件报错Notify is not defined
192 0
|
安全 小程序 网络安全
https证书是什么?
https证书=SSL证书=数字证书 数字证书是一个经权威的CA (Certificate Authority) 证书授权中心发行的可以在互联网通讯中标志通讯各 方身份信息的一个数字认证,人们可以在网上用它来 识别对方的身份。数字证书采用公钥体制,即利用一 对互相匹配的密钥进行加密、解密。每个用户自己设 定一把特定的仅为本人所知的私有密钥(私钥),用 它进行解密和签名;同时设定一把公共密钥(公钥) 并由本人公开,为一组用户所共享,用于加密和验证 签名。
4197 0
|
关系型数据库 MySQL
mysql: error while loading shared libraries: libncurses.so.5: cannot open shared object file
mysql: error while loading shared libraries: libncurses.so.5: cannot open shared object file
838 0
|
12月前
|
安全
教育技术工具盘点:五大免费软件助力教师信息化
随着科技的发展,学校在管理、教学等方面逐步引入信息技术,提升教师专业技能。本文推荐了几款实用的教育技术工具,如草料二维码、101教育PPT、格式工厂、小猿口算和万彩动画大师,以提高教学效率。草料二维码适用于教学资源电子化、信息收集等工作,101教育PPT则提供丰富的PPT资源,方便教师备课和互动教学。其他工具也各具特色,助力教学创新。
397 10
教育技术工具盘点:五大免费软件助力教师信息化
|
缓存 JavaScript 前端开发
vue中使用keep-alive的问题
vue中使用keep-alive的问题
371 59
|
11月前
|
JavaScript API UED
vue.js怎么实现全屏显示功能
【10月更文挑战第7天】
375 1
|
11月前
|
前端开发 NoSQL Java
聊聊公众号联动扫码登录功能如何实现
大家好,我是V哥。本文介绍了如何通过微信公众号实现扫码登录功能,包括申请权限、生成二维码、用户授权、获取用户信息、建立会话等步骤。假设你已有一个Java后端应用,并完成了微信开发者平台的配置。文中提供了详细的代码示例,帮助你快速实现这一功能。
474 0
|
前端开发 API
vue3中Pinia的使用之actions
vue3中Pinia的使用之actions