[自定义 Vue 组件] 小尾巴顶部导航栏(2.0) TailTopNav

这篇具有很好参考价值的文章主要介绍了[自定义 Vue 组件] 小尾巴顶部导航栏(2.0) TailTopNav。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

文章归档:https://www.yuque.com/u27599042/coding_star/oglrqteg8fzvvzn0

[自定义 Vue 组件] 响应式顶部导航栏(1.0) TopNav:https://www.yuque.com/u27599042/coding_star/hzltsltxgavwx8u2

组件效果示例

[自定义 Vue 组件] 小尾巴顶部导航栏(2.0) TailTopNav,小尾巴的编程知识星球,vue.js,前端,javascript,前端框架,vue,web,组件
[自定义 Vue 组件] 小尾巴顶部导航栏(2.0) TailTopNav,小尾巴的编程知识星球,vue.js,前端,javascript,前端框架,vue,web,组件

组件所依赖的子组件

  1. [自定义 Vue 组件] 小尾巴 Logo 组件(2.0) TailLogo:https://www.yuque.com/u27599042/coding_star/mluie83zdzaf40sy
  2. [自定义 Vue 组件] 小尾巴下拉菜单组件(2.0) TailDropDown:https://www.yuque.com/u27599042/coding_star/kcoem6dgyn8drglb

组件所依赖第三方库

@vueuse/core

pnpm i @vueuse/core

组件所依赖的 CSS 变量

在 src 目录下,创建 styles 目录,在其中创建 tailComponentsThemeStyles 目录,在 tailComponentsThemeStyles 目录中新建 light.css 与 dark.css 文件,在其中声明组件所依赖的和主题样式相关的 CSS 变量

/*
 * 和小尾巴组件相关的亮色主题样式 CSS 变量
 */
:root[class*='light'] {
    /*
     * 小尾巴顶部导航栏组件样式变量
     */
    /* 小尾巴顶部导航栏组件背景颜色 */
    --tail-top-nav-bgc: #efefef99;
    /* 小尾巴顶部导航栏组件文字颜色 */
    --tail-top-nav-font-color: #333333;
}
/*
 * 和小尾巴组件相关的暗色主题样式 CSS 变量
 */
:root[class*='dark'] {
    /*
     * 小尾巴顶部导航栏组件样式变量
     */
    /* 小尾巴顶部导航栏组件背景颜色 */
    --tail-top-nav-bgc: #454545;
    /* 小尾巴顶部导航栏组件文字颜色 */
    --tail-top-nav-font-color: #efefef;
}

在 index.html 文件中的 html 元素上添加 light 或 dark 类名

<html lang="zh-CN" class="light">

在 main.js 文件中引入组件所依赖的和主题样式相关的 CSS 变量

vue 项目中配置 src 目录别名:https://www.yuque.com/u27599042/coding_star/ogu2bhefy1fvahfv

import '@/styles/tailComponentsThemeStyles/light.css'
import '@/styles/tailComponentsThemeStyles/dark.css'

配置 sass 预处理

https://www.yuque.com/u27599042/coding_star/ua8sgyngldtaa2re

组件源码

在 src/components 目录下,创建 TailTopNav.vue 文件,在其中编写组件文章来源地址https://www.toymoban.com/news/detail-745101.html

<script setup>
import {useResizeObserver} from '@vueuse/core'
import {ref, onMounted} from 'vue'

/**
 * 接收父组件传递的参数
 * @type {Prettify<Readonly<ExtractPropTypes<{}>>>}
 */
const props = defineProps({
  // 小尾巴侧边导航栏组件展示按钮点击事件处理器函数
  sliderNavDisplayBtnClickHandler: {type: Function, default: () => {}},
})

/**
 * 实现导航栏响应式
 * @type {null}
 */
// logo 元素宽
let logoEleWidth = null
// 导航栏选项元素宽
let navItemsEleWidth = null
onMounted(() => {
  // 获取 logo 元素宽
  logoEleWidth = document.querySelector('.tail-top-nav .tail-top-nav-logo')?.clientWidth
  // 获取导航栏选项元素宽
  navItemsEleWidth = document.querySelector('.tail-top-nav .tail-top-nav-items')?.clientWidth
})
// 用于控制导航栏选项是否显示
const navItemsIsShow = ref(true)
// 顶部导航栏元素引用
const topNavRef = ref(null)
// 监听顶部导航栏元素内容和边框尺寸的变化
useResizeObserver(topNavRef, (entries) => {
  const entry = entries[0]
  // 获取顶部导航栏元素宽
  const {width} = entry.contentRect
  // 当顶部导航栏元素的宽度小于 logo + 导航栏选项元素宽度之和时,导航栏选项隐藏,否则导航栏选项显示
  if (width <= logoEleWidth + navItemsEleWidth) navItemsIsShow.value = false
  else navItemsIsShow.value = true
})
</script>

<template>
  <!-- 小尾巴顶部导航组件 -->
  <div class="tail-top-nav" ref="topNavRef">
    <!-- 小尾巴顶部导航组件 logo -->
    <div class="tail-top-nav-logo">
      <slot name="topNavLogo"></slot>
    </div>
    <!-- 小尾巴顶部导航组件导航选项 -->
    <div
        v-if="navItemsIsShow"
        class="tail-top-nav-items"
    >
      <slot name="topNavItems"></slot>
    </div>
    <!-- 小尾巴侧边导航栏展示按钮 -->
    <div
        v-else
        class="tail-top-nav-slider-nav-display-btn"
        @click="sliderNavDisplayBtnClickHandler"
    >
      <slot name="sliderNavDisplayBtn"></slot>
    </div>
  </div>
</template>

<style scoped lang="scss">
/*
 * 小尾巴顶部导航组件
 */
.tail-top-nav {
  box-sizing: border-box;
  width: 100%;
  padding: 0.5rem 1rem;
  background-color: var(--tail-top-nav-bgc);
  display: flex;
  justify-content: space-between;
  align-items: center;

  /*
   * 小尾巴顶部导航组件 logo
   */
  .tail-top-nav-logo {

  }

  /*
   * 小尾巴顶部导航组件导航选项
   */
  .tail-top-nav-items {
    display: flex;
    justify-content: end;
    align-items: center;
  }

  /*
   * 小尾巴侧边导航栏展示按钮
   */
  .tail-top-nav-slider-nav-display-btn {
    height: 100%;
    padding: 0.5rem;
    cursor: pointer;
    transition: all 0.5s;
    display: flex;
    justify-content: center;
    align-items: center;
    color: var(--tail-top-nav-font-color);

    &:hover {
      transform: scale(1.15);
    }
  }
}
</style>

组件使用说明

props 组件属性

组件属性 组件属性说明 组件属性值类型 组件属性默认值
sliderNavDisplayBtnClickHandler 小尾巴侧边导航栏组件展示按钮点击事件处理器函数,侧边导航栏组件显示按钮在顶部导航栏导航项收缩后才会显示,与侧边导航栏组件 https://www.yuque.com/u27599042/coding_star/vory2h7cv59sho1c 配合实现响应式 Function () => {}

slot 插槽

插槽名称 插槽说明
topNavLogo 小尾巴顶部导航组件 logo,该插槽用户放置导航栏左部的 Logo
sliderNavDisplayBtn 小尾巴侧边导航栏展示按钮,该插槽用于放置侧边导航栏展示按钮

到了这里,关于[自定义 Vue 组件] 小尾巴顶部导航栏(2.0) TailTopNav的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 微信原生小程序自定义顶部导航

    都2023了,自定义顶部导航应该不是什么新鲜事了,这里只是简单记录下 微信自己也提供了自定义顶部导航 navigation-bar ,大概看了下,可配置的也不少,所以看需求了,如果简单可以采用微信提供的,老规矩,先看效果 状态栏高度(getSystemInfoSync),就是手机顶部网络那块的

    2024年02月15日
    浏览(30)
  • 小程序实现自定义顶部导航栏搜索框

    在实现前先将其组件化,方便复用, (底部有demo) Component(Object object) | 微信开放文档 \\\"component\\\": true, // 自定义组件声明 \\\"usingComponents\\\": {} // 可选项,用于引用别的组件 \\\"navigationStyle\\\": \\\"custom\\\"// 导航栏样式   default  默认样式   custom  自定义导航栏,只保留右上角胶囊按钮 接下

    2024年02月12日
    浏览(38)
  • uniapp小程序自定义顶部导航栏高度适配

    目录 自定义导航栏介绍: 自定义导航栏的使用 step1:取消默认的原生导航栏 step2:在页面中添加占位元素 自定义导航栏介绍:         一般用于图片等的填充或者其他特殊需求,如果使用纯色填充顶部栏可以直接使用navigationBarBackgroundColor完成 page.json文件: 效果: 自定义

    2024年02月11日
    浏览(35)
  • uniapp 小程序自定义导航栏计算状态栏(顶部)与导航栏(胶囊)高度

    uni.getMenuButtonBoundingClientRect() 参考链接 uni.getSystemInfo()参考链接

    2024年02月11日
    浏览(59)
  • 微信小程序自定义顶部导航,附加返回主页按钮

      目录 一、修改对应json文件 二、获取微信小程序原生顶部导航栏的高  三、获取胶囊的宽高 四、设置wxml页面样式  话不多说,先上效果!!!       首先,我们都知道,通过原生小程序是不具备左侧胶囊的效果的,所以在实现这个功能的时候一定要记得修改当前页的jso

    2024年02月04日
    浏览(36)
  • 小程序 WEUI 隐藏导航栏使用自定义导航栏时Toptips在顶部显示

    使用weui的toptips时候,我们的导航栏使用了自定义,高度根据系统来定的,然后使用form表单验证提示弹窗时,会在最上面被遮挡了。    需要使用weui ext-class 来实现穿透修改样式。 ext-class的top使用继承父元素的top即可 现在没被顶在最上面了

    2024年02月08日
    浏览(29)
  • 原声微信小程序自定义顶部导航栏 . 自定义navigationBar。 (单页面设置)

    本文实例为大家分享了微信小程序自定义导航栏的具体代码,供大家参考,具体内容如下 实现自定义大致需要以下?步骤: 1.在页面.JSON文件进行相关配置,以便去掉原生 备注:  navigationStyle(导航栏样式),参数: default = 默认样式,custom = 自定义样式。  2.在页面.js文件onLoad生命

    2024年02月09日
    浏览(47)
  • React Navigation顶部导航自定义左侧返回按钮图标和文案

     router/config.js:  back/Index.js:     参考链接: https://reactnavigation.org/docs/native-stack-navigator https://chat.xutongbao.top/

    2024年02月13日
    浏览(32)
  • 【微信小程序-原生开发】实用教程07 - Grid 宫格导航,详情页,侧边导航(含自定义页面顶部导航文字)

    【微信小程序-原生开发】实用教程 轮播图、分类页签 tab 、成员列表(含Tdesign升级,切换调试基础库,设置全局样式,配置组件按需注入,添加图片素材,wx:for,生命周期 onLoad)

    2024年02月09日
    浏览(76)
  • 前端Vue自定义等分底部菜单导航按钮 自适应文字宽度 可更改组件位置

    随着技术的发展,开发的复杂度也越来越高,传统开发方式将一个系统做成了整块应用,经常出现的情况就是一个小小的改动或者一个小功能的增加可能会引起整体逻辑的修改,造成牵一发而动全身。 通过组件化开发,可以有效实现单独开发,单独维护,而且他们之间可以随

    2024年02月12日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包