【07】纯血鸿蒙HarmonyOS NEXT星河版开发0基础学习笔记-Swiper轮播组件与样式结构重用
序言:
本文详细讲解了关于我们在页面上经常看到的轮播图在鸿蒙开发中如何用Swiper实现,介绍了Swiper的基本用法与属性,及如何面对大段的重复代码进行封装和重用(@Extend、@Styles、@Builder),使代码更加简洁易读。
笔者也是跟着B站黑马的课程一步步学习,学习的过程中添加部分自己的想法整理为笔记分享出来,如有代码错误或笔误,欢迎指正。
B站黑马的课程链接:鸿蒙课程介绍_哔哩哔哩_bilibili
往期笔记:
【01】纯血鸿蒙HarmonyOS NEXT星河版开发0基础学习笔记-ArkTs基础语法与界面开发基础
【02】纯血鸿蒙HarmonyOS NEXT星河版开发0基础学习笔记-界面进阶与布局排布(附QQ登陆、得物、京东登陆综合案例+代码)
【03】纯血鸿蒙HarmonyOS NEXT星河版开发0基础学习笔记-更多布局(弹性/层叠)方式与界面开发综合(附飞狗卡片+B站卡片案例+实战开发支付宝界面+代码)
【04】纯血鸿蒙HarmonyOS NEXT星河版开发0基础学习笔记-ArkTs进阶运算符+状态管理(附综合案例美团购物车)
【05】纯血鸿蒙HarmonyOS NEXT星河版开发0基础学习笔记-条件渲染+if/switch判断与for/while循环(附计数器、京东加购案例)
【06】纯血鸿蒙HarmonyOS NEXT星河版开发0基础学习笔记-综合案例·生肖抽奖卡具体实现(类似支付宝集五福)
目录
一.Swiper轮播组件
1.Swiper的基本用法
2.Swiper的常见属性
3.Swiper样式自定义
二.样式&结构重用
1.@Extend:扩展组件(样式、事件)
2.@Style:抽取通用属性、事件
3.@Builder:自定义构建函数(结构、样式、事件)
一.Swiper轮播组件
简介:
Swiper是一个容器组件,当设置了多个子组件后,可以对这些子组件进行轮播显示。(图片、文字...)
1.Swiper的基本用法
1)语法结构:
Swiper(){//1.轮播内容}//2.设置尺寸(内容会自动拉伸).width('100%').height(100)
2)使用案例:
build() {Column(){//Swiper 轮播组件的基本使用Swiper(){//1.轮播内容Text('1').backgroundColor(Color.Orange)Text('2').backgroundColor(Color.Blue)Text('3').backgroundColor(Color.Gray)}//2.设置尺寸(内容会自动拉伸)//tips:给外层设置宽高,未来的子元素都会进行统一的拉伸.width('100%').height(100)Swiper(){//1.轮播内容Image($r('app.media.ic_swiper_xmyp01'))Image($r('app.media.ic_swiper_xmyp02'))Image($r('app.media.ic_swiper_xmyp03'))Image($r('app.media.ic_swiper_xmyp04'))}//2.设置尺寸(内容会自动拉伸)//tips:给外层设置宽高,未来的子元素都会进行统一的拉伸.width('100%').height(100)}}

2.Swiper的常见属性
1)Swiper的常见属性
| 属性方法 | 传值 | 作用 | 默认值 |
| loop | boolean | 是否开启循环 | true |
| autoPlay | boolean | 是否自动播放 | false |
| interval | number | 自动播放时间间隔(ms) | 3000 |
| vertical | boolean | 纵向滑动轮播 | false |
| ...其他属性 | 见文档 |
2)需求
使用上述属性,将刚刚的轮播图调整为
①自动播放
②播放间隔:4s
③纵向滑动
Swiper(){//1.轮播内容Text('1').backgroundColor(Color.Orange)Text('2').backgroundColor(Color.Blue)Text('3').backgroundColor(Color.Gray)}//2.设置尺寸(内容会自动拉伸)//tips:给外层设置宽高,未来的子元素都会进行统一的拉伸.width('100%').height(100).loop(true) //是否开启循环.autoPlay(true) //是否自动播放.interval(4000) //自动播放时间间隔-4s.vertical(true) //纵向轮播

改为了纵向滑动→通常会在手机宣传页出现
3.Swiper样式自定义
1)使用案例:
Swiper(){//1.轮播内容Image($r('app.media.ic_swiper_xmyp01'))Image($r('app.media.ic_swiper_xmyp02'))Image($r('app.media.ic_swiper_xmyp03'))Image($r('app.media.ic_swiper_xmyp04'))}//2.设置尺寸(内容会自动拉伸)//tips:给外层设置宽高,未来的子元素都会进行统一的拉伸.width('100%').height(100)//定制小圆点.indicator(Indicator.dot() //小圆点.itemWidth(20) //默认的宽.itemHeight(5) //默认的高.color(Color.Gray) //默认的颜色.selectedItemWidth(30) //选中的宽.selectedItemHeight(5) //选中的高.selectedColor(Color.White) //选中的颜色)

tips:
aspectRatio(1) //宽高比例为1
aspectRatio(2) //宽高比例为2
//等比例缩放用于根据不同设备想要相同的视觉效果,保持图片的正常适配
二.样式&结构重用
1.@Extend:扩展组件(样式、事件)
1)原代码:
Swiper(){//1.轮播内容Text('1').backgroundColor(Color.Orange).textAlign(TextAlign.Center).fontColor(Color.White).fontSize(30).onClick(()=>{AlertDialog.show({message:'我是轮播图1号'})})Text('2').backgroundColor(Color.Blue).textAlign(TextAlign.Center).fontColor(Color.White).fontSize(30).onClick(()=>{AlertDialog.show({message:'我是轮播图2号'})})Text('3').backgroundColor(Color.Gray).textAlign(TextAlign.Center).fontColor(Color.White).fontSize(30).onClick(()=>{AlertDialog.show({message:'我是轮播图3号'})})}//2.设置尺寸(内容会自动拉伸)//tips:给外层设置宽高,未来的子元素都会进行统一的拉伸.width('100%').height(100).loop(true).autoPlay(true).interval(4000)
2)组件重写的方法和图示
@Extend(Text)
function textExtend(color:ResourceColor,txt:string){.backgroundColor(color).textAlign(TextAlign.Center).fontColor(Color.White).fontSize(30).onClick(()=>{AlertDialog.show({message:txt})})
}

3)重写达成的效果:
①代码部分:
Swiper(){//1.轮播内容Text('4').textExtend(Color.Red,'我是轮播图4号')Text('5').textExtend(Color.Yellow,'我是轮播图5号')Text('6').textExtend(Color.Pink,'我是轮播图6号')}//2.设置尺寸(内容会自动拉伸)//tips:给外层设置宽高,未来的子元素都会进行统一的拉伸.width('100%').height(100).loop(true).autoPlay(true).interval(4000)
②图示:
显而易见于上面啰嗦的代码,通过封装大段相同的代码,我们的代码会变得更加简洁高效

2.@Style:抽取通用属性、事件
1)原文件:
Column(){Text(this.message).margin(50).width(100).height(100).backgroundColor(this.bgColor).onClick(()=>{this.bgColor=String(Color.Orange)})Button('按钮').margin(50).width(100).height(100).backgroundColor(this.bgColor).onClick(()=>{this.bgColor=String(Color.Orange)})Column(){}.margin(50).width(100).height(100).backgroundColor(this.bgColor).onClick(()=>{this.bgColor=String(Color.Orange)})}

2)组件重写的方法与图示
①带this的全局用不了,组件内定义就可以用
②例如onClick这种带逻辑的,也是看带不带this,带this的就放在组件内定义
③Styles不支持传参
④因为全局定义无法获取this,所以组件内定义要比全局更加常用
Column(){Text(this.message).commonStyles().setBg()Button('按钮').commonStyles().setBg()Column(){}.commonStyles().setBg()}

3.@Builder:自定义构建函数(结构、样式、事件)
1)原代码:
Row(){Column(){Image($r('app.media.ic_reuse_01')).width('80%')Text('阿里拍卖')}.width('25%').onClick(()=>{AlertDialog.show({message:'点击了 阿里拍卖'})})Column(){Image($r('app.media.ic_reuse_02')).width('80%')Text('菜鸟')}.width('25%').onClick(()=>{AlertDialog.show({message:'点击了 菜鸟'})})Column(){Image($r('app.media.ic_reuse_03')).width('80%')Text('芭芭农场')}.width('25%').onClick(()=>{AlertDialog.show({message:'点击了 芭芭农场'})})Column(){Image($r('app.media.ic_reuse_04')).width('80%')Text('阿里药房')}.width('25%').onClick(()=>{AlertDialog.show({message:'点击了 阿里药房'})})}

2)组件重写的方法与图示
//全局 Builder
@Builder
function navItem(icon:ResourceStr,txt:string){Column({space:10}) {Image(icon).width('80%')Text(txt)}.width('25%').onClick(()=>{AlertDialog.show({message:'点击了'+txt})})
}@Entry
@Componentstruct Index {@State message: string = 'Hello World';build() {Row(){Row(){navItem($r('app.media.ic_reuse_01'),'阿里拍卖')navItem($r('app.media.ic_reuse_02'),'菜鸟')navItem($r('app.media.ic_reuse_03'),'芭芭农场')navItem($r('app.media.ic_reuse_04'),'阿里药房')}}}}

感谢阅读。
相关文章:
【07】纯血鸿蒙HarmonyOS NEXT星河版开发0基础学习笔记-Swiper轮播组件与样式结构重用
序言: 本文详细讲解了关于我们在页面上经常看到的轮播图在鸿蒙开发中如何用Swiper实现,介绍了Swiper的基本用法与属性,及如何面对大段的重复代码进行封装和重用(Extend、Styles、Builder),使代码更加简洁易…...
Springboot3保存日志到数据库
保存日志到数据库 请求日志几乎是所有大型企业级项目的必要的模块,请求日志对于我们来说后期在项目运行上线一段时间用于排除异常、请求分流处理、限制流量等。请求日志一般都会记录请求参数、请求地址、请求状态(Status Code)、SessionId、…...
叉车高位显示器无线摄影,安装更加便捷!
叉车叉货,基本功能,但货叉升降高度确不一定,普通的3米左右,高的十几米,特别是仓储车,仓库叉货空间小,环境昏暗,视线受阻严重,司机叉货升的那么高怎么准确无误的插到货呢&…...
模板的特化
模板的特化 1.概念2.函数模板特化3.类模板的特化3.1 全特化3.2 偏特化3.2.1 部分特化3.2.2 参数更进一步的限制 4.总结 1.概念 在原模板类的基础上,针对特殊类型所进行特殊化的实现方式 2.函数模板特化 步骤 1.必须要先有一个基础的函数模板 2.关键字 template后面接…...
PCIE总线架构
1 概述 PCIe总线(Peripheral Component Interconnect Express)是一种高速串行计算机扩展总线标准,它是基于PCI总线的一种升级版,现在已经被广泛应用于各种高性能的计算机和服务器系统中。 PCIe总线提供更高的数据传输速度和更先进的特性,它主要特点如下: 高带宽:提供比…...
Adobe PR与AE的区别与联系(附网盘地址)
从事视频后期制作的小伙伴,对于PR(Premiere)和AE(After Effects)应该不会陌生。随着短视频的兴起,就连我们普通用户,拍摄完视频,都会去糟取精的剪辑一下,而PR正是一款功能…...
【QT 5 调试软件+Linux下调用脚本shell-无法调度+目录拼写+无法找目录+sudo权限(2)+问题解决方式+后续补充】
【QT 5 调试软件Linux下调用脚本shell-无法调度目录拼写无法找目录sudo权限(2)问题解决方式后续补充】 1、前言2、问题综述:自研qt上位机无法调度脚本(1)可能原因1:无法找到目录情况说明:解决思…...
企业防泄密妙招有哪些?请记住这8招!超实用,学起来!
在古代,有云:“密者,德之高也;事以密成,语以泄败。” 这些谚语不仅是对忠诚守密的高度赞扬,更是对保密工作重要性的深刻阐述。 在现代企业中,数据泄露已成为不容忽视的严峻挑战。 如何有效防止…...
pytorch千问模型源码分析
# 规范化技术,旨在替代传统的 Layer Normalization(LN) # 核心思想是对输入张量的每个样本的每个特征进行规范化,使其均值为 0,方差为 1 class Qwen2RMSNorm(nn.Module): def __init__(self, hidden_size, eps1e-6…...
滚雪球学SpringCloud[1.3]:SpringCloud环境搭建
全文目录: 前言1.3.1 环境要求1. JDK2. Maven3. IDE4. 其他工具 1.3.2 初始化Spring Boot项目方法一:使用Spring Initializr方法二:使用IDE项目结构 1.3.3 引入Spring Cloud依赖1. 更新pom.xml2. 添加Spring Cloud Starter依赖3. 示例完整的p…...
9.28今日错题解析(软考)
目录 前言面向对象技术——UML软件工程——软件能力成熟度模型(CMM)程序设计语言——编译 前言 这是用来记录我备考软考设计师的错题的,今天知识点为UML、软件能力成熟度模型(CMM)和编译,大部分错题摘自希…...
【Vue】以RuoYi框架前端为例,ElementUI封装图片上传组件——将图片信息转成base64后提交到后端保存
RuoYi 框架本身对于图片上传功能,在ElementUI的 <el-upload> 组件的基础装封装了 /components/ImageUpload/index.vue 组件。本组件就是在 RuoYi 自定义的 <ImageUpload> 组件的基础上进行改造,将图片的信息在上传之前处理成 base64 格式&am…...
【Linux】驱动的基本架构和编译
驱动源码 /** Silicon Integrated Co., Ltd haptic sih688x haptic driver file** Copyright (c) 2021 kugua <daokuan.zhusi-in.com>** This program is free software; you can redistribute it and/or modify it* under the terms of the GNU General Public Licen…...
1013. 将数组分成和相等的三个部分 数组切分
1013. 将数组分成和相等的三个部分 已解答 简单 相关标签 相关企业 提示 给你一个整数数组 arr,只有可以将其划分为三个和相等的 非空 部分时才返回 true,否则返回 false。 形式上,如果可以找出索引 i 1 < j 且满足 (arr[0] arr[…...
【深度学习】—— 自动微分、非标量变量的反向传播、 分离计算、 Python控制流的梯度计算
【深度学习】—— 自动微分 自动微分一个简单的例子 非标量变量的反向传播分离计算Python控制流的梯度计算 自动微分 求导是⼏乎所有深度学习优化算法的关键步骤。虽然求导的计算很简单,只需要⼀些基本的微积分。但对于复杂的模型,⼿⼯进⾏更新是⼀件很…...
Java项目实战II基于Java+Spring Boot+MySQL的大学城水电管理系统(源码+数据库+文档)
目录 一、前言 二、技术介绍 三、系统实现 四、文档参考 五、核心代码 六、源码获取 全栈码农以及毕业设计实战开发,CSDN平台Java领域新星创作者 一、前言 随着大学城规模的不断扩大和学生数量的急剧增加,大学城内的水电管理面临着前所未有的挑战…...
Vue 组件的三大组成部分详解
文章目录 模板(template)脚本(script)样式(style)总结 在 Vue.js 中,组件是构建用户界面的重要基石。一个 Vue 组件通常由三个主要部分组成:模板(template)、…...
深入理解Java内部类
一、什么是内部类 内部类是定义在另一个类内部的类。内部类与外部类(Enclosing Class)之间存在着紧密的联系,可以访问外部类的成员变量和方法,这使得它们在某些场景下非常有用。 1.1 内部类的分类 Java中的内部类主要有以下几种…...
fiddler抓包12_篡改请求(请求前断点)
课程大纲 原理 正常“客户端-服务器”通信,即发送请求,接收返回。 Fiddler抓包是「客户端-浏览器」进行交互时,请求和响应都会从Fiddler通过,Fiddler可以捕获并展示。 请求前断点(BreakPoint Before Request࿰…...
Webpack和GuIp打包原理以及不同
Webpack打包原理 Webpack的打包原理主要基于模块化的概念,它将应用程序中的所有资源(如JS、CSS、图片等)视为模块,并根据模块间的依赖关系进行静态分析。Webpack会递归地构建一个依赖关系图(dependency graph…...
别再手动画UML了!用IDEA Diagrams插件自动生成类关系图,附赠符号含义速查表
高效架构可视化:IDEA Diagrams插件全指南与UML符号解析 在软件开发过程中,清晰的架构设计是团队协作和代码维护的基石。传统的手绘UML类图不仅耗时费力,更难以与快速迭代的代码保持同步。JetBrains IDEA内置的Diagrams插件正是为解决这一痛点…...
深入解析Spring Boot启动流程:从SpringApplication.run()到应用就绪
1. 项目概述:为什么我们需要深入理解SpringApplication.run()如果你是一个Java开发者,尤其是使用Spring Boot框架的,那么SpringApplication.run(YourApplication.class, args)这行代码对你来说一定不陌生。它几乎是每个Spring Boot应用的启动…...
[GESP202512 C++ 三级] 选择题第 8 题 ← unsigned int
【题目描述】 在一个特定的计算机系统中,假如 unsigned int 类型需要占用2个字节的存储空间(每个字节有8位),则 unsigned int 可以表示的数据范围是( A ) A. 0 ~ 65535 B. 0 ~ 65536 C. -65536 ~ 655…...
PCB 设计避坑指南|从基础规范到制造验证,一文吃透所有核心规则
1 设计基础规范1.1 文件命名与管理PCB 命名遵循 “产品型号 功能代码 设计序号 版本” 格式,例如 “AIP25-Lab-V1.0” 。严禁直接覆盖旧版文件,确保设计版本的可追溯性和规范性。1.2 材料与工艺选择1.2.1.基材采用 FR4 环氧玻璃布。 1.2.2 板厚厚度范…...
微软 Qlib 实战:从零构建跑赢大盘的 AI 智能选股策略(附最新回测与全流程代码)
在 GitHub 的量化投资社区中,微软亚洲研究院开源的 Qlib 毫无疑问是王者级别的存在(13k Stars)。传统的量化策略通常依赖主观经验设定的指标(如:均线突破、MACD背离),而 Qlib 则是让 人工智能&a…...
开源破产法律实务知识库:构建结构化办案指南与协作平台
1. 项目概述:一个破产法律实务的开源知识库最近在整理过往的破产案件卷宗时,我一直在思考一个问题:如何将那些零散、重复但又至关重要的法律文书、办案流程和实务要点,系统地沉淀下来,形成一套可以随时查阅、迭代更新的…...
t-io HTTP服务器实现:如何替代Tomcat和Jetty的完整指南
t-io HTTP服务器实现:如何替代Tomcat和Jetty的完整指南 【免费下载链接】t-io T-io is a network programming framework developed based on Java AIO. From the collected cases, t-io is widely used for IoT, IM, and customer service, making it a top-notch …...
AI文本检测技术解析:从原理到实践,构建内容真实性鉴别工具
1. 项目概述:AI写作检测工具的核心价值最近在GitHub上看到一个挺有意思的项目,叫“AI-Writing-Detection”。光看名字,你大概就能猜到它是干什么的——检测一段文本是不是AI写的。这玩意儿现在可太有用了。自从大语言模型(LLM&…...
保姆级教程:在STM32MP157开发板上跑通LVGL 8.3.11(含FrameBuffer配置与触控校准)
嵌入式Linux GUI开发实战:STM32MP157移植LVGL 8.3.11全流程解析 当一块ARM开发板首次点亮LVGL的炫酷界面时,那种成就感堪比程序员世界的"Hello World"。本文将带你深入STM32MP157开发板的LVGL移植全过程,从FrameBuffer配置到触控校…...
别再只堆叠4层了!用DenseGCN构建超深图网络,点云分割mIoU提升实战
突破GCN深度瓶颈:DenseGCN在点云分割中的实战优化指南 传统图卷积网络(GCN)通常被限制在3-4层的浅层架构中,这种深度限制严重制约了其在点云分割等复杂任务中的表现。本文将揭示如何通过密集连接(Dense Connections&am…...
