W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
可滾動(dòng)的容器組件,當(dāng)子組件的布局尺寸超過(guò)父組件的尺寸時(shí),內(nèi)容可以滾動(dòng)。
Scroll(scroller?: Scroller)
參數(shù):
參數(shù)名 | 參數(shù)類型 | 必填 | 參數(shù)描述 |
---|---|---|---|
scroller | 否 | 可滾動(dòng)組件的控制器。用于與可滾動(dòng)組件進(jìn)行綁定。 |
除支持通用屬性外,還支持以下屬性:
名稱 | 參數(shù)類型 | 描述 |
---|---|---|
scrollable | 設(shè)置滾動(dòng)方向。 默認(rèn)值:ScrollDirection.Vertical | |
scrollBar | 設(shè)置滾動(dòng)條狀態(tài)。 默認(rèn)值:BarState.Auto 說(shuō)明: 如果容器組件無(wú)法滾動(dòng),則滾動(dòng)條不顯示。 如果容器組件的子組件大小為無(wú)窮大,則滾動(dòng)條不支持拖動(dòng)和伴隨滾動(dòng)。 | |
scrollBarColor | string | number | Color | 設(shè)置滾動(dòng)條的顏色。 |
scrollBarWidth | string | number | 設(shè)置滾動(dòng)條的寬度,不支持百分比設(shè)置。 默認(rèn)值:4 單位:vp 說(shuō)明: 如果滾動(dòng)條的寬度超過(guò)其高度,則滾動(dòng)條的寬度會(huì)變?yōu)槟J(rèn)值。 |
edgeEffect | 設(shè)置滑動(dòng)效果,目前支持的滑動(dòng)效果參見(jiàn)EdgeEffect的枚舉說(shuō)明。 默認(rèn)值:EdgeEffect.None |
名稱 | 描述 |
---|---|
Horizontal | 僅支持水平方向滾動(dòng)。 |
Vertical | 僅支持豎直方向滾動(dòng)。 |
None | 不可滾動(dòng)。 |
Free(deprecated) | 支持豎直或水平方向滾動(dòng)。 從API version 9開(kāi)始廢棄。 |
名稱 | 功能描述 |
---|---|
onScrollFrameBegin9+(event: (offset: number, state: ScrollState) => { offsetRemain }) | 每幀開(kāi)始滾動(dòng)時(shí)觸發(fā),事件參數(shù)傳入即將發(fā)生的滾動(dòng)量,事件處理函數(shù)中可根據(jù)應(yīng)用場(chǎng)景計(jì)算實(shí)際需要的滾動(dòng)量并作為事件處理函數(shù)的返回值返回,Scroll將按照返回值的實(shí)際滾動(dòng)量進(jìn)行滾動(dòng)。 - offset:即將發(fā)生的滾動(dòng)量。 - state:當(dāng)前滾動(dòng)狀態(tài)。 - offsetRemain:實(shí)際滾動(dòng)量。 觸發(fā)該事件的條件 : 1、滾動(dòng)組件觸發(fā)滾動(dòng)時(shí)觸發(fā),包括鍵鼠操作等其他觸發(fā)滾動(dòng)的輸入設(shè)置。 2、調(diào)用控制器接口時(shí)不觸發(fā)。 3、越界回彈不觸發(fā)。 說(shuō)明: 支持offsetRemain為負(fù)值。 若通過(guò)onScrollFrameBegin事件和scrollBy方法實(shí)現(xiàn)容器嵌套滾動(dòng),需設(shè)置子滾動(dòng)節(jié)點(diǎn)的EdgeEffect為None。如Scroll嵌套List滾動(dòng)時(shí),List組件的edgeEffect屬性需設(shè)置為EdgeEffect.None。 |
onScroll(event: (xOffset: number, yOffset: number) => void) | 滾動(dòng)事件回調(diào), 返回滾動(dòng)時(shí)水平、豎直方向偏移量。 觸發(fā)該事件的條件 : 1、滾動(dòng)組件觸發(fā)滾動(dòng)時(shí)觸發(fā),支持鍵鼠操作等其他觸發(fā)滾動(dòng)的輸入設(shè)置。2、通過(guò)滾動(dòng)控制器API接口調(diào)用。 3、越界回彈。 |
onScrollEdge(event: (side: Edge) => void) | 滾動(dòng)到邊緣事件回調(diào)。 觸發(fā)該事件的條件 : 1、滾動(dòng)組件滾動(dòng)到邊緣時(shí)觸發(fā),支持鍵鼠操作等其他觸發(fā)滾動(dòng)的輸入設(shè)置。 2、通過(guò)滾動(dòng)控制器API接口調(diào)用。 3、越界回彈。 |
onScrollEnd(deprecated) (event: () => void) | 滾動(dòng)停止事件回調(diào)。 該事件從API version 9開(kāi)始廢棄,使用onScrollStop事件替代。 觸發(fā)該事件的條件 : 1、滾動(dòng)組件觸發(fā)滾動(dòng)后停止,支持鍵鼠操作等其他觸發(fā)滾動(dòng)的輸入設(shè)置。 2、通過(guò)滾動(dòng)控制器API接口調(diào)用后停止,帶過(guò)渡動(dòng)效。 |
onScrollStart9+(event: () => void) | 滾動(dòng)開(kāi)始時(shí)觸發(fā)。手指拖動(dòng)Scroll或拖動(dòng)Scroll的滾動(dòng)條觸發(fā)的滾動(dòng)開(kāi)始時(shí),會(huì)觸發(fā)該事件。使用Scroller滾動(dòng)控制器觸發(fā)的帶動(dòng)畫的滾動(dòng),動(dòng)畫開(kāi)始時(shí)會(huì)觸發(fā)該事件。 |
onScrollStop9+(event: () => void) | 滾動(dòng)停止時(shí)觸發(fā)。手拖動(dòng)Scroll或拖動(dòng)Scroll的滾動(dòng)條觸發(fā)的滾動(dòng),手離開(kāi)屏幕并且滾動(dòng)停止時(shí)會(huì)觸發(fā)該事件。使用Scroller滾動(dòng)控制器觸發(fā)的帶動(dòng)畫的滾動(dòng),動(dòng)畫停止時(shí)會(huì)觸發(fā)該事件。 |
若通過(guò)onScrollFrameBegin事件和scrollBy方法實(shí)現(xiàn)容器嵌套滾動(dòng),需設(shè)置子滾動(dòng)節(jié)點(diǎn)的EdgeEffect為None。如Scroll嵌套List滾動(dòng)時(shí),List組件的edgeEffect屬性需設(shè)置為EdgeEffect.None。
可滾動(dòng)容器組件的控制器,可以將此組件綁定至容器組件,然后通過(guò)它控制容器組件的滾動(dòng),同一個(gè)控制器不可以控制多個(gè)容器組件,目前支持綁定到List、Scroll、ScrollBar、Grid、WaterFlow上。
scrollTo(value: { xOffset: number | string, yOffset: number | string, animation?: { duration: number, curve: Curve } }): void
滑動(dòng)到指定位置。
參數(shù):
參數(shù)名 | 參數(shù)類型 | 必填 | 參數(shù)描述 |
---|---|---|---|
xOffset | number | string | 是 | 水平滑動(dòng)偏移。 說(shuō)明: 該參數(shù)值不支持設(shè)置百分比。 當(dāng)值小于0時(shí),不帶動(dòng)畫的滾動(dòng),按0處理。帶動(dòng)畫的滾動(dòng),滾動(dòng)到起始位置后停止。 僅滾動(dòng)軸為x軸時(shí)生效。 |
yOffset | number | string | 是 | 垂直滑動(dòng)偏移。 說(shuō)明: 該參數(shù)值不支持設(shè)置百分比。 當(dāng)值小于0時(shí),不帶動(dòng)畫的滾動(dòng),按0處理。帶動(dòng)畫的滾動(dòng),滾動(dòng)到起始位置后停止。 僅滾動(dòng)軸為y軸時(shí)生效。 |
animation | { duration: number, curve: Curve } | 否 | 動(dòng)畫配置: - duration: 滾動(dòng)時(shí)長(zhǎng)設(shè)置。 - curve: 滾動(dòng)曲線設(shè)置。 默認(rèn)值: { duration: 0, curve: Curve.Ease } 說(shuō)明: 設(shè)置為小于0的值時(shí),按默認(rèn)值顯示。 |
scrollEdge(value: Edge): void
滾動(dòng)到容器邊緣,不區(qū)分滾動(dòng)軸方向,Edge.Top和Edge.Start表現(xiàn)相同,Edge.Bottom和Edge.End表現(xiàn)相同。
參數(shù):
參數(shù)名 | 參數(shù)類型 | 必填 | 參數(shù)描述 |
---|---|---|---|
value | 是 | 滾動(dòng)到的邊緣位置。 |
scrollPage(value: { next: boolean, direction?: Axis }): void
滾動(dòng)到下一頁(yè)或者上一頁(yè)。
參數(shù):
參數(shù)名 | 參數(shù)類型 | 必填 | 參數(shù)描述 |
---|---|---|---|
next | boolean | 是 | 是否向下翻頁(yè)。true表示向下翻頁(yè),false表示向上翻頁(yè)。 |
direction(deprecated) | 否 | 設(shè)置滾動(dòng)方向?yàn)樗交蜇Q直方向。 從API version 9開(kāi)始廢棄 |
currentOffset(): { xOffset: number, yOffset: number }
返回當(dāng)前的滾動(dòng)偏移量。
返回值
類型 | 描述 |
---|---|
{ xOffset: number, yOffset: number } | xOffset: 水平滑動(dòng)偏移; yOffset: 豎直滑動(dòng)偏移。 說(shuō)明: 返回值單位為vp。 |
scrollToIndex(value: number): void
滑動(dòng)到指定Index。
僅支持Grid、List組件。
參數(shù):
參數(shù)名 | 參數(shù)類型 | 必填 | 參數(shù)描述 |
---|---|---|---|
value | number | 是 | 要滑動(dòng)到的列表項(xiàng)在列表中的索引值。 |
scrollBy(dx: Length, dy: Length): void
滑動(dòng)指定距離。
支持Scroll、List、Grid、WaterFlow組件
參數(shù):
參數(shù)名 | 參數(shù)類型 | 必填 | 參數(shù)描述 |
---|---|---|---|
dx | Length | 是 | 水平方向滾動(dòng)距離,不支持百分比形式。 |
dy | Length | 是 | 豎直方向滾動(dòng)距離,不支持百分比形式。 |
- // xxx.ets
- @Entry
- @Component
- struct ScrollExample {
- scroller: Scroller = new Scroller()
- private arr: number[] = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
- build() {
- Stack({ alignContent: Alignment.TopStart }) {
- Scroll(this.scroller) {
- Column() {
- ForEach(this.arr, (item) => {
- Text(item.toString())
- .width('90%')
- .height(150)
- .backgroundColor(0xFFFFFF)
- .borderRadius(15)
- .fontSize(16)
- .textAlign(TextAlign.Center)
- .margin({ top: 10 })
- }, item => item)
- }.width('100%')
- }
- .scrollable(ScrollDirection.Vertical) // 滾動(dòng)方向縱向
- .scrollBar(BarState.On) // 滾動(dòng)條常駐顯示
- .scrollBarColor(Color.Gray) // 滾動(dòng)條顏色
- .scrollBarWidth(10) // 滾動(dòng)條寬度
- .edgeEffect(EdgeEffect.None)
- .onScroll((xOffset: number, yOffset: number) => {
- console.info(xOffset + ' ' + yOffset)
- })
- .onScrollEdge((side: Edge) => {
- console.info('To the edge')
- })
- .onScrollEnd(() => {
- console.info('Scroll Stop')
- })
- Button('scroll 150')
- .onClick(() => { // 點(diǎn)擊后下滑指定距離150.0vp
- this.scroller.scrollBy(0,150)
- })
- .margin({ top: 10, left: 20 })
- Button('scroll 100')
- .onClick(() => { // 點(diǎn)擊后滑動(dòng)到指定位置,即下滑100.0vp的距離
- this.scroller.scrollTo({ xOffset: 0, yOffset: this.scroller.currentOffset().yOffset + 100 })
- })
- .margin({ top: 60, left: 20 })
- Button('back top')
- .onClick(() => { // 點(diǎn)擊后回到頂部
- this.scroller.scrollEdge(Edge.Top)
- })
- .margin({ top: 110, left: 20 })
- Button('next page')
- .onClick(() => { // 點(diǎn)擊后滑到下一頁(yè)
- this.scroller.scrollPage({ next: true })
- })
- .margin({ top: 170, left: 20 })
- }.width('100%').height('100%').backgroundColor(0xDCDCDC)
- }
- }
- @Entry
- @Component
- struct NestedScroll {
- @State listPosition: number = 0; // 0代表滾動(dòng)到List頂部,1代表中間值,2代表滾動(dòng)到List底部。
- private arr: number[] = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
- private scrollerForScroll: Scroller = new Scroller()
- private scrollerForList: Scroller = new Scroller()
- build() {
- Flex() {
- Scroll(this.scrollerForScroll) {
- Column() {
- Text("Scroll Area")
- .width("100%").height("40%").backgroundColor(0X330000FF)
- .fontSize(16).textAlign(TextAlign.Center)
- .onClick(() => {
- this.scrollerForList.scrollToIndex(5)
- })
- List({ space: 20, scroller: this.scrollerForList }) {
- ForEach(this.arr, (item) => {
- ListItem() {
- Text("ListItem" + item)
- .width("100%").height("100%").borderRadius(15)
- .fontSize(16).textAlign(TextAlign.Center).backgroundColor(Color.White)
- }.width("100%").height(100)
- }, item => item)
- }
- .width("100%")
- .height("50%")
- .edgeEffect(EdgeEffect.None)
- .onReachStart(() => {
- this.listPosition = 0
- })
- .onReachEnd(() => {
- this.listPosition = 2
- })
- .onScrollFrameBegin((offset: number) => {
- if ((this.listPosition == 0 && offset <= 0) || (this.listPosition == 2 && offset >= 0)) {
- this.scrollerForScroll.scrollBy(0, offset)
- return { offsetRemain: 0 }
- }
- this.listPosition = 1
- return { offsetRemain: offset };
- })
- Text("Scroll Area")
- .width("100%").height("40%").backgroundColor(0X330000FF)
- .fontSize(16).textAlign(TextAlign.Center)
- }
- }
- .width("100%").height("100%")
- }.width('100%').height('100%').backgroundColor(0xDCDCDC).padding(20)
- }
- }
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: