• [自定义 Vue 组件] 小尾巴 Logo 组件 TailLogo


    文字归档于:https://www.yuque.com/u27599042/coding_star/apt6y731ybmxgu5g

    组件效果

    image.png
    image.png

    组件依赖

    自定义字符串工具函数 stringIsNull

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

    import {stringIsNull} from "@/utils/string_utils.js"
    
    • 1
    /**
     * 判断是否为字符串类型
     * @param str 需要判断的变量
     * @returns {boolean} true:字符串类型;false:非字符串类型
     */
    export function isString(str) {
        return !(str === null) && !(str === undefined) && typeof(str) === 'string'
    }
    
    /**
     * 判断一个字符串是否为空。
     * 当传入的参数为 null 或 undefined 或 不为字符串 或 字符串的长度小于等于0,则该字符串为空;
     * 否则,字符串不为空
     * @param str 需要进行判断的字符串
     * @returns {boolean} true:空;false:非空
     */
    export function stringIsNull(str) {
        return !(isString(str)) || str.length <= 0
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    项目环境变量

    项目根目录/.env.dev,此依赖非必要,如果环境文件中无相应的配置项,则在使用 TailDropDown 组件时,就必须传递 logoImageUrl、logoText

    /**
     * 获取环境变量
     * @type {ImportMetaEnv}
     */
    const env = import.meta.env
    const LOGO_IMAGE_URL = env?.VITE_LOGO_IMAGE_URL // logo 图片 url
    const LOGO_TEXT = env?.VITE_LOGO_TEXT // logo text
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    CSS 变量

    src/styles/theme_styles/dark.csssrc/styles/theme_styles/light.css,本组件提供了两种主题(暗色与亮色)的 CSS 变量

    :root[class*='dark'] {
        /*
         * 小尾巴 logo 组件样式变量
         */
        /* 小尾巴 logo 组件背景颜色 */
        --tail-logo-bgc: #454545;
        /* 小尾巴 logo 组件 logo 文字字体 */
        --tail-logo-text-font-family: RJTHFH, serif;
        /* 小尾巴 logo 组件 logo 文字颜色 */
        --tail-logo-text-font-color: #efefef;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    :root[class*='light'] {
        /*
         * 小尾巴 logo 组件样式变量
         */
        /* 小尾巴 logo 组件背景颜色 */
        --tail-logo-bgc: #efefef66;
        /* 小尾巴 logo 组件 logo 文字字体 */
        --tail-logo-text-font-family: RJTHFH, serif;
        /* 小尾巴 logo 组件 logo 文字颜色 */
        --tail-logo-text-font-color: #333333;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    组件属性参数

    const props = defineProps({
      // logo 组件点击事件处理函数
      logoClickHandler: {type: Function, default: () => {}},
      // 是否开启展示 logo 图片
      enableLogoImage: {type: Boolean, default: true},
      // logo 图片大小
      logoImageSize: {type: String, default: '3rem'},
      // logo 图片 url
      logoImageUrl: {type: String, default: ''},
      // 是否开启展示 logo 文本
      enableLogoText: {type: Boolean, default: true},
      // logo 文本
      logoText: {type: String, default: ''},
    })
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    组件使用示例

    <TailLogo
        :enable-logo-image="true"
        :logo-image-url="'/images/logo.png'"
        :logo-text="'小尾巴书城'"
    >TailLogo>
    
    • 1
    • 2
    • 3
    • 4
    • 5

    image.png
    image.png

    组件源码

    <script setup>
    import {stringIsNull} from "@/utils/string_utils.js"
    
    /**
     * 获取环境变量
     * @type {ImportMetaEnv}
     */
    const env = import.meta.env
    const LOGO_IMAGE_URL = env?.VITE_LOGO_IMAGE_URL // logo 图片 url
    const LOGO_TEXT = env?.VITE_LOGO_TEXT // logo text
    
    /**
     * 接收组件传递参数
     */
    const props = defineProps({
      // logo 组件点击事件处理函数
      logoClickHandler: {type: Function, default: () => {}},
      // 是否开启展示 logo 图片
      enableLogoImage: {type: Boolean, default: true},
      // logo 图片大小
      logoImageSize: {type: String, default: '3rem'},
      // logo 图片 url
      logoImageUrl: {type: String, default: ''},
      // 是否开启展示 logo 文本
      enableLogoText: {type: Boolean, default: true},
      // logo 文本
      logoText: {type: String, default: ''},
    })
    script>
    
    <template>
      
      <div class="tail-logo-box" @click="logoClickHandler">
        
        <img
            v-if="enableLogoImage"
            :src="stringIsNull(logoImageUrl) ? LOGO_IMAGE_URL : logoImageUrl"
            alt="logo"
            :style="{height: logoImageSize}"
        />
        
        <span v-if="enableLogoText">
          {{ stringIsNull(logoText) ? LOGO_TEXT : logoText }}
        span>
      div>
    template>
    
    <style scoped lang="scss">
    /*
     * 小尾巴 logo 组件
     */
    .tail-logo-box {
      background-color: var(--tail-logo-bgc);
      cursor: pointer;
      display: flex;
      justify-content: center;
      align-items: center;
    
      /*
       * logo 图片
       */
      img {
        margin-right: 0.5rem;
      }
    
      /*
       * logo 文本
       */
      span {
        font-family: var(--tail-logo-text-font-family); // 锐字太空混元像素简繁-闪 超黑 字体
        font-size: 2rem;
        white-space: nowrap;
        color: var(--tail-logo-text-font-color);
      }
    }
    style>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
  • 相关阅读:
    matlab自动生成FPGA rom源码
    大数据时代精准营销是提升品牌竞争力的核心
    建筑设计资质怎么办理,建筑设计乙级资质申请条件有哪些
    Java面向对象三大特征——继承extends
    Android---DVM以及ART对JVM进行优化
    SeataAT模式如何达到读已提交的隔离级别
    [ICS] Inferno(地狱) ETH/IP未授权访问,远程控制工控设备利用工具
    海外商城小程序开发方案
    【Leetcode】 17. 电话号码的字母组合
    【MyBatis】二、入门程序
  • 原文地址:https://blog.csdn.net/m0_53022813/article/details/133934869