Partnership.vue 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. <!--
  2. * @Author: LiZhiWei
  3. * @Date: 2026-01-20 10:51:08
  4. * @LastEditors: LiZhiWei
  5. * @LastEditTime: 2026-01-22 10:46:24
  6. * @Description:
  7. -->
  8. <template>
  9. <section
  10. id="partnership"
  11. ref="partnershipRef"
  12. class="partnership transition-all duration-1000 ease-out"
  13. :class="[isPartnershipVisible ? 'opacity-100 translate-y-0' : 'opacity-0 translate-y-50px']"
  14. >
  15. <div class="partnership-header">
  16. <div class="partnership-line-left"></div>
  17. <div class="partnership-title pf-sc-regular">与合作伙伴携手,深入产业共创价值</div>
  18. <div class="partnership-line-right"></div>
  19. </div>
  20. <div class="partnership-content">
  21. <inspira-marquee class="partnership-marquee-row1">
  22. <div v-for="partner in partnersRow1" :key="partner" class="partner-item">
  23. <img :src="partner" alt="" class="wh-full object-contain" />
  24. </div>
  25. </inspira-marquee>
  26. <InspiraMarquee reverse class="partnership-marquee-row2">
  27. <div v-for="partner in partnersRow2" :key="partner" class="partner-item">
  28. <img :src="partner" alt="" class="wh-full object-contain" />
  29. </div>
  30. </InspiraMarquee>
  31. <div class="partnership-mask-left"></div>
  32. <div class="partnership-mask-right"></div>
  33. </div>
  34. </section>
  35. </template>
  36. <script setup lang="ts">
  37. import { partnersRow1, partnersRow2 } from '@/constants/common'
  38. const partnershipRef = ref<HTMLElement | null>(null)
  39. const { isVisible: isPartnershipVisible } = useScrollReveal(partnershipRef)
  40. </script>
  41. <style scoped lang="scss">
  42. .partnership {
  43. @extend %landing-container;
  44. @media screen and (min-width: 1480px) {
  45. padding-left: calc((100vw - 1480px) / 2);
  46. padding-right: calc((100vw - 1480px) / 2);
  47. }
  48. @apply py-60px overflow-hidden;
  49. @apply lt-sm:py-60px lt-sm:px-0;
  50. }
  51. .partnership-header {
  52. @apply flex-center gap-32px mb-40px;
  53. @apply lt-sm:mb-40px lt-sm:gap-30px;
  54. }
  55. .partnership-line-left {
  56. @apply h-2px w-320px bg-[linear-gradient(90deg,transparent_0%,#E5E9F5_100%)];
  57. @apply lt-sm:w-85px;
  58. }
  59. .partnership-title {
  60. @apply text-center font-s-18px lh-21px text-#9CA0A7 whitespace-nowrap;
  61. @apply lt-sm:font-s-28px;
  62. }
  63. .partnership-line-right {
  64. @apply h-2px w-320px bg-[linear-gradient(90deg,#E5E9F5_0%,transparent_100%)];
  65. @apply lt-sm:w-85px;
  66. }
  67. .partnership-content {
  68. @apply relative flex flex-col gap-0px -mt-24px;
  69. }
  70. .partnership-marquee-row1 {
  71. @apply [--duration:80s] [--gap:24px] mb--31px;
  72. }
  73. .partnership-marquee-row2 {
  74. @apply [--duration:80s] [--delay:-20s] [--gap:24px];
  75. }
  76. .partnership-mask-left {
  77. @apply pointer-events-none absolute inset-y-0 left-0 w-1/4 bg-[linear-gradient(to_right,#fff,transparent)];
  78. }
  79. .partnership-mask-right {
  80. @apply pointer-events-none absolute inset-y-0 right-0 w-1/4 bg-[linear-gradient(to_left,#fff,transparent)];
  81. }
  82. .partner-item {
  83. @apply flex-center h-80px w-200px bg-white rounded-8px shadow-[0_2px_8px_2px_rgba(0,0,0,0.06)] px-24px;
  84. @apply lt-sm:h-105px lt-sm:w-290px;
  85. }
  86. </style>