uniapp实战 —— 轮播图【自定义指示点】(含组件封装,自动注册全局组件,添加全局组件类型声明)

简介: uniapp实战 —— 轮播图【自定义指示点】(含组件封装,自动注册全局组件,添加全局组件类型声明)

效果预览

组件封装

src\components\SUI_Swiper.vue

可参考官网配置更多属性

  • swiper
  • navigator
<script setup lang="ts">
import { ref } from 'vue'
defineProps({
  config: Object,
})

const activeIndex = ref(0)
const change: UniHelper.SwiperOnChange = (e) => {
  activeIndex.value = e.detail.current
}
</script>

<template>
  <view class="carousel">
    <swiper
      @change="change"
      :circular="config?.circular || true"
      :autoplay="config?.autoplay || false"
      :interval="config?.interval || 3000"
    >
      <swiper-item v-for="(item, index) in config?.itemList" :key="index">
        <navigator
          :url="item.url"
          :open-type="item.openType || 'navigate'"
          hover-class="none"
          class="navigator"
        >
          <image mode="aspectFill" class="image" :src="item.src"></image>
        </navigator>
      </swiper-item>
    </swiper>
    <!-- 指示点 -->
    <view class="indicator">
      <text
        v-for="(item, index) in config?.itemList"
        :key="item"
        class="dot"
        :class="{ active: index === activeIndex }"
      ></text>
    </view>
  </view>
</template>

<style lang="scss">
/* 轮播图 */
.carousel {
  height: 280rpx;
  position: relative;
  overflow: hidden;
  transform: translateY(0);
  background-color: #efefef;
  .indicator {
    position: absolute;
    left: 0;
    right: 0;
    bottom: 16rpx;
    display: flex;
    justify-content: center;
    .dot {
      width: 30rpx;
      height: 6rpx;
      margin: 0 8rpx;
      border-radius: 6rpx;
      background-color: rgba(255, 255, 255, 0.4);
    }
    .active {
      background-color: #fff;
    }
  }
  .navigator,
  .image {
    width: 100%;
    height: 100%;
  }
}
</style>

自动注册全局组件

在 src\pages.json 中添加

      // 自动导入src/components 目录中以 SUI_开头的组件
      "^SUI_(.*)": "@/components/SUI_$1.vue"

完整范例代码如下:

src\pages.json

  // 组件自动导入
  "easycom": {
    "autoscan": true,
    "custom": {
      // uni-ui 规则如下配置
      "^uni-(.*)": "@dcloudio/uni-ui/lib/uni-$1/uni-$1.vue",
      // 自动导入src/components 目录中以 SUI_开头的组件
      "^SUI_(.*)": "@/components/SUI_$1.vue"
    }
  },

使用组件

<SUI_Swiper :config="swiperConfig" />
 
const swiperConfig = {
  autoplay: true,
  interval: 3000,
  itemList: [
    {
      // 跳转到页面 '/pages/login/login'
      url: '/pages/login/login',
      src: 'https://pcapi-xiaotuxian-front-devtest.itheima.net/miniapp/uploads/slider_1.jpg',
    },
    {
      // 跳转到tab页签 '/pages/my/my'
      openType: 'switchTab',
      url: '/pages/my/my',
      src: 'https://pcapi-xiaotuxian-front-devtest.itheima.net/miniapp/uploads/slider_2.jpg',
    },
  ],
}

添加全局组件类型声明

src\types\component.d.ts

import 'vue'

import SUI_Swiper from '@/components/SUI_Swiper.vue'
declare module 'vue' {
  export interface GlobalComponents {
    SUI_Swiper: typeof SUI_Swiper
  }
}

目录
相关文章
|
3月前
|
移动开发 前端开发 小程序
uniapp内置组件uni.navigateTo跳转后页面空白问题解决
【7月更文挑战第1天】uniapp内置组件uni.navigateTo跳转后页面空白问题解决
70 4
|
3月前
|
前端开发
uniapp 实战 -- app 的自动升级更新(含生成 app 发布页)
uniapp 实战 -- app 的自动升级更新(含生成 app 发布页)
837 1
|
3月前
uniapp【组件封装】时间戳格式化为星期
uniapp【组件封装】时间戳格式化为星期
62 0
|
3月前
|
前端开发
uniapp 实战 -- 创建 uni-admin 项目,部署到 uniCloud 前端网页托管(免费云空间)
uniapp 实战 -- 创建 uni-admin 项目,部署到 uniCloud 前端网页托管(免费云空间)
186 0
|
3月前
|
数据库
uniapp 【专题详解 -- 时间】云数据库时间类型设计,时间生成、时间格式化渲染(uni-dateformat 组件的使用)
uniapp 【专题详解 -- 时间】云数据库时间类型设计,时间生成、时间格式化渲染(uni-dateformat 组件的使用)
124 0
|
3月前
uniapp 新建组件
uniapp 新建组件
33 0
|
3月前
uniapp 添加自定义图标
uniapp 添加自定义图标
118 0
|
3月前
|
前端开发 JavaScript 索引
uniapp的u-album组件自定义删除功能
这样,你就可以在u-album组件中实现自定义的删除功能了。需要注意的是,这个删除操作只是在前端删除了图片项,并没有在后端删除对应的图片文件,如果你需要在后端也删除对应的图片文件,你还需要在删除操作后发送一个请求到后端,让后端删除对应的图片文件。
81 0
|
3月前
|
JavaScript Java 测试技术
基于SpringBoot+Vue+uniapp的房屋租赁App的详细设计和实现(源码+lw+部署文档+讲解等)
基于SpringBoot+Vue+uniapp的房屋租赁App的详细设计和实现(源码+lw+部署文档+讲解等)
基于SpringBoot+Vue+uniapp的房屋租赁App的详细设计和实现(源码+lw+部署文档+讲解等)
下一篇
无影云桌面