Header.vue 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. <template>
  2. <div :class="['header', navBg ? 'navBg' : '']">
  3. <div class="header-logo">
  4. <img class="header-logo-img" src="./../public/images/header-logo.png" alt="" />
  5. </div>
  6. <div class="header-nav">
  7. <div class="nav-item">
  8. <NuxtLink :to="{ path: '/' }">首页</NuxtLink>
  9. </div>
  10. <div class="nav-item">
  11. <NuxtLink :to="{ path: '/products/666' }">产品介绍</NuxtLink>
  12. </div>
  13. <div class="nav-item">
  14. <NuxtLink :to="{ path: 'solution' }">行业解决案例</NuxtLink>
  15. </div>
  16. <div class="nav-item">
  17. <NuxtLink :to="{ path: 'developer' }">开发者工具</NuxtLink>
  18. </div>
  19. <div class="nav-item">
  20. <NuxtLink :to="{ path: '/AboutUs' }">关于我们</NuxtLink>
  21. </div>
  22. </div>
  23. <div class="header-right">
  24. <div class="manage-btn">
  25. <img src="./../public/images/manage-icon.png" />
  26. <span>管理中心</span>
  27. </div>
  28. </div>
  29. </div>
  30. </template>
  31. <script lang="ts" setup>
  32. import { ref, onBeforeMount, onBeforeUnmount } from "vue";
  33. const navBg = ref(false);
  34. const handleScroll = () => {
  35. let num = window.scrollY;
  36. if (num > 50 && !navBg.value) {
  37. navBg.value = true;
  38. } else if (num <= 50 && navBg.value) {
  39. navBg.value = false;
  40. }
  41. };
  42. onBeforeMount(() => {
  43. window.addEventListener("scroll", handleScroll);
  44. });
  45. onBeforeUnmount(() => {
  46. window.removeEventListener("scroll", handleScroll);
  47. });
  48. </script>
  49. <style lang="scss" scoped>
  50. .navBg {
  51. background-color: #fff;
  52. }
  53. .header {
  54. width: 100%;
  55. height: var(--nav-height);
  56. position: fixed;
  57. left: 0;
  58. right: 0;
  59. top: 0;
  60. z-index: var(--header-z-index);
  61. padding: 0 var(--size-60);
  62. display: flex;
  63. flex-direction: row;
  64. justify-content: space-between;
  65. .header-logo {
  66. flex-shrink: 0;
  67. display: flex;
  68. flex-direction: row;
  69. align-items: center;
  70. .header-logo-img {
  71. width: 110px;
  72. height: 38px;
  73. object-fit: contain;
  74. }
  75. }
  76. .header-nav {
  77. flex: 1;
  78. padding: 0 var(--size-100);
  79. display: flex;
  80. align-items: stretch;
  81. .nav-item {
  82. display: flex;
  83. align-items: center;
  84. padding-right: 50px;
  85. cursor: pointer;
  86. font-size: 16px;
  87. font-family: Microsoft YaHei, Microsoft YaHei-Regular;
  88. font-weight: 400;
  89. text-align: left;
  90. color: #1a1a1a;
  91. line-height: 54px;
  92. }
  93. }
  94. .header-right {
  95. flex-shrink: 0;
  96. display: flex;
  97. align-items: center;
  98. cursor: pointer;
  99. .manage-btn {
  100. width: 147px;
  101. height: 35px;
  102. background: #006efe;
  103. border-radius: 18px;
  104. display: flex;
  105. flex-direction: row;
  106. justify-content: center;
  107. align-items: center;
  108. font-size: 16px;
  109. font-family: Microsoft YaHei, Microsoft YaHei-Regular;
  110. font-weight: 400;
  111. text-align: left;
  112. color: #ffffff;
  113. line-height: 54px;
  114. span {
  115. padding-left: 9px;
  116. }
  117. }
  118. }
  119. }
  120. </style>