美文网首页
记在Vue/nuxt中代替原导航栏,实现一个炫酷的右侧导航栏(D

记在Vue/nuxt中代替原导航栏,实现一个炫酷的右侧导航栏(D

作者: 好一只帅卤蛋 | 来源:发表于2020-04-08 00:47 被阅读0次

实现效果如图:

效果图

实现原理:

1. 将原右侧导航栏样式在全局css中改为常显示以及宽度为零。

body {
    background-color: #3c3c3c;
    overflow-x: hidden;
    overflow-y: scroll;
}

::-webkit-scrollbar {
    width: 0;
}

2. 在后缀为.vue的文件中或者在自定义的布局(nuxt中的layouts)中,加入这两个id

<template>
  <div>
    <!-- 导航栏上层样式 -->
    <div id="progressbar"></div>
    <!-- 导航栏底层背景 -->
    <div id="scrollPath"></div>
  </div>
</template>

3.在全局样式common.css中引入自定义导航栏的样式

/* 导航栏背景 */
#scrollPath {
    position: fixed;
    top: 0;
    right: 0;
    width: 10px;
    height: 100%;
    background-color: rgba(255, 255, 255, 0.068);
}
/* 导航栏样式 */
#progressbar {
    position: fixed;
    top: 0;
    right: 0;
    width: 10px;
    /* height: 100%; */
    background: linear-gradient(to top, red, blue);
    animation: animate 5s linear infinite;
}

@keyframes animate {
    0%, 100% {
        filter: hue-rotate(0deg);
    }
    50% {
        filter: hue-rotate(360deg);
    }
}

#progressbar::before {
    content: "";
    position: absolute;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
    background: linear-gradient(to top, red, blue);
    filter: blur(10px);
}

#progressbar::after {
    content: "";
    position: absolute;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
    background: linear-gradient(to top, red, blue);
    filter: blur(30px);
}

4.核心:用户获取划过的距离 除以 ( 页面内容总高度 减去 文档显示区高度 ),进行计算要显示导航栏占整个页面的百分比,替换高度,从而进行显示。

!!!坑:因为Vue中存在Dom渲染完成之后渲染数据,因此,在mounted()中执行导航栏计算方法,只能得到请求的页面数据未渲染之前的初始的高度,数据渲染之后和这里的高度不对应!

!!!解决方案:使用watch监听要渲染的数据,使用this.$nextTick(() => {});属性将回调延迟到下次 DOM 更新循环之后执行。

因为每个页面渲染的数据都不同,所以在每个后缀为.vue的页面中都要watch监听要渲染的数据。如果没有请求的页面数据,那直接将function中的内容放入mounted()中即可。

 watch: {
    "data": function() {
      this.$nextTick(() => {
        let progress = document.getElementById("progressbar");

        //innerheight 返回窗口的文档显示区的高度。
        //document.documentElement.scrollHeight——浏览器所有内容高度
        //window.pageYOffset 划过的距离

        let totalHeight = document.body.scrollHeight - window.innerHeight;

        window.onscroll = function() {

          let progressHeight = (window.pageYOffset / totalHeight) * 100;

          progress.style.height = progressHeight + "%";
        };
      });
    }
  },

相关文章

  • 记在Vue/nuxt中代替原导航栏,实现一个炫酷的右侧导航栏(D

    实现效果如图: 实现原理: 1. 将原右侧导航栏样式在全局css中改为常显示以及宽度为零。 2. 在后缀为.vu...

  • swift-导航栏

    swift-导航栏直接上代码 导航栏整体背景颜色 导航栏左侧按钮 自定义 导航栏左侧 隐藏 导航栏右侧图片 参考:...

  • 小程序自定义导航栏设置

    为了摆脱小程序单一的顶部导航栏样式,添加更为炫酷的导航栏 设置导航栏宽高 (bug更新,ios真机上出现部分手机获...

  • 移动端导航栏——交互基础篇

    1:导航栏位置 状态栏下面部分就是导航栏 京东导航栏:左侧logo,右侧扫一扫,消息 网易导航:左侧logo,右侧...

  • Redux入门级别操作演示

    简单用redux实现功能如下:点击左侧导航栏的时候,右侧的header头部相应的显示出左侧的导航栏 首先在实现功能...

  • iframe遇见的问题

    在项目中所实现的是,左侧为导航栏,点击左侧导航栏,右侧为一iframe引用进来的界面,iframe页面上按钮点击,...

  • Flutter---JiBottomBar底部导航栏实现2

    在Flutter---底部导航栏实现1中,底部导航栏使用BottomNavigationBar实现的,可能会有很多...

  • 导航栏透明

    在要实现透明导航栏的控制器中 viewWillAppear 中设置导航栏透明 在viewWillDisappear...

  • MoneyMemory记账应用1(Vue版)

    一、导航栏放到哪 1. 放到App.vue中:那么每个页面都会有导航栏,不用在其他组件中添加导航栏,缺点是如果有的...

  • Android

    顶部导航栏 仿京东搜索 顶部导航栏 今日头条导航栏 导航栏快速实现 瀑布流 搜索框带历史记录 tablayout ...

网友评论

      本文标题:记在Vue/nuxt中代替原导航栏,实现一个炫酷的右侧导航栏(D

      本文链接:https://www.haomeiwen.com/subject/hwiaphtx.html