From 3c905991022c266ff856e81c1bc6dffe2c469bb6 Mon Sep 17 00:00:00 2001 From: duke Date: Wed, 12 Mar 2025 02:14:41 +0800 Subject: [PATCH 1/3] =?UTF-8?q?[doc]=20=E6=96=87=E6=A1=A3=E6=A0=BC?= =?UTF-8?q?=E5=BC=8F=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 118 +++++++++++---------------------------- library/BuildProfile.ets | 4 +- library/README.md | 118 +++++++++++---------------------------- 3 files changed, 70 insertions(+), 170 deletions(-) diff --git a/README.md b/README.md index 207b3ed..3c4defb 100644 --- a/README.md +++ b/README.md @@ -26,101 +26,51 @@ OpenHarmony ohpm ### 简单示例 -```typescript -import { ElfRefreshComponent } from '@duke/elf-refresh'; +```typescript +import { ElfRefreshComponent } from '@duke/elf-refresh'; import { TitleBar } from '../components/TitleBar'; -@ -Entry -@ -Component -struct -ListPage -{ - @ - State - data: string[] = [] - - aboutToAppear(): - void { - for - ( - let - i = 0 - ; - i - < - 100 - ; - i - ++ - ) - { - this - . - data - . - push - ( - 'item' - + - i - ) +@Entry +@Component +struct ListPage { + @State data: string[] = []; + aboutToAppear(): void { + for (let i = 0; i < 100; i++) { + this.data.push('item' + i); + } } -} - -@ -Builder -builderList() -{ - List() - { - ForEach(this.data, (item: string) => { - ListItem() - { - Text("测试数据" + item) + @Builder builderList() { + List() { + ForEach(this.data, (item: string) => { + ListItem() { Text("测试数据" + item) .width("95%") .height(50) .margin(10) .textAlign(TextAlign.Center) - .border({ width: 1, color: Color.Pink }) - } - }) - } - . - height('100%') + .border({ width: 1, color: Color.Pink }) + } + }) + } + .height('100%') .width('100%') -} - -build() -{ - Column() - { - TitleBar({ - title: '普通List', - }) - ElfRefreshComponent({ - content: () => { - this.builderList() - }, - onRefresh: async () => { - console.log('onRefresh') - return true - }, - onLoadMore: async () => { - console.log('onLoadMore') - return true - } - }).layoutWeight(1) } - . - height('100%') - .width('100%') -} + build() { + Column() { + TitleBar({ title: '普通List', }) + ElfRefreshComponent({ + content: () => { this.builderList() }, + onRefresh: async () => { + console.log('onRefresh'); + return true; }, + onLoadMore: async () => { + console.log('onLoadMore'); + return true; } + }).layoutWeight(1) + }.height('100%') + .width('100%') + } } - ``` - ## 接口说明 ### ElfRefreshComponent diff --git a/library/BuildProfile.ets b/library/BuildProfile.ets index 3a501e5..6033e79 100644 --- a/library/BuildProfile.ets +++ b/library/BuildProfile.ets @@ -2,8 +2,8 @@ * Use these variables when you tailor your ArkTS code. They must be of the const type. */ export const HAR_VERSION = '1.0.0'; -export const BUILD_MODE_NAME = 'debug'; -export const DEBUG = true; +export const BUILD_MODE_NAME = 'release'; +export const DEBUG = false; export const TARGET_NAME = 'default'; /** diff --git a/library/README.md b/library/README.md index 207b3ed..3c4defb 100644 --- a/library/README.md +++ b/library/README.md @@ -26,101 +26,51 @@ OpenHarmony ohpm ### 简单示例 -```typescript -import { ElfRefreshComponent } from '@duke/elf-refresh'; +```typescript +import { ElfRefreshComponent } from '@duke/elf-refresh'; import { TitleBar } from '../components/TitleBar'; -@ -Entry -@ -Component -struct -ListPage -{ - @ - State - data: string[] = [] - - aboutToAppear(): - void { - for - ( - let - i = 0 - ; - i - < - 100 - ; - i - ++ - ) - { - this - . - data - . - push - ( - 'item' - + - i - ) +@Entry +@Component +struct ListPage { + @State data: string[] = []; + aboutToAppear(): void { + for (let i = 0; i < 100; i++) { + this.data.push('item' + i); + } } -} - -@ -Builder -builderList() -{ - List() - { - ForEach(this.data, (item: string) => { - ListItem() - { - Text("测试数据" + item) + @Builder builderList() { + List() { + ForEach(this.data, (item: string) => { + ListItem() { Text("测试数据" + item) .width("95%") .height(50) .margin(10) .textAlign(TextAlign.Center) - .border({ width: 1, color: Color.Pink }) - } - }) - } - . - height('100%') + .border({ width: 1, color: Color.Pink }) + } + }) + } + .height('100%') .width('100%') -} - -build() -{ - Column() - { - TitleBar({ - title: '普通List', - }) - ElfRefreshComponent({ - content: () => { - this.builderList() - }, - onRefresh: async () => { - console.log('onRefresh') - return true - }, - onLoadMore: async () => { - console.log('onLoadMore') - return true - } - }).layoutWeight(1) } - . - height('100%') - .width('100%') -} + build() { + Column() { + TitleBar({ title: '普通List', }) + ElfRefreshComponent({ + content: () => { this.builderList() }, + onRefresh: async () => { + console.log('onRefresh'); + return true; }, + onLoadMore: async () => { + console.log('onLoadMore'); + return true; } + }).layoutWeight(1) + }.height('100%') + .width('100%') + } } - ``` - ## 接口说明 ### ElfRefreshComponent -- Gitee From 95a79839f45c9b9ba06e58fa63af7b1cc2353176 Mon Sep 17 00:00:00 2001 From: duke Date: Fri, 14 Mar 2025 00:07:48 +0800 Subject: [PATCH 2/3] =?UTF-8?q?[feat]=20=E5=AE=8C=E5=96=84=E5=9F=BA?= =?UTF-8?q?=E6=9C=AC=E5=88=B7=E6=96=B0=E5=A4=B4=E5=92=8C=E5=8A=A0=E8=BD=BD?= =?UTF-8?q?=E6=9B=B4=E5=A4=9A=E7=9A=84=E6=A0=B7=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 4 +- entry/src/main/ets/pages/ListPage.ets | 2 + library/README.md | 4 +- .../ets/components/ClassicsHeaderFooter.ets | 62 ++++++++++++++++--- .../ets/components/ElfRefreshComponent.ets | 6 ++ 5 files changed, 67 insertions(+), 11 deletions(-) diff --git a/README.md b/README.md index 3c4defb..78d37e6 100644 --- a/README.md +++ b/README.md @@ -53,6 +53,8 @@ struct ListPage { } .height('100%') .width('100%') + //下面代码建议添加,添加了会让刷新更流畅 + .edgeEffect(EdgeEffect.None) } build() { Column() { @@ -142,7 +144,7 @@ DevEco Studio: 5.0.5.315, SDK: HarmonyOS 5.0.1 Release Ohos_sdk_public 5.0.1.115 ## 目录结构 ```` -|---- eventpost +|---- ElfRefresh | |---- AppScrope # 示例代码文件夹 | |---- entry # 示例代码文件夹 | |---- examples # 示例代码文件夹 diff --git a/entry/src/main/ets/pages/ListPage.ets b/entry/src/main/ets/pages/ListPage.ets index 91d8eac..a65bd0f 100644 --- a/entry/src/main/ets/pages/ListPage.ets +++ b/entry/src/main/ets/pages/ListPage.ets @@ -27,6 +27,8 @@ struct ListPage { }) }.height('100%') .width('100%') + //下面代码建议添加,添加了会让刷新更流畅 + .edgeEffect(EdgeEffect.None) } build() { diff --git a/library/README.md b/library/README.md index 3c4defb..78d37e6 100644 --- a/library/README.md +++ b/library/README.md @@ -53,6 +53,8 @@ struct ListPage { } .height('100%') .width('100%') + //下面代码建议添加,添加了会让刷新更流畅 + .edgeEffect(EdgeEffect.None) } build() { Column() { @@ -142,7 +144,7 @@ DevEco Studio: 5.0.5.315, SDK: HarmonyOS 5.0.1 Release Ohos_sdk_public 5.0.1.115 ## 目录结构 ```` -|---- eventpost +|---- ElfRefresh | |---- AppScrope # 示例代码文件夹 | |---- entry # 示例代码文件夹 | |---- examples # 示例代码文件夹 diff --git a/library/src/main/ets/components/ClassicsHeaderFooter.ets b/library/src/main/ets/components/ClassicsHeaderFooter.ets index ffd235c..e6c0733 100644 --- a/library/src/main/ets/components/ClassicsHeaderFooter.ets +++ b/library/src/main/ets/components/ClassicsHeaderFooter.ets @@ -10,7 +10,6 @@ struct ElfClassicsHeaderCell { @Param @Require header: ElfRefreshHeader @Local title: ResourceStr = $r('app.string.elf_header_pulling') @Local lastUpdateTime: string = '' - @Local refreshIng: boolean = false private updateTimeFormat = this.getUIContext().getHostContext()?.resourceManager.getStringSync($r('app.string.elf_header_update')) @@ -26,7 +25,6 @@ struct ElfClassicsHeaderCell { } this.header.onStart = () => { this.title = $r('app.string.elf_header_pulling') - this.refreshIng = false } this.header.onMoving = () => { @@ -39,7 +37,6 @@ struct ElfClassicsHeaderCell { this.header.onReleased = () => { this.title = $r('app.string.elf_header_refreshing') - this.refreshIng = true } } @@ -50,9 +47,32 @@ struct ElfClassicsHeaderCell { build() { Row({ space: 8 }) { Stack() { - LoadingProgress() - .width(20) - .height(20) + if (this.header.state == RefreshState.IS_PULL_DOWN_1 || this.header.state == RefreshState.IS_PULL_DOWN_2) { + Image($r('sys.media.ohos_ic_public_arrow_down')) + .rotate({ + x: 0, + y: 0, + z: 1, + centerX: '50%', + centerY: '50%', + angle: this.header.state == RefreshState.IS_PULL_DOWN_2 ? 180 : 0 + }) + .animation({ + duration: 300, + curve: Curve.EaseIn, + iterations: 1, + playMode: PlayMode.Normal, + }) + .fillColor('#666666') + .width(20) + .height(20) + .transition(TransitionEffect.OPACITY) + } else { + LoadingProgress() + .width(20) + .height(20) + .transition(TransitionEffect.OPACITY) + } } Column() { @@ -64,6 +84,7 @@ struct ElfClassicsHeaderCell { Text(this.lastUpdateTime) .fontColor('#7c7c7c') .fontSize(12) + .transition(TransitionEffect.OPACITY) } } .align(Alignment.Center) @@ -108,9 +129,32 @@ struct ElfClassicsFooterCell { if (this.footer.hasMore) { Stack() { - LoadingProgress() - .width(20) - .height(20) + if(this.footer.state == RefreshState.IS_PULL_UP_1 || this.footer.state == RefreshState.IS_PULL_UP_2) { + Image($r('sys.media.ohos_ic_public_arrow_down')) + .rotate({ + x: 0, + y: 0, + z: 1, + centerX: '50%', + centerY: '50%', + angle: this.footer.state ==RefreshState.IS_PULL_UP_1 ? 180 : 0 + }) + .animation({ + duration: 300, + curve: Curve.EaseIn, + iterations: 1, + playMode: PlayMode.Normal, + }) + .fillColor('#666666') + .width(20) + .height(20) + .transition(TransitionEffect.OPACITY) + }else { + LoadingProgress() + .width(20) + .height(20) + .transition(TransitionEffect.OPACITY) + } } } diff --git a/library/src/main/ets/components/ElfRefreshComponent.ets b/library/src/main/ets/components/ElfRefreshComponent.ets index 5545614..6089e27 100644 --- a/library/src/main/ets/components/ElfRefreshComponent.ets +++ b/library/src/main/ets/components/ElfRefreshComponent.ets @@ -264,6 +264,12 @@ export struct ElfRefreshComponent { (!this.targetRefreshId || this.targetRefreshId == target.getId())) { // 找到将要组成并行手势的识别器 // 保存当前组件的识别器 this.childRecognizer = others[i]; // 保存将要组成并行手势的识别器 + let target = this.childRecognizer.getEventTargetInfo() as ScrollableTargetInfo; + if (target instanceof ScrollableTargetInfo) { + if (target.isEnd()||target.isBegin()) { + this.childRecognizer.setEnabled(false) + } + } return others[i]; // 返回将要组成并行手势的识别器 } } -- Gitee From 54814376c97595c779da0c25b9b58c4f1596f3cd Mon Sep 17 00:00:00 2001 From: duke Date: Fri, 14 Mar 2025 00:53:44 +0800 Subject: [PATCH 3/3] =?UTF-8?q?[feat]=20=E6=B7=BB=E5=8A=A0=E5=85=A8?= =?UTF-8?q?=E5=B1=80=E7=9A=84=E9=BB=98=E8=AE=A4=E9=85=8D=E7=BD=AE=E8=83=BD?= =?UTF-8?q?=E5=8A=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 8 +++++ entry/oh-package-lock.json5 | 2 +- entry/src/main/ets/pages/ListPage.ets | 3 +- library/BuildProfile.ets | 2 +- library/CHANGELOG.md | 5 +++ library/Index.ets | 4 ++- library/README.md | 8 +++++ library/oh-package.json5 | 2 +- library/src/main/ets/ElfGlobalConfig.ets | 34 +++++++++++++++++++ .../ets/components/ElfRefreshComponent.ets | 22 ++++++++---- .../{CustomStyle.ets => CustomStyle.ts} | 0 ...igurator.ets => ElfRefreshConfigurator.ts} | 14 ++++++++ 12 files changed, 92 insertions(+), 12 deletions(-) create mode 100644 library/src/main/ets/ElfGlobalConfig.ets rename library/src/main/ets/constant/{CustomStyle.ets => CustomStyle.ts} (100%) rename library/src/main/ets/model/{ElfRefreshConfigurator.ets => ElfRefreshConfigurator.ts} (86%) diff --git a/README.md b/README.md index 78d37e6..dbcf667 100644 --- a/README.md +++ b/README.md @@ -88,6 +88,13 @@ struct ListPage { | onRefresh | () => Promise | 返回值为true则刷新成功,false则刷新失败 | | onLoadMore | () => Promise | 返回值为true则加载成功,false则加载失败 | +### ElfGlobalConfig +| 方法名 | 入参 | 说明 | +|:----------------------:|:--------------------------------------------:|:-------------------------------:| +| initGlobalConfig | ElfCustomHeaderFooter,ElfRefreshConfigurator | 全局配置,配置全局刷新组件的默认配置,默认配置会覆盖组件的配置 | +| getDefaultCustom | | 获取全局Header和Footer组件 | +| getDefaultConfigurator | | 获取全局刷新组件的默认配置 | + ### ElfRefreshConfigurator | 属性 | 功能描述描述 | @@ -103,6 +110,7 @@ struct ListPage { | refreshCompleteTextHoldTime | 下拉刷新完毕后, 刷新成功文本停留的时间 | | headerStyle | 头部样式 | | footerStyle | 底部样式 | +| copyWith | 拷贝配置并更新配置 | ## 自定义HeaderFooter diff --git a/entry/oh-package-lock.json5 b/entry/oh-package-lock.json5 index 00b2a2a..7124489 100644 --- a/entry/oh-package-lock.json5 +++ b/entry/oh-package-lock.json5 @@ -10,7 +10,7 @@ "packages": { "@duke/elf-refresh@../library": { "name": "@duke/elf-refresh", - "version": "1.0.0", + "version": "1.0.1", "resolved": "../library", "registryType": "local" } diff --git a/entry/src/main/ets/pages/ListPage.ets b/entry/src/main/ets/pages/ListPage.ets index a65bd0f..65e625e 100644 --- a/entry/src/main/ets/pages/ListPage.ets +++ b/entry/src/main/ets/pages/ListPage.ets @@ -1,4 +1,4 @@ -import { ElfRefreshComponent } from '@duke/elf-refresh'; +import { ElfGlobalConfig, ElfRefreshComponent } from '@duke/elf-refresh'; import { TitleBar } from '../components/TitleBar'; @Entry @@ -37,6 +37,7 @@ struct ListPage { title: '普通List', }) ElfRefreshComponent({ + refreshConfigurator:ElfGlobalConfig.getInstance().getDefaultConfigurator(), content:()=>{this.builderList()}, onRefresh:async ()=>{ console.log('onRefresh') diff --git a/library/BuildProfile.ets b/library/BuildProfile.ets index 6033e79..e11789b 100644 --- a/library/BuildProfile.ets +++ b/library/BuildProfile.ets @@ -1,7 +1,7 @@ /** * Use these variables when you tailor your ArkTS code. They must be of the const type. */ -export const HAR_VERSION = '1.0.0'; +export const HAR_VERSION = '1.0.1'; export const BUILD_MODE_NAME = 'release'; export const DEBUG = false; export const TARGET_NAME = 'default'; diff --git a/library/CHANGELOG.md b/library/CHANGELOG.md index 81a9620..8d8ca0b 100644 --- a/library/CHANGELOG.md +++ b/library/CHANGELOG.md @@ -1,5 +1,10 @@ # Changelog +## [v1.0.1] 2025.03.14 + +- 优化基础Header和Footer的样式 +- 添加全局的默认配置 + ## [v1.0.0] 2025.03.12 - 第一版正式可用版本 \ No newline at end of file diff --git a/library/Index.ets b/library/Index.ets index b8d6f57..96ef542 100644 --- a/library/Index.ets +++ b/library/Index.ets @@ -14,4 +14,6 @@ export { ElfRefreshHeader } from "./src/main/ets/model/ElfRefreshHeader"; export { ElfRefreshConfigurator } from "./src/main/ets/model/ElfRefreshConfigurator"; -export { ElfRefreshController } from "./src/main/ets/ElfRefreshController"; \ No newline at end of file +export { ElfRefreshController } from "./src/main/ets/ElfRefreshController"; + +export { ElfGlobalConfig } from "./src/main/ets/ElfGlobalConfig"; \ No newline at end of file diff --git a/library/README.md b/library/README.md index 78d37e6..dbcf667 100644 --- a/library/README.md +++ b/library/README.md @@ -88,6 +88,13 @@ struct ListPage { | onRefresh | () => Promise | 返回值为true则刷新成功,false则刷新失败 | | onLoadMore | () => Promise | 返回值为true则加载成功,false则加载失败 | +### ElfGlobalConfig +| 方法名 | 入参 | 说明 | +|:----------------------:|:--------------------------------------------:|:-------------------------------:| +| initGlobalConfig | ElfCustomHeaderFooter,ElfRefreshConfigurator | 全局配置,配置全局刷新组件的默认配置,默认配置会覆盖组件的配置 | +| getDefaultCustom | | 获取全局Header和Footer组件 | +| getDefaultConfigurator | | 获取全局刷新组件的默认配置 | + ### ElfRefreshConfigurator | 属性 | 功能描述描述 | @@ -103,6 +110,7 @@ struct ListPage { | refreshCompleteTextHoldTime | 下拉刷新完毕后, 刷新成功文本停留的时间 | | headerStyle | 头部样式 | | footerStyle | 底部样式 | +| copyWith | 拷贝配置并更新配置 | ## 自定义HeaderFooter diff --git a/library/oh-package.json5 b/library/oh-package.json5 index 916c49f..13d4421 100644 --- a/library/oh-package.json5 +++ b/library/oh-package.json5 @@ -1,6 +1,6 @@ { "name": "@duke/elf-refresh", - "version": "1.0.0", + "version": "1.0.1", "description": "OpenHarmony 刷新组件,支持下拉刷新和上拉加载更多,支持各种组件,List、Grid,支持header,footer,目标打造HarmonyOS的SmartRefreshLayout", "main": "Index.ets", "author": "duke", diff --git a/library/src/main/ets/ElfGlobalConfig.ets b/library/src/main/ets/ElfGlobalConfig.ets new file mode 100644 index 0000000..bdb0588 --- /dev/null +++ b/library/src/main/ets/ElfGlobalConfig.ets @@ -0,0 +1,34 @@ +import { ClassicsHeaderFooter } from "./components/ClassicsHeaderFooter" +import { ElfCustomHeaderFooter } from "./components/ElfCustomHeaderFooter" +import { ElfRefreshConfigurator } from "./model/ElfRefreshConfigurator" + +// 步骤1:创建全局配置管理器 +export class ElfGlobalConfig { + // 单例模式 + private static instance: ElfGlobalConfig = new ElfGlobalConfig() + static getInstance(): ElfGlobalConfig { + return ElfGlobalConfig.instance + } + + // 全局默认配置 + private defaultCustom: ElfCustomHeaderFooter = new ClassicsHeaderFooter() + private defaultConfigurator: ElfRefreshConfigurator = new ElfRefreshConfigurator() + + // 初始化全局配置(应用启动时调用) + initGlobalConfig(custom?: ElfCustomHeaderFooter, configurator?: ElfRefreshConfigurator) { + if (custom) { + this.defaultCustom = custom + } + if (configurator) { + this.defaultConfigurator = configurator + } + } + + getDefaultCustom(): ElfCustomHeaderFooter { + return this.defaultCustom + } + + getDefaultConfigurator(): ElfRefreshConfigurator { + return this.defaultConfigurator + } +} \ No newline at end of file diff --git a/library/src/main/ets/components/ElfRefreshComponent.ets b/library/src/main/ets/components/ElfRefreshComponent.ets index 6089e27..aa73f48 100644 --- a/library/src/main/ets/components/ElfRefreshComponent.ets +++ b/library/src/main/ets/components/ElfRefreshComponent.ets @@ -2,18 +2,18 @@ import { util } from "@kit.ArkTS" import { ElfCustomHeaderFooter } from "./ElfCustomHeaderFooter"; import { ElfRefreshConfigurator } from "../model/ElfRefreshConfigurator"; import { RefreshState } from "../constant/RefreshState"; -import { ClassicsHeaderFooter } from "./ClassicsHeaderFooter"; import { ElfRefreshHeader } from "../model/ElfRefreshHeader"; import { ElfLoadFooter } from "../model/ElfLoadFooter"; import { AnimatorResult } from "@kit.ArkUI"; import { CustomStyle } from "../constant/CustomStyle"; import { ElfRefreshController } from "../ElfRefreshController"; +import { ElfGlobalConfig } from "../../../../Index"; @ComponentV2 export struct ElfRefreshComponent { @BuilderParam content: () => void - @Param @Once custom: ElfCustomHeaderFooter = new ClassicsHeaderFooter() - @Param @Once refreshConfigurator: ElfRefreshConfigurator = new ElfRefreshConfigurator() + @Param @Once custom: ElfCustomHeaderFooter = ElfGlobalConfig.getInstance().getDefaultCustom() + @Param @Once refreshConfigurator: ElfRefreshConfigurator = ElfGlobalConfig.getInstance().getDefaultConfigurator() @Param @Once controller: ElfRefreshController = new ElfRefreshController() @Param childOffsetInput: number = 0 @Param targetRefreshId: string | undefined = undefined @@ -135,9 +135,13 @@ export struct ElfRefreshComponent { y: this.trYTop || this.trYBottom }) - if (this.refreshConfigurator.getHasRefresh() && this.custom.builderHeader) { + if (this.refreshConfigurator.getHasRefresh() && (this.custom.builderHeader || ElfGlobalConfig.getInstance().getDefaultCustom().builderHeader)) { Stack({ alignContent: Alignment.Bottom }) { - this.custom.builderHeader.builder(this.header) + if(this.custom.builderHeader) { + this.custom.builderHeader.builder(this.header) + }else { + ElfGlobalConfig.getInstance().getDefaultCustom().builderHeader?.builder(this.header) + } }.zIndex(this.refreshConfigurator.getHeaderStyle() == CustomStyle.FixedBehind ? 1 : 3) .height(this.refreshConfigurator.getHeaderStyle() == CustomStyle.Scale ? this.trYTop : this.refreshConfigurator.getRefreshHeight()) @@ -147,9 +151,13 @@ export struct ElfRefreshComponent { this.trYTop - this.refreshConfigurator.getRefreshHeight() : 0 }) } - if (this.refreshConfigurator.getHasLoadMore() && this.custom.builderFooter) { + if (this.refreshConfigurator.getHasLoadMore() && (this.custom.builderFooter || ElfGlobalConfig.getInstance().getDefaultCustom().builderFooter)) { Stack({ alignContent: Alignment.Top }) { - this.custom.builderFooter.builder(this.footer) + if(this.custom.builderFooter) { + this.custom.builderFooter.builder(this.footer) + }else { + ElfGlobalConfig.getInstance().getDefaultCustom().builderFooter?.builder(this.footer) + } }.zIndex(this.refreshConfigurator.getFooterStyle() == CustomStyle.FixedBehind ? 1 : 3) .height(this.refreshConfigurator.getFooterStyle() == CustomStyle.Scale ? this.trYBottom : this.refreshConfigurator.getRefreshHeight()) diff --git a/library/src/main/ets/constant/CustomStyle.ets b/library/src/main/ets/constant/CustomStyle.ts similarity index 100% rename from library/src/main/ets/constant/CustomStyle.ets rename to library/src/main/ets/constant/CustomStyle.ts diff --git a/library/src/main/ets/model/ElfRefreshConfigurator.ets b/library/src/main/ets/model/ElfRefreshConfigurator.ts similarity index 86% rename from library/src/main/ets/model/ElfRefreshConfigurator.ets rename to library/src/main/ets/model/ElfRefreshConfigurator.ts index acd7ac3..cee03e8 100644 --- a/library/src/main/ets/model/ElfRefreshConfigurator.ets +++ b/library/src/main/ets/model/ElfRefreshConfigurator.ts @@ -113,4 +113,18 @@ export class ElfRefreshConfigurator { getRefreshAnimDuration() { return this.refreshAnimDuration; } + + /** + * 创建新配置对象,合并当前配置与传入参数 + * @param params 需要覆盖的配置项(部分属性) + * @returns 新配置实例 + */ + copyWith(params: Partial): ElfRefreshConfigurator { + const newConfig = new ElfRefreshConfigurator() + // 复制当前对象属性 + Object.assign(newConfig, this) + // 覆盖指定属性 + Object.assign(newConfig, params) + return newConfig + } } \ No newline at end of file -- Gitee