|
|
@@ -366,66 +366,6 @@ onBeforeUnmount(() => {
|
|
|
</div>
|
|
|
</div>
|
|
|
</div>
|
|
|
-
|
|
|
- <!-- <div class="tabContentLayout" v-else>
|
|
|
- <div class="tabContentFeatures">
|
|
|
- <div
|
|
|
- v-for="(it, idx) in p.items"
|
|
|
- :key="it.title"
|
|
|
- class="tabFeatureRow"
|
|
|
- :class="{
|
|
|
- 'is-highlighted': idx === currentImageIndex[p.key],
|
|
|
- }"
|
|
|
- @mouseenter="
|
|
|
- () => {
|
|
|
- stopImageCarousel(p.key);
|
|
|
- currentImageIndex[p.key] = idx;
|
|
|
- }
|
|
|
- "
|
|
|
- @mouseleave="() => startImageCarousel(p.key, p.items.length)"
|
|
|
- >
|
|
|
- <div class="tabFeatureMain">
|
|
|
- <div class="featureTitle">{{ it.title }}</div>
|
|
|
- <div class="muted featureDesc">{{ it.desc }}</div>
|
|
|
- </div>
|
|
|
- </div>
|
|
|
- </div>
|
|
|
- <div class="tabContentImage">
|
|
|
- <div class="imageCarouselWrapper">
|
|
|
- <div class="imageCarouselViewport">
|
|
|
- <Transition name="image-carousel-slide" mode="out-in">
|
|
|
- <div
|
|
|
- v-if="p.items?.length"
|
|
|
- :key="`${p.key}-${getActiveIndex(p.key, p.items.length)}`"
|
|
|
- class="imageCarouselSlide"
|
|
|
- >
|
|
|
- <img
|
|
|
- :src="getActiveImageSrc(p)"
|
|
|
- :alt="getActiveImageAlt(p)"
|
|
|
- loading="lazy"
|
|
|
- decoding="async"
|
|
|
- />
|
|
|
- </div>
|
|
|
- </Transition>
|
|
|
- </div>
|
|
|
- </div>
|
|
|
-
|
|
|
- <div class="carouselIndicators">
|
|
|
- <button
|
|
|
- v-for="(item, idx) in p.items"
|
|
|
- :key="idx"
|
|
|
- :class="[
|
|
|
- 'indicator',
|
|
|
- { 'is-active': idx === currentImageIndex[p.key] },
|
|
|
- ]"
|
|
|
- @click="goToImageSlide(p.key, idx, p.items.length)"
|
|
|
- @mouseenter="stopImageCarousel(p.key)"
|
|
|
- @mouseleave="startImageCarousel(p.key, p.items.length)"
|
|
|
- :aria-label="`第${idx + 1}张图片`"
|
|
|
- ></button>
|
|
|
- </div>
|
|
|
- </div>
|
|
|
- </div> -->
|
|
|
</section>
|
|
|
</div>
|
|
|
</div>
|
|
|
@@ -906,6 +846,16 @@ onBeforeUnmount(() => {
|
|
|
box-shadow: 0 0 0 3px rgba(7, 102, 205, 0.24);
|
|
|
}
|
|
|
|
|
|
+/* .tabFeatureRow:hover {
|
|
|
+ transform: translateY(-2px);
|
|
|
+ box-shadow: 0 12px 32px rgba(2, 6, 23, 0.12);
|
|
|
+} */
|
|
|
+
|
|
|
+/* .tabFeatureRow.is-highlighted {
|
|
|
+ border-left: 3px solid #0766cd;
|
|
|
+ box-shadow: 0 8px 24px rgba(7, 102, 205, 0.15);
|
|
|
+} */
|
|
|
+
|
|
|
.tabFeatureRow {
|
|
|
padding: 28px;
|
|
|
background: #fff;
|
|
|
@@ -917,19 +867,39 @@ onBeforeUnmount(() => {
|
|
|
box-shadow 180ms ease,
|
|
|
border-left 0.3s ease;
|
|
|
border-left: 3px solid transparent;
|
|
|
+ position: relative;
|
|
|
}
|
|
|
|
|
|
-.tabFeatureRow:hover {
|
|
|
- transform: translateY(-2px);
|
|
|
- box-shadow: 0 12px 32px rgba(2, 6, 23, 0.12);
|
|
|
+.tabFeatureRow.is-highlighted {
|
|
|
+ /* border-left: none; */
|
|
|
+ /* box-shadow:
|
|
|
+ 0 8px 24px rgba(7, 102, 205, 0.15),
|
|
|
+ inset 0 0 0 1px rgba(7, 102, 205, 0.1); */
|
|
|
}
|
|
|
|
|
|
-.tabFeatureRow.is-highlighted {
|
|
|
- border-left: 3px solid #0766cd;
|
|
|
- box-shadow: 0 8px 24px rgba(7, 102, 205, 0.15);
|
|
|
+.tabFeatureRow.is-highlighted::before {
|
|
|
+ content: "";
|
|
|
+ position: absolute;
|
|
|
+ top: 0;
|
|
|
+ left: 20px;
|
|
|
+ width: calc(100% - 40px);
|
|
|
+ height: 4px;
|
|
|
+ background: linear-gradient(90deg, #0766cd, #0d4a9e);
|
|
|
+ border-radius: 2px 2px 0 0;
|
|
|
}
|
|
|
|
|
|
-/* ... existing code ... */
|
|
|
+.tabFeatureRow.is-highlighted::after {
|
|
|
+ content: "";
|
|
|
+ position: absolute;
|
|
|
+ bottom: -4px;
|
|
|
+ left: 50%;
|
|
|
+ transform: translateX(-50%);
|
|
|
+ width: 60px;
|
|
|
+ height: 4px;
|
|
|
+ background: linear-gradient(90deg, transparent, #0766cd, transparent);
|
|
|
+ border-radius: 2px;
|
|
|
+ opacity: 0.6;
|
|
|
+}
|
|
|
|
|
|
.tabContentImage {
|
|
|
/* border-radius: 16px; */
|