Skip to content

SwiperIndicator 轮播指示器

此组件封装了一些常见的轮播指示器样式,目前支持的有:

  • dots - 点指示器。
  • line - 线指示器。

基础使用

  • 通过 mode 属性设置指示器类型,可选值有:
    • dots - 点指示器,默认值。
    • line - 线指示器。
  • 通过 count 属性设置轮播 item 数量。
  • 通过 current 设置当前激活项下标。
vue
<template>
    <hi-swiper :list="list" keyName="url" @change="onSwiperChange"></hi-swiper>
    <hi-swiper-indicator :count="list.length" :current="current"></hi-swiper-indicator>
</template>

<script setup>
    import { ref } from "vue";

    // 轮播数据
    const list = ref([
        { id: 1, url: "/static/images/temp.jpeg" },
        { id: 2, url: "/static/images/temp.jpeg" },
        { id: 3, url: "/static/images/temp.jpeg" },
        { id: 4, url: "/static/images/temp.jpeg" },
        { id: 5, url: "/static/images/temp.jpeg" }
    ]);

    // 当前下标
    const current = ref(0);

    // 轮播切换事件
    function onSwiperChange(event) {
        current.value = event.detail.current;
    }
</script>

内部使用

默认组件的定位方式为 relative,可以通过 absolute 属性开启绝对定位。
可以结合自定义 swiperhi-swiper 组件一起使用。

vue
<template>
    <!-- 结合自定义 swiper 使用 -->
    <view class="swiper-container">
        <swiper class="swiper" :current="current" @change="onSwiperChange" autoplay>
            <swiper-item v-for="item in list" :key="item.id">
                <image :src="item.url" mode="aspectFill" class="swiper-image"></image>
            </swiper-item>
        <swiper>
        <hi-swiper-indicator :count="list.length" :current="current" absolute></hi-swiper-indicator>
    <view>

    <!-- 结合 hi-swiper 使用 -->
    <hi-swiper :list="list" keyName="url">
        <template #indicator="{current: index, count}">
            <hi-swiper-indicator :count="count" :current="index" absolute></hi-swiper-indicator>
        </template>
    </hi-swiper>
</template>

<script setup>
    import { ref } from "vue";

    // 轮播数据
    const list = ref([
        { id: 1, url: "/static/images/temp.jpeg" },
        { id: 2, url: "/static/images/temp.jpeg" },
        { id: 3, url: "/static/images/temp.jpeg" },
        { id: 4, url: "/static/images/temp.jpeg" },
        { id: 5, url: "/static/images/temp.jpeg" }
    ]);

    // 当前下标
    const current = ref(0);

    // 轮播切换事件
    function onSwiperChange(event) {
        current.value = event.detail.current;
    }
</script>

<style scoped>
.swiper-container {
    width: 100%;
    height: 220px;
    position: relative;
}

.swiper-image {
    width: 100%;
    height: 100%
    display: block;
}
</style>

指示器位置

开启 absoulte 属性后,可以通过 position 属性设置指示器的位置,可选值有:

  • bottom-center: 底部居中,默认值。
  • bottom-left: 底部左侧。
  • bottom-right: 底部右侧。
  • left-center: 左侧居中。
  • left-bottom: 左侧局下。
  • right-center: 右侧居中。
  • right-bottom: 右侧局下。
vue
<template>
    <hi-swiper :list="list" keyName="url">
        <template #indicator="{index, count}">
            <hi-swiper-indicator :count="count" :current="index" absolute :position="position"></hi-swiper-indicator>
        </template>

        <hi-button text="bottom-center" @click="handleChangePosition('bottom-center')"></hi-button>
        <hi-button text="bottom-left" @click="handleChangePosition('bottom-left')"></hi-button>
        <hi-button text="bottom-right" @click="handleChangePosition('bottom-right')"></hi-button>
        <hi-button text="left-center" @click="handleChangePosition('left-center')"></hi-button>
        <hi-button text="left-bottom" @click="handleChangePosition('left-bottom')"></hi-button>
        <hi-button text="right-center" @click="handleChangePosition('right-center')"></hi-button>
        <hi-button text="right-bottom" @click="handleChangePosition('right-bottom')"></hi-button>
    </hi-swiper>
</template>

<script setup>
    import { ref } from "vue";

    // 轮播数据
    const list = ref([
        { id: 1, url: "/static/images/temp.jpeg" },
        { id: 2, url: "/static/images/temp.jpeg" },
        { id: 3, url: "/static/images/temp.jpeg" },
        { id: 4, url: "/static/images/temp.jpeg" },
        { id: 5, url: "/static/images/temp.jpeg" }
    ]);

    // 指示器位置
    const position = ref("bottom-center");

    // 切换指示器位置
    function handleChangePosition(_position) {
        position.value = _position;
    }
</script>

Props

属性名说明类型默认值可选值版本
count指示器 item 数量Number0--
current当前激活项下标Number0--
mode指示器类型Stringdots参考上方说明-
position指示器位置String-参考上方说明-
absolute是否开启绝对定位Booleanfalsetrue-
top绝对定位时顶部偏移量String---
left绝对定位时左侧偏移量String---
right绝对定位时右侧偏移量String---
bottom绝对定位时底部偏移量String---
inactiveColor未激活颜色String---
activeColor激活颜色String---
radius圆角大小String---
weight指示器粗细String---
gapitem 之间的间距String---
inactiveSize点指示器未激活时大小String---
activeSize点指示器激活时大小String---
lineSize线指示器整体宽度/高度String---
lineItemSize线指示器单个 item 的宽度/高度String---

Event

事件名说明回调参数版本
itemClickitem 点击事件index: 当前点击的 item 的索引值。-

样式变量

组件提供了以下样式变量,可以在使用时设置这些变量来修改组件的样式。

变量名默认值版本
--hi-swiper-indicator-displayflex-
--hi-swiper-indicator-align-itemscenter-
--hi-swiper-indicator-justify-contentcenter-
--hi-swiper-indicator-positionrelative-
--hi-swiper-indicator-z-index10-
--hi-swiper-indicator-bottomauto / 10px-
--hi-swiper-indicator-leftauto / 50% / 10px-
--hi-swiper-indicator-rightauto / 10px-
--hi-swiper-indicator-topauto / 50%-
--hi-swiper-indicator-transforminitial / translate(-50%, 0) / translate(0, 0) / translate(0, -50%)-
--hi-swiper-indicator-dots-displayflex-
--hi-swiper-indicator-dots-align-itemscenter-
--hi-swiper-indicator-dots-justify-contentcenter-
--hi-swiper-indicator-gap8px-
--hi-swiper-indicator-dots-flex-directionrow / column-
--hi-swiper-indicator-border-radius3px-
--hi-swiper-indicator-inactive-colorvar(--hi-background-default)-
--hi-swiper-indicator-transition500ms-
--hi-swiper-indicator-active-colorvar(--hi-theme-primary)-
--hi-swiper-indicator-inactive-size8px / 3px-
--hi-swiper-indicator-weight3px / 8px-
--hi-swiper-indicator-active-size16px-
--hi-swiper-indicator-line-size25% / 40%-

基于 MIT 许可发布