博客导航条效果

在这里插入图片描述
学习来自风`宇Blog

  • 上浮菜单的效果,如果使用transition的话,会发现刚开始的display为none,也就是一开始是没有初始值的,也就不能用过渡。所以使用动画来解决这个问题
  • 当鼠标hover悬浮在主菜单上时,子菜单与主菜单之间还有些距离,当从主菜单移动到子菜单的过程中,由于不满足hover条件了,还没移到子菜单,子菜单就隐藏了,这个用伪类比较方便解决,给主菜单添加伪类,让它占据子菜单与主菜单之间还有些距离这部分空间,就满足了hover条件了
  • 在vue中,尽量用类名来做效果。
<style lang="scss">
@import url('https://fonts.googleapis.com/css2?family=Cairo:wght@300&family=Delicious+Handrawn&family=Noto+Sans+Mono:wght@300&display=swap');
@import url('//at.alicdn.com/t/c/font_4004562_9wrsonssnio.css');


body {
      
      
    margin: 0;
    min-height: 100vh;
    background-color: #b5b5b5;
    background-image: url(@/assets/bg.jpg);
    background-repeat: no-repeat;
    background-size: cover;
    background-position: center;

}

ul,
li {
      
      
    margin: 0;
    padding: 0;
    list-style: none;
}

a {
      
      
    text-decoration: none;
    color: #4c4948;
}

.non-bg-color {
      
      
    background-color: rgba(255, 255, 255, 0) !important;
}

.non-bg-color .nav-bar-right>ul>li>a {
      
      
    color: #e1e1e3 !important;
}

/* 子菜单上浮效果 */
@keyframes submenu-moveUp {
      
      
    0% {
      
      
        transform: translateY(20px);
        opacity: 0;
    }

    100% {
      
      
        transform: translateY(0px);
        opacity: 1;
    }
}

.nav-bar {
      
      
    box-sizing: border-box;
    position: fixed;
    width: 100%;
    padding: 0 40px 0 40px;
    top: 0;
    background-color: rgba(255, 255, 255, 0.8);
    height: 60px;

    transition: all 0.5s;

    display: flex;
    align-items: center;
    justify-content: space-between;

    &.up {
      
      
        top: -60px
    }


    .nav-bar-left {
      
      
        .site-name {
      
      
            font-size: 32px;
            color: #fff;
        }
    }

    .nav-bar-right {
      
      
        &>ul {
      
      
            display: flex;

            &>li {
      
      
                padding: 5px;
                margin: 0 2px;

                position: relative;

                a.menu-a {
      
      

                    display: flex;
                    align-items: center;
                    position: relative;

                    i {
      
      
                        margin-right: 3px;
                        margin-top: 3px;
                        font-size: 16px;
                    }

                    span {
      
      
                        font-size: 16px;
                        /* 不要换行 */
                        display: inline-block;
                        width: max-content;
                    }

                    &::before {
      
      
                        content: '';
                        position: absolute;
                        bottom: -5px;
                        left: 0;
                        height: 2px;
                        width: 100%;
                        background-color: #4ab1f4;
                        width: 0;
                        transition: all 0.28s;
                    }

                    &:hover::before {
      
      
                        display: block;
                        width: 100%;
                    }
                }

                &::before {
      
      
                    /* 添加在这里,让hover触发元素和隐藏元素之间的距离能覆盖到,让hover效果正常 */
                    content: '';
                    position: absolute;
                    width: 100%;
                    height: 18px;
                    // background-color: red;
                    bottom: -18px;
                }

                &:hover {
      
      
                    .sum-menu-ul {
      
      
                        display: block;
                        animation: submenu-moveUp 0.5s;
                    }
                }

                .sum-menu-ul {
      
      
                    position: absolute;
                    right: 0;
                    top: 36px;
                    width: max-content;
                    background-color: #fff;
                    line-height: 1.6em;
                    border-radius: 5px;
                    display: none;

                    i {
      
      
                        margin-right: 8px;
                    }

                    li {
      
      
                        padding: 5px 10px;

                        &:hover {
      
      
                            color: #4ab1f4;
                            background-color: #4ab0f3;
                        }

                        &:first-child {
      
      
                            border-radius: 6px 6px 0 0;
                        }

                        &:last-child {
      
      
                            border-radius: 0 0 6px 6px;
                        }
                    }
                }
            }
        }
    }

}
</style>
<template>
    <div>
        <div ref="navBar" class="nav-bar non-bg-color">
            <div class="nav-bar-left">
                <a class="site-name" href="#" style="font-family: 'Cairo', sans-serif;">pscool</a>
            </div>
            <div class="nav-bar-right">
                <ul>
                    <li>
                        <a class="menu-a" href="#">
                            <i class="iconfont icon-sousuo" style="font-weight: bold;"></i>
                            <span>搜索</span>
                        </a>
                    </li>
                    <li>
                        <a class="menu-a" href="#">
                            <i class="iconfont icon-shouye"></i>
                            <span>首页</span>
                        </a>
                    </li>
                    <li>
                        <a class="menu-a" href="#">
                            <i class="iconfont icon-faxian"></i>
                            <span>发现</span>
                            <i class="iconfont icon-a-xiala2"></i>
                        </a>
                        <ul class="sum-menu-ul">
                            <li class="sub-menu-li">
                                <a href="#">
                                    <i class="iconfont icon-xiangmuguidang" style="font-weight: bold;"></i>
                                    <span>归档</span>
                                </a>
                            </li>
                            <li class="sub-menu">
                                <a href="#">
                                    <i class="iconfont icon-icon_category"></i>
                                    <span>分类</span>
                                </a>
                            </li>
                            <li class="sub-menu">
                                <a href="#">
                                    <i class="iconfont icon-biaoqian"></i>
                                    <span>标签</span>
                                </a>
                            </li>
                        </ul>
                    </li>
                    <li>
                        <a class="menu-a" href="#">
                            <i class="iconfont icon-yingyong"></i>
                            <span>娱乐</span>
                            <i class="iconfont icon-a-xiala2"></i>
                        </a>
                        <ul class="sum-menu-ul">
                            <li class="sub-menu-li">
                                <a href="#">
                                    <i class="iconfont icon-xiangce" style="font-weight: bold;"></i>
                                    <span>相册</span>
                                </a>
                            </li>
                            <li class="sub-menu">
                                <a href="#">
                                    <i class="iconfont icon-pinglun"></i>
                                    <span>说说</span>
                                </a>
                            </li>
                        </ul>
                    </li>
                    <li>
                        <a class="menu-a" href="#">
                            <i class="iconfont icon-lianjie" style="font-weight: bold;font-size: 18px;"></i>
                            <span>友链</span>
                        </a>
                    </li>
                    <li>
                        <a class="menu-a" href="#">
                            <i class="iconfont icon-zhifeiji"></i>
                            <span>关于</span>
                        </a>
                    </li>
                    <li>
                        <a class="menu-a" href="#">
                            <i class="iconfont icon-liuyan"></i>
                            <span>留言</span>
                        </a>
                    </li>
                    <li>
                        <a class="menu-a" href="#">
                            <i class="iconfont icon-denglu"></i>
                            <span>登录</span>
                        </a>
                    </li>

                </ul>
            </div>
        </div>

        <div class="content" style="height: 500px;">

        </div>
    </div>
</template>

<script>

export default {
      
      
    name: 'navbar',
    data() {
      
      
        return {
      
      
            preScrollTop: null,
        }
    },
    mounted() {
      
      
        window.addEventListener('scroll', this.onScroll)
    },
    destroyed() {
      
      
        window.removeEventListener('scroll', this.onScroll)
    },
    methods: {
      
      
        onScroll() {
      
      
            let scrollTop =
                window.pageYOffset ||
                document.documentElement.scrollTop ||
                document.body.scrollTop;

            if (scrollTop < 1) {
      
      
                this.$refs['navBar'].classList.add('non-bg-color')
            } else {
      
      
                this.$refs['navBar'].classList.remove('non-bg-color')
            }

            if (!this.preScrollTop) {
      
      
                this.preScrollTop = scrollTop
                return
            } else {
      
      
                if (scrollTop > this.preScrollTop) {
      
      
                    console.log('向下');
                    this.$refs['navBar'].classList.add('up')
                } else {
      
      
                    console.log('向上');
                    this.$refs['navBar'].classList.remove('up')
                }
                this.preScrollTop = scrollTop
            }
        }
    },
    components: {
      
      
    }
}
</script>

猜你喜欢

转载自blog.csdn.net/qq_16992475/article/details/130067304