HarmonyOS 鸿蒙Next 有没有方法可以从代码层主动触发WaterFlow的滚动呢
HarmonyOS 鸿蒙Next 有没有方法可以从代码层主动触发WaterFlow的滚动呢
有没有方法可以从代码层主动触发WaterFlow的滚动呢,比如点击一个按钮后,将WaterFlow滚动到对应位置这种逻辑
WaterFlow组件可以绑定scroller控制器,可以使用scroller控制器的方法触发WaterFlow的滚动。
- 滑动到指定位置:scrollTo(value: { xOffset: number | string, yOffset: number | string, animation?: ScrollAnimationOptions | boolean })
- 滑动到指定Index:scrollToIndex(value: number, smooth?: boolean, align?: ScrollAlign, options?: ScrollToIndexOptions)
参考以下demo:
// WaterFlowDataSource公共类可使用官网示例中的:https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/ts-container-waterflow-V5#示例1使用基本瀑布流
import { WaterFlowDataSource } from '../common/WaterFlowDataSource'
@Entry
@Component
struct WaterFlowDemo {
@State minSize: number = 80
@State maxSize: number = 180
@State fontSize: number = 24
@State colors: number[] = [0xFFC0CB, 0xDA70D6, 0x6B8E23, 0x6A5ACD, 0x00FFFF, 0x00FF7F]
scroller: Scroller = new Scroller()
dataSource: WaterFlowDataSource = new WaterFlowDataSource()
private itemWidthArray: number[] = []
private itemHeightArray: number[] = []
// 计算FlowItem宽/高
getSize() {
let ret = Math.floor(Math.random() * this.maxSize)
return (ret > this.minSize ? ret : this.minSize)
}
// 设置FlowItem的宽/高数组
setItemSizeArray() {
for (let i = 0; i < 100; i++) {
this.itemWidthArray.push(this.getSize())
this.itemHeightArray.push(this.getSize())
}
}
aboutToAppear() {
this.setItemSizeArray()
}
onPageShow(): void {
// 页面显示后,自动滚动到第十条数据。
this.scroller.scrollToIndex(10);
}
@Builder
itemFoot() {
Column() {
Text(`Footer`)
.fontSize(10)
.backgroundColor(Color.Red)
.width(50)
.height(50)
.align(Alignment.Center)
.margin({ top: 2 })
}
}
build() {
Column({ space: 2 }) {
WaterFlow({ scroller: this.scroller }) {
LazyForEach(this.dataSource, (item: number) => {
FlowItem() {
Column() {
Text("N" + item).fontSize(12).height('16')
// 存在对应的jpg文件才会显示图片
Image('res/waterFlowTest(' + item % 5 + ').jpg')
.objectFit(ImageFit.Fill)
.width('100%')
.layoutWeight(1)
}
}
.onAppear(() => {
// 即将触底时提前增加数据
if (item + 20 == this.dataSource.totalCount()) {
for (let i = 0; i < 100; i++) {
this.dataSource.addLastItem()
}
}
})
.width('100%')
.height(this.itemHeightArray[item % 100])
.backgroundColor(this.colors[item % 5])
}, (item: string) => item)
}
.columnsTemplate("1fr 1fr")
.columnsGap(10)
.rowsGap(5)
.backgroundColor(0xFAEEE0)
.width('100%')
.height('100%')
.onReachStart(() => {
console.info('waterFlow reach start')
})
.onScrollStart(() => {
console.info('waterFlow scroll start')
})
.onScrollStop(() => {
console.info('waterFlow scroll stop')
})
.onScrollFrameBegin((offset: number, state: ScrollState) => {
console.info('waterFlow scrollFrameBegin offset: ' + offset + ' state: ' + state.toString())
return { offsetRemain: offset }
})
}
}
}
更多关于HarmonyOS 鸿蒙Next 有没有方法可以从代码层主动触发WaterFlow的滚动呢的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
好的,谢谢,我试试,
用定时setTimeout ?
怎么实现呢,
在HarmonyOS 鸿蒙Next系统中,从代码层主动触发WaterFlow(即瀑布流布局)的滚动,通常可以通过操作对应的滚动视图组件来实现。鸿蒙系统提供了丰富的UI组件和API来控制界面行为,包括滚动视图。
要实现这一功能,你可以使用鸿蒙的组件开发框架,特别是ScrollView
或类似支持滚动的容器组件。具体操作可能涉及设置滚动位置或触发滚动事件。以下是一个简化的步骤描述:
-
获取滚动视图组件的引用:首先,确保你的布局文件中包含了
ScrollView
或相应的滚动容器,并在代码中获取该组件的引用。 -
设置滚动位置:使用鸿蒙提供的API来设置滚动视图的位置,例如通过
scrollTo
或smoothScrollTo
方法,这些方法允许你指定滚动到的目标位置。 -
触发滚动:调用上述方法即可从代码层触发滚动行为。
请注意,具体实现细节可能依赖于你使用的鸿蒙SDK版本和具体的组件库。如果上述方法无法直接应用,可能需要查阅最新的鸿蒙开发文档或示例代码。