uni-app swiperDot 轮播图指示点新增3D模式

发布于 1周前 作者 htzhanglong 来自 Uni-App

uni-app swiperDot 轮播图指示点新增3D模式

swiperDot 轮播图指示点新增3D模式

1 回复

uni-app 中,swiper 组件的 dot 指示点默认是二维平面的样式。如果你想实现一个3D模式的指示点效果,可以通过自定义指示点样式和使用 CSS3 的3D变换属性来实现。以下是一个示例代码,展示如何在 uni-app 中实现3D模式的轮播图指示点。

1. 修改 swiper 组件

首先,在 swiper 组件中,设置 indicator-dotstrue,但禁用默认的指示点样式,通过设置 indicator-colorindicator-active-color 为透明。

<template>
  <view class="swiper-container">
    <swiper
      :autoplay="true"
      indicator-dots="true"
      indicator-color="transparent"
      indicator-active-color="transparent"
      class="swiper"
      @change="handleSwiperChange"
    >
      <swiper-item v-for="(item, index) in items" :key="index">
        <image :src="item.image" class="swiper-image"></image>
      </swiper-item>
    </swiper>
    <view class="dots-container">
      <view
        v-for="(item, index) in items"
        :key="index"
        :class="['dot', { active: currentIndex === index }]"
        class="dot-item"
      ></view>
    </view>
  </view>
</template>

2. 自定义3D指示点样式

<style> 中定义自定义的3D指示点样式。

<style scoped>
.swiper-container {
  position: relative;
}

.swiper {
  height: 200px; /* 根据需要调整高度 */
}

.swiper-image {
  width: 100%;
  height: 100%;
}

.dots-container {
  position: absolute;
  bottom: 10px;
  left: 50%;
  transform: translateX(-50%);
  display: flex;
}

.dot-item {
  width: 10px;
  height: 10px;
  margin: 0 5px;
  background-color: rgba(255, 255, 255, 0.5);
  border-radius: 50%;
  transition: transform 0.3s ease;
}

.dot.active {
  background-color: rgba(255, 255, 255, 0.9);
  transform: scale(1.5) translateY(-10px);
}

/* 3D效果 */
.dot-item::before {
  content: '';
  position: absolute;
  top: 50%;
  left: 50%;
  width: 100%;
  height: 100%;
  border-radius: 50%;
  background: inherit;
  transform: translate(-50%, -50%) rotateX(45deg) scale(0.8);
  opacity: 0.6;
  pointer-events: none;
}

.dot.active::before {
  opacity: 1;
}
</style>

3. 处理轮播图切换事件

<script> 中处理轮播图切换事件,更新当前指示点的索引。

<script>
export default {
  data() {
    return {
      items: [
        { image: '/static/image1.jpg' },
        { image: '/static/image2.jpg' },
        { image: '/static/image3.jpg' },
      ],
      currentIndex: 0,
    };
  },
  methods: {
    handleSwiperChange(event) {
      this.currentIndex = event.detail.current;
    },
  },
};
</script>

上述代码展示了如何通过自定义指示点样式和 CSS3 的3D变换属性,在 uni-app 中实现3D模式的轮播图指示点效果。你可以根据需要进一步调整样式和动画效果。

回到顶部