【uniapp小程序开发】—— 组件封装之【自定义轮播图】

简介: 【uniapp小程序开发】—— 组件封装之【自定义轮播图】

前言:

本文主要展示小程序端封装轮播图组件,使用的是uniapp进行的开发,主要使用的是uniapp官网提供的swiper组件,可以参考官方文档,查看一些相关API。

效果图一睹为快:

话不多说直接上正文一起来学习一下封装轮播图组件吧!


正文

1、首先了解swiper组件

滑块视图容器。


一般用于左右滑动或上下滑动,比如banner轮播图。


注意滑动切换和滚动的区别,滑动切换是一屏一屏的切换。swiper下的每个swiper-item是一个滑动切换区域,不能停留在2个滑动区域之间。


1.1、小小的demo示例:

<template>
<view class="uni-margin-wrap">
    <swiper class="swiper" circular :indicator-dots="true" :autoplay="true" :interval="2000"
    :duration="500">
        <swiper-item>
        <view class="swiper-item uni-bg-red">A</view>
</swiper-item>
<swiper-item>
            <view class="swiper-item uni-bg-green">B</view>
</swiper-item>
<swiper-item>
                <view class="swiper-item uni-bg-blue">C</view>
</swiper-item>
</swiper>
</view>
</template>
<style>
.uni-margin-wrap {
    width: 690rpx;
    width: 100%;
  }
  .swiper {
    height: 300rpx;
  }
  .swiper-item {
    display: block;
    height: 300rpx;
    line-height: 300rpx;
    text-align: center;
  }
</style>

效果图如下:

1.2、自定义轮播图效果展示说明

我们要做的是:

轮播图底部颜色渐变

左下方包含对应图片的一行文字说明

指示点在右下方,选中颜色为白色,未选中为灰色

效果图如下:

2、完成自定义轮播图效果

我们先完成效果再去探讨如何封装成组件。如下示例代码展示了自定义轮播图的效果:


swiper常用属性介绍:


indicator-dots:轮播图正前方的小圆点(此案例没有使用官方提供的,是自定义的在右下角附近)

autoplay:是否自动切换

interval:图片轮播间隔此处为3秒

duration:图片轮播动画时长 此处为0.5秒

circular:是否开启无缝轮播(此处为到第三张图片后无缝播放第一张图片)

<template>
    <!-- 轮播图组件 -->
    <view class="px-3 py-2 ">
      <view class="position-relative">
        <swiper :autoplay="true" :interval="3000" :duration="500" circular style="height: 250rpx;"
          @change="changeIndicatorDots">
          <swiper-item v-for="(item,index) in swipers" :key="index">
            <image :src="item.src" mode="sapectFill" style="height:250rpx;width: 100%;" class="rounded-lg">
            </image>
          </swiper-item>
        </swiper>
        <view class="flex align-center text-white rounded-bottom-lg px-2 pb-1" style="position: absolute; bottom: 0; left: 0; right: 0;
            background-image: linear-gradient(to bottom,rgba(0,0,0,0),rgba(0,0,0,0.8));">
          <view style="width: 80%;" class="text-ellipsis">
            <!-- 获取当前指示点的位置,获取对应的title -->
            <text>{{swipers[current].title}}</text>
          </view>
          <view style="width: 20%;" class="flex align-center justify-end flex-shrink">
            <!-- 指示点选中当前图片为白色 未选中为灰色 -->
            <view v-for="(item,index) in swipers" :key="index" style="height: 16rpx;width: 16rpx ; "
              class="rounded-circle ml-1"
              :style="index===current?'background-color:rgba(255,255,255,1)':'background-color:rgba(255,255,255,0.5)'">
            </view>
          </view>
        </view>
      </view>
    </view>
  </view>
</template>
<script>
  export default {
    data() {
      return {
        current: 0, // 标识当前选中的图片序列号
        swipers: [{
          src: '/static/swiper/1.jpg',
          title: '自定义轮播图组件图片一'
        }, {
          src: '/static/swiper/2.jpg',
          title: '自定义轮播图组件图片二名字很长测试用'
        }, {
          src: '/static/swiper/3.jpg',
          title: '自定义轮播图组件图片三'
        }]
      }
    },
    onLoad() {
    },
    methods: {
           // changeIndicatorDots方法会在轮播的图片切换后调用,e.detail.current表示当前所在滑块的 index 
      changeIndicatorDots(e) {
        this.current = e.detail.current
      }
    }
  }
</script>

示例代码中的class类中的类名样式是我已经在全局配置好的,由于篇幅比较长,之后的小程序文章也会经常使用,我已经上传到了CSDN资源(免费),点击链接跳转下载可查看相对应的样式。


点击跳转下载free.css文件


3、组件封装——自定义轮播图

3.1、创建swiper-doc.vue组件

3.2、组件调用,封装完成

首先我们要清楚,我们封装的内容为我们自定义的部分,swiper滑块区域是不需要封装的是通用的,我们使用插槽站位。我们只需要将我们自定义的指示点、介绍文字、渐变模块封装即可。

示例代码如下:

swiper-doc.vue文件:

<template>
    <view class="position-relative">
      <!-- 轮播图组件不需要直接使用插槽 -->
      <slot></slot>
      <view class="flex align-center text-white rounded-bottom-lg px-2 pb-1" style="position: absolute; bottom: 0; left: 0; right: 0; 
          background-image: linear-gradient(to bottom,rgba(0,0,0,0),rgba(0,0,0,0.8));">
        <view style="width: 80%;" class="text-ellipsis">
          <!-- 获取当前指示点的位置,获取对应的title -->
          <text>{{info[current].title}}</text>
        </view>
        <view style="width: 20%;" class="flex align-center justify-end flex-shrink">
          <!-- 指示点选中当前图片为白色 未选中为灰色 -->
          <view v-for="(item,index) in info" :key="index" style="height: 16rpx;width: 16rpx ; "
            class="rounded-circle ml-1"
            :style="index===current?'background-color:rgba(255,255,255,1)':'background-color:rgba(255,255,255,0.5)'">
          </view>
        </view>
      </view>
  </view>
</template>
<script>
  export default{
    props:{
      info:Array,
      current:{
        type:Number,
        default:0
      }
    }
  }
</script>

info表示我们所需的轮播图片数据;

current表示那个轮播图片的索引,用于获取title和指示点。

index.vue文件:

<view class="px-3 py-2 ">
      <swiperDot class="position-relative" :current="current" :info="swipers">
      <!--
          swiper常用属性介绍:
            indicator-dots:轮播图正前方的小圆点(此案例没有使用官方提供的,是自定义的在右下角附近)
            autoplay:是否自动切换
            interval:图片轮播间隔此处为3秒
            duration:图片轮播动画时长 此处为0.5秒
            circular:是否开启无缝轮播(此处为到第三张图片后无缝播放第一张图片)
         -->
        <swiper :autoplay="true" :interval="3000" :duration="500" circular style="height: 250rpx;"
          @change="changeIndicatorDots">
          <swiper-item v-for="(item,index) in swipers" :key="index">
            <image :src="item.src" mode="sapectFill" style="height:250rpx;width: 100%;" class="rounded-lg">
            </image>
          </swiper-item>
        </swiper>
      </swiperDot>
</view>
<script>
   // 引入指示点组件,注册并使用 
  import swiperDot from '@/components/comon/swiper-doc.vue'
  export default {
    components: {
      swiperDot
    },
    data() {
      return {
        current: 0, // 标识当前选中的图片序列号
        swipers: [{
          src: '/static/swiper/1.jpg',
          title: '自定义轮播图组件图片一'
        }, {
          src: '/static/swiper/2.jpg',
          title: '自定义轮播图组件图片二名字很长测试用'
        }, {
          src: '/static/swiper/3.jpg',
          title: '自定义轮播图组件图片三'
        }]
      }
    },
    onLoad() {
    },
    methods: {
      // changeIndicatorDots方法会在轮播的图片切换后调用,e.detail.current表示当前所在滑块的 index
      changeIndicatorDots(e) {
        this.current = e.detail.current
      }
    }
  }
</script>

注意:文章案例中的swipers数组在实际开发中应该是从后端获取的,我们这里是自己直接定义的。


专栏分享:

小程序项目实战专栏:《uniapp小程序开发》

前端面试专栏地址:《面试必看》


⏳ 名言警句:说能做的,做说过的 \textcolor{red} {名言警句:说能做的,做说过的} 名言警句:说能做的,做说过的


✨ 原创不易,还希望各位大佬支持一下 \textcolor{blue}{原创不易,还希望各位大佬支持一下} 原创不易,还希望各位大佬支持一下


👍 点赞,你的认可是我创作的动力! \textcolor{green}{点赞,你的认可是我创作的动力!} 点赞,你的认可是我创作的动力!


⭐️ 收藏,你的青睐是我努力的方向! \textcolor{green}{收藏,你的青睐是我努力的方向!} 收藏,你的青睐是我努力的方向!


✏️ 评论,你的意见是我进步的财富! \textcolor{green}{评论,你的意见是我进步的财富!} 评论,你的意见是我进步的财富!  


目录
相关文章
|
13天前
|
人工智能 小程序
【一步步开发AI运动小程序】十五、AI运动识别中,如何判断人体站位的远近?
【云智AI运动识别小程序插件】提供人体、运动及姿态检测的AI能力,无需后台支持,具有快速、体验好、易集成等特点。本文介绍如何利用插件判断人体与摄像头的远近,确保人体图像在帧内的比例适中,以优化识别效果。通过`whole`检测规则,分别实现人体过近和过远的判断,并给出相应示例代码。
|
6天前
|
人工智能 小程序 API
【一步步开发AI运动小程序】十七、如何识别用户上传视频中的人体、运动、动作、姿态?
【云智AI运动识别小程序插件】提供人体、运动、姿态检测的AI能力,支持本地原生识别,无需后台服务,具有速度快、体验好、易集成等优点。本文介绍如何使用该插件实现用户上传视频的运动识别,包括视频解码抽帧和人体识别的实现方法。
|
12天前
|
人工智能 小程序 UED
【一步步开发AI运动小程序】十六、AI运动识别中,如何判断人体站位?
【云智AI运动识别小程序插件】提供人体、运动及姿态检测的AI能力,本地引擎无需后台支持,具备快速、体验好、易集成等优势。本文介绍如何利用插件的`camera-view`功能,通过检测人体站位视角(前、后、左、右),确保运动时的最佳识别率和用户体验。代码示例展示了如何实现视角检查,确保用户正或背对摄像头,为后续运动检测打下基础。
|
25天前
|
人工智能 小程序 IDE
【一步步开发AI运动小程序】九、姿态辅助调试桌面工具的使用
随着AI技术的发展,各大厂商推出的AI运动APP如“乐动力”、“天天跳绳”等,使云上运动会、线上健身等概念大热。本文将指导你如何利用“云智AI运动识别小程序插件”,在微信小程序中实现类似功能,包括工具搭建、服务启动及数据回传等步骤,助力开发者高效开发AI运动小程序。
【一步步开发AI运动小程序】九、姿态辅助调试桌面工具的使用
|
18天前
|
人工智能 小程序 API
【一步步开发AI运动小程序】十三、自定义一个运动分析器,实现计时计数02
本文介绍如何利用“云智AI运动识别小程序插件”开发AI运动小程序,详细解析了俯卧撑动作的检测规则构建与执行流程,涵盖卧撑和撑卧两个姿态的识别规则,以及如何通过继承`sports.SportBase`类实现运动分析器,适用于小程序开发者。
|
18天前
|
人工智能 小程序 API
【一步步开发AI运动小程序】十二、自定义一个运动分析器,实现计时计数01
随着AI技术的发展,AI运动APP如雨后春笋般涌现,如“乐动力”、“天天跳绳”等,推动了云上运动会、线上健身等热潮。本文将指导你从零开始开发一个AI运动小程序,利用“云智AI运动识别小程序插件”,介绍运动识别原理、计量方式及运动分析器基类的使用,帮助你在小程序中实现运动计时和计数功能。下篇将继续探讨运动姿态检测规则的编写。
|
11天前
|
移动开发 小程序 PHP
校园圈子论坛系统采取的PHP语音和uni账号开发的小程序APP公众号H5是否只需要4800元?是的,就是只需要4800元
关于校园圈子论坛系统采用PHP语言和uni-app开发的小程序、APP、公众号和H5是否仅需4800元这个问题,实际上很难给出一个确定的答案。这个价格可能受到多种因素的影响
47 8
|
28天前
|
人工智能 JSON 小程序
【一步步开发AI运动小程序】八、利用body-calc进行姿态识别
随着AI技术的发展,各大厂商推出的如“乐动力”、“天天跳绳”等AI运动APP,使得云上运动会、线上健身等概念风靡一时。本文将引导读者从零开始开发一个AI运动小程序,使用“云智AI运动识别小程序插件”,介绍人体姿态检测规则、规则编写语法、执行检测规则运算及姿态检测实战等内容,助力开发者轻松实现AI运动小程序的开发。
【一步步开发AI运动小程序】八、利用body-calc进行姿态识别
|
7天前
|
人工智能 小程序 数据处理
uni-app开发AI康复锻炼小程序,帮助肢体受伤患者康复!
近期,多家康复机构咨询AI运动识别插件是否适用于肢力运动受限患者的康复锻炼。本文介绍该插件在康复锻炼中的应用场景,包括康复运动指导、运动记录、恢复程度记录及过程监测。插件集成了人体检测、姿态识别等功能,支持微信小程序平台,使用便捷,安全可靠,帮助康复治疗更加高效精准。
|
20天前
|
数据采集 人工智能 小程序
【一步步开发AI运动小程序】十、姿态动作相似度比较
本文介绍如何利用“云智AI运动识别小程序插件”开发AI运动小程序,重点讲解姿态动作相似度比较功能的运用,包括样本动作帧的采集和姿态相似度的计算方法,以及在组合运动中的应用实例。