可滾動(dòng)的容器組件,當(dāng)子組件的布局尺寸超過(guò)父組件的尺寸時(shí),內(nèi)容可以滾動(dòng)。
說(shuō)明:
- 該組件從API version 7開(kāi)始支持。后續(xù)版本如有新增內(nèi)容,則采用上角標(biāo)單獨(dú)標(biāo)記該內(nèi)容的起始版本。
- 該組件嵌套List子組件滾動(dòng)時(shí),若List不設(shè)置寬高,則默認(rèn)全部加載,在對(duì)性能有要求的場(chǎng)景下建議指定List的寬高。
- 該組件滾動(dòng)的前提是主軸方向大小小于內(nèi)容大小。
- 該組件回彈的前提是要有滾動(dòng)。內(nèi)容小于一屏?xí)r,沒(méi)有回彈效果。
子組件
支持單個(gè)子組件。
接口
Scroll(scroller?: Scroller)
參數(shù):
參數(shù)名 | 參數(shù)類(lèi)型 | 必填 | 參數(shù)描述 |
---|---|---|---|
scroller | Scroller | 否 | 可滾動(dòng)組件的控制器。用于與可滾動(dòng)組件進(jìn)行綁定。 |
屬性
除支持通用屬性外,還支持以下屬性:
名稱(chēng) | 參數(shù)類(lèi)型 | 描述 |
---|---|---|
scrollable | ScrollDirection | 設(shè)置滾動(dòng)方向。 默認(rèn)值:ScrollDirection.Vertical |
scrollBar | BarState | 設(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)值。 |
scrollSnap10+ | ScrollSnapOptions | 設(shè)置Scroll組件的限位滾動(dòng)模式。 |
edgeEffect | value:EdgeEffect, options?:EdgeEffectOptions11+ |
設(shè)置邊緣滑動(dòng)效果。 - value:設(shè)置Scroll組件的邊緣滑動(dòng)效果,支持彈簧效果和陰影效果。 默認(rèn)值:EdgeEffect.None - options:設(shè)置組件內(nèi)容大小小于組件自身時(shí),是否開(kāi)啟滑動(dòng)效果。 默認(rèn)值:true |
enableScrollInteraction10+ | boolean | 設(shè)置是否支持滾動(dòng)手勢(shì),當(dāng)設(shè)置為false時(shí),無(wú)法通過(guò)手指或者鼠標(biāo)滾動(dòng),但不影響控制器的滾動(dòng)接口。 默認(rèn)值:true |
nestedScroll10+ | NestedScrollOptions | 嵌套滾動(dòng)選項(xiàng)。設(shè)置向前向后兩個(gè)方向上的嵌套滾動(dòng)模式,實(shí)現(xiàn)與父組件的滾動(dòng)聯(lián)動(dòng)。 |
friction10+ | number |?Resource | 設(shè)置摩擦系數(shù),手動(dòng)劃動(dòng)滾動(dòng)區(qū)域時(shí)生效,只對(duì)慣性滾動(dòng)過(guò)程有影響,對(duì)慣性滾動(dòng)過(guò)程中的鏈?zhǔn)叫Ч虚g接影響。 默認(rèn)值:非可穿戴設(shè)備為0.6,可穿戴設(shè)備為0.9 說(shuō)明: 設(shè)置為小于等于0的值時(shí),按默認(rèn)值處理 |
enablePaging11+ | boolean | 設(shè)置是否支持劃動(dòng)翻頁(yè)。 默認(rèn)值:false 說(shuō)明: 如果同時(shí)設(shè)置了劃動(dòng)翻頁(yè)enablePaging和限位滾動(dòng)scrollSnap,則scrollSnap優(yōu)先生效,enablePaging不生效。 |
ScrollDirection枚舉說(shuō)明
名稱(chēng) | 描述 |
---|---|
Horizontal | 僅支持水平方向滾動(dòng)。 |
Vertical | 僅支持豎直方向滾動(dòng)。 |
None | 不可滾動(dòng)。 |
Free(deprecated) | 支持豎直或水平方向滾動(dòng) 從API version 9開(kāi)始廢棄 |
ScrollSnapOptions10+
名稱(chēng) | 參數(shù)類(lèi)型 | 必填 | 描述 |
---|---|---|---|
snapAlign | ScrollSnapAlign | 是 | 設(shè)置Scroll組件限位滾動(dòng)時(shí)的對(duì)其方式。 說(shuō)明: 1.該屬性默認(rèn)值為ScrollSnapAlign.NONE。 2.該接口僅當(dāng)snapPagination屬性為Dimension時(shí)生效,不支持Array<Dimension>。 |
snapPagination | Dimension?|?Array<Dimension> | 否 | 設(shè)置Scroll組件限位滾動(dòng)時(shí)的限位點(diǎn),限位點(diǎn)即為Scroll組件能滑動(dòng)??康钠屏?。 說(shuō)明: 1.當(dāng)屬性為Dimension時(shí),表示每頁(yè)的大小,系統(tǒng)會(huì)按照該大小來(lái)自動(dòng)計(jì)算每個(gè)限位點(diǎn)的位置:如當(dāng)Dimension為500時(shí),實(shí)際的限位點(diǎn)即為[0,500,1000,1500,...]。 2.當(dāng)屬性為Array<Dimension>時(shí),每個(gè)Dimension代表限位點(diǎn)的位置。每個(gè)Dimension的范圍為[0,可滑動(dòng)距離],0和可滑動(dòng)距離的底部自動(dòng)成為限位點(diǎn)。 3.當(dāng)該屬性不填或者Dimension為小于等于0的輸入時(shí),按異常值,無(wú)限位滾動(dòng)處理。當(dāng)該屬性值為Array<Dimension>數(shù)組時(shí),數(shù)組中的數(shù)值必須為單調(diào)遞增。 4.當(dāng)輸入為百分比時(shí),實(shí)際的大小為Scroll組件的視口與百分比數(shù)值之積。 |
enableSnapToStart | boolean | 否 | 在Scroll組件限位滾動(dòng)模式下,該屬性設(shè)置為false后,運(yùn)行Scroll在開(kāi)頭和第一個(gè)限位點(diǎn)間自由滑動(dòng)。 說(shuō)明: 1.該屬性值默認(rèn)為true。 2.該屬性?xún)H當(dāng)snapPagination屬性為Array<Dimension>時(shí)生效,不支持Dimension。 |
enableSnapToEnd | boolean | 否 | 在Scroll組件限位滾動(dòng)模式下,該屬性設(shè)置為false后,運(yùn)行Scroll在最后一個(gè)限位點(diǎn)和末尾間自由滑動(dòng)。 說(shuō)明: 1.該屬性值默認(rèn)為true。 2.該屬性?xún)H當(dāng)snapPagination屬性為Array<Dimension>時(shí)生效,不支持Dimension。 |
事件
名稱(chēng) | 功能描述 |
---|---|
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)量,單位vp。 - state:當(dāng)前滾動(dòng)狀態(tài)。 - offsetRemain:實(shí)際滾動(dòng)量,單位vp。 觸發(fā)該事件的條件 : 1、滾動(dòng)組件觸發(fā)滾動(dòng)時(shí)觸發(fā),包括鍵鼠操作等其他觸發(fā)滾動(dòng)的輸入設(shè)置。 2、調(diào)用控制器接口時(shí)不觸發(fā)。 3、越界回彈不觸發(fā)。 4、拖動(dòng)滾動(dòng)條不觸發(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í)水平、豎直方向偏移量,單位vp。 觸發(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)畫(huà)的滾動(dòng),動(dòng)畫(huà)開(kāi)始時(shí)會(huì)觸發(fā)該事件。 觸發(fā)該事件的條件 : 1、滾動(dòng)組件開(kāi)始滾動(dòng)時(shí)觸發(fā),支持鍵鼠操作等其他觸發(fā)滾動(dòng)的輸入設(shè)置。 2、通過(guò)滾動(dòng)控制器API接口調(diào)用后開(kāi)始,帶過(guò)渡動(dòng)效。 |
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)畫(huà)的滾動(dòng),動(dòng)畫(huà)停止時(shí)會(huì)觸發(fā)該事件。 觸發(fā)該事件的條件 : 1、滾動(dòng)組件觸發(fā)滾動(dòng)后停止,支持鍵鼠操作等其他觸發(fā)滾動(dòng)的輸入設(shè)置。 2、通過(guò)滾動(dòng)控制器API接口調(diào)用后開(kāi)始,帶過(guò)渡動(dòng)效。 |
onReachStart11+(event: () => void) | Scroll到達(dá)起始位置時(shí)觸發(fā)。 說(shuō)明: Scroll初始化時(shí)會(huì)觸發(fā)一次,滾動(dòng)到起始位置時(shí)觸發(fā)一次。Scroll邊緣效果為彈簧效果時(shí),劃動(dòng)經(jīng)過(guò)起始位置時(shí)觸發(fā)一次,回彈回起始位置時(shí)再觸發(fā)一次。 |
onReachEnd11+(event: () => void) | Scroll到達(dá)末尾位置時(shí)觸發(fā)。 說(shuō)明: Scroll邊緣效果為彈簧效果時(shí),劃動(dòng)經(jīng)過(guò)末尾位置時(shí)觸發(fā)一次,回彈回末尾位置時(shí)再觸發(fā)一次。 |
說(shuō)明:
若通過(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。
Scroller
可滾動(dòng)容器組件的控制器,可以將此組件綁定至容器組件,然后通過(guò)它控制容器組件的滾動(dòng),同一個(gè)控制器不可以控制多個(gè)容器組件,目前支持綁定到List、Scroll、ScrollBar、Grid、WaterFlow上。
導(dǎo)入對(duì)象
scroller: Scroller = new Scroller()
scrollTo
scrollTo(value: { xOffset: number | string, yOffset: number | string, animation?: { duration?: number, curve?: Curve | ICurve } | boolean }): void
滑動(dòng)到指定位置。
參數(shù):
參數(shù)名 | 參數(shù)類(lèi)型 | 必填 | 參數(shù)描述 |
---|---|---|---|
xOffset | number?|?string | 是 | 水平滑動(dòng)偏移。 說(shuō)明: 該參數(shù)值不支持設(shè)置百分比。 當(dāng)值小于0時(shí),不帶動(dòng)畫(huà)的滾動(dòng),按0處理。帶動(dòng)畫(huà)的滾動(dòng),滾動(dòng)到起始位置后停止。 僅滾動(dòng)軸為x軸時(shí)生效。 |
yOffset | number?|?string | 是 | 垂直滑動(dòng)偏移。 說(shuō)明: 該參數(shù)值不支持設(shè)置百分比。 當(dāng)值小于0時(shí),不帶動(dòng)畫(huà)的滾動(dòng),按0處理。帶動(dòng)畫(huà)的滾動(dòng),滾動(dòng)到起始位置后停止。 僅滾動(dòng)軸為y軸時(shí)生效。 |
animation | {duration?:?number, curve?:?Curve?|?ICurve10+?}?|?boolean10+ | 否 | 動(dòng)畫(huà)配置: -?duration:?滾動(dòng)時(shí)長(zhǎng)設(shè)置。 -?curve:?滾動(dòng)曲線(xiàn)設(shè)置。 - boolean:?使能默認(rèn)彈簧動(dòng)效。 默認(rèn)值: { duration:?1000, curve:?Curve.Ease } boolean:?false 說(shuō)明: 設(shè)置為小于0的值時(shí),按默認(rèn)值顯示。 當(dāng)前List、Scroll、Grid、WaterFlow均支持boolean類(lèi)型和ICurve曲線(xiàn)。 |
scrollEdge
scrollEdge(value: Edge): void
滾動(dòng)到容器邊緣,不區(qū)分滾動(dòng)軸方向,Edge.Top和Edge.Start表現(xiàn)相同,Edge.Bottom和Edge.End表現(xiàn)相同。
參數(shù):
參數(shù)名 | 參數(shù)類(lèi)型 | 必填 | 參數(shù)描述 |
---|---|---|---|
value | Edge | 是 | 滾動(dòng)到的邊緣位置。 |
scrollPage9+
scrollPage(value: { next: boolean }): void
滾動(dòng)到下一頁(yè)或者上一頁(yè)。
參數(shù):
參數(shù)名 | 參數(shù)類(lèi)型 | 必填 | 參數(shù)描述 |
---|---|---|---|
next | boolean | 是 | 是否向下翻頁(yè)。true表示向下翻頁(yè),false表示向上翻頁(yè)。 |
scrollPage(deprecated)
參數(shù)名 | 參數(shù)類(lèi)型 | 必填 | 參數(shù)描述 |
---|---|---|---|
next | boolean | 是 | 是否向下翻頁(yè)。true表示向下翻頁(yè),false表示向上翻頁(yè)。 |
direction | Axis | 否 | 設(shè)置滾動(dòng)方向?yàn)樗交蜇Q直方向。 |
currentOffset
currentOffset(): OffsetResult
類(lèi)型 | 描述 |
---|---|
OffsetResult11+ | 返回當(dāng)前的滾動(dòng)偏移量。 說(shuō)明: 當(dāng)scroller控制器未綁定容器組件或者容器組件被異常釋放時(shí),currentOffset的返回值為空。 |
scrollToIndex
scrollToIndex(value: number, smooth?: boolean, align?: ScrollAlign): void
滑動(dòng)到指定Index。
開(kāi)啟smooth動(dòng)效時(shí),會(huì)對(duì)經(jīng)過(guò)的所有item進(jìn)行加載和布局計(jì)算,當(dāng)大量加載item時(shí)會(huì)導(dǎo)致性能問(wèn)題。
說(shuō)明:
僅支持Grid、List、WaterFlow組件。
參數(shù):
參數(shù)名 | 參數(shù)類(lèi)型 | 必填 | 參數(shù)描述 |
---|---|---|---|
value | number | 是 | 要滑動(dòng)到的目標(biāo)元素在當(dāng)前容器中的索引值。 說(shuō)明: value值設(shè)置成負(fù)值或者大于當(dāng)前容器子組件的最大索引值,視為異常值,本次跳轉(zhuǎn)不生效。 |
smooth10+? | boolean | 否 | 設(shè)置滑動(dòng)到列表項(xiàng)在列表中的索引值時(shí)是否有動(dòng)效,true表示有動(dòng)效,false表示沒(méi)有動(dòng)效。 默認(rèn)值:false。 |
align10+? | ScrollAlign | 否 | 指定滑動(dòng)到的元素與當(dāng)前容器的對(duì)齊方式。 List中的默認(rèn)值為:ScrollAlign.START。Grid中默認(rèn)值為:ScrollAlign.AUTO 說(shuō)明: 僅List、Grid組件支持該參數(shù)。 |
scrollBy9+
scrollBy(dx: Length, dy: Length): void
滑動(dòng)指定距離。
說(shuō)明:
支持Scroll、List、Grid、WaterFlow組件。
參數(shù):
參數(shù)名 | 參數(shù)類(lèi)型 | 必填 | 參數(shù)描述 |
---|---|---|---|
dx | Length | 是 | 水平方向滾動(dòng)距離,不支持百分比形式。 |
dy | Length | 是 | 豎直方向滾動(dòng)距離,不支持百分比形式。 |
isAtEnd10+
isAtEnd(): boolean
查詢(xún)組件是否滾動(dòng)到底部。
說(shuō)明:
支持Scroll、List、Grid、WaterFlow組件。
返回值
類(lèi)型 | 描述 |
---|---|
boolean | true表示組件已經(jīng)滾動(dòng)到底部,false表示組件還沒(méi)滾動(dòng)到底部。 |
getItemRect11+
getItemRect(index: number): RectResult
獲取子組件的大小位置。
說(shuō)明:
支持Scroll、List、Grid、WaterFlow組件。
參數(shù):
參數(shù)名 | 參數(shù)類(lèi)型 | 必填 | 參數(shù)描述 |
---|---|---|---|
index | number | 是 | 子組件的索引值。 |
說(shuō)明:
- index必須是當(dāng)前顯示區(qū)域顯示的子組件的索引值,否則視為非法值。
- 非法值返回的大小和位置均為0。
返回值:
類(lèi)型 | 說(shuō)明 |
---|---|
RectResult | 子組件的大小和相對(duì)于組件的位置。 |
OffsetResult11+
名稱(chēng) | 類(lèi)型 | 描述 |
---|---|---|
xOffset | number | 水平滑動(dòng)偏移; 返回值單位為vp。 |
yOffset | number | 豎直滑動(dòng)偏移。 返回值單位為vp。 |
ScrollAlign10+枚舉說(shuō)明
名稱(chēng) | 描述 |
---|---|
START | 首部對(duì)齊。指定item首部與List首部對(duì)齊。 |
CENTER | 居中對(duì)齊。指定item主軸方向居中對(duì)齊于List。 |
END | 尾部對(duì)齊。指定item尾部與List尾部對(duì)齊。 |
AUTO | 自動(dòng)對(duì)齊。 若指定item完全處于顯示區(qū),不做調(diào)整。否則依照滑動(dòng)距離最短的原則,將指定item首部對(duì)齊或尾部對(duì)齊于List,使指定item完全處于顯示區(qū)。 |
NestedScrollOptions10+對(duì)象說(shuō)明
名稱(chēng) | 類(lèi)型 | 必填 | 描述 |
---|---|---|---|
scrollForward | NestedScrollMode | 是 | 可滾動(dòng)組件往末尾端滾動(dòng)時(shí)的嵌套滾動(dòng)選項(xiàng)。 |
scrollBackward | NestedScrollMode | 是 | 可滾動(dòng)組件往起始端滾動(dòng)時(shí)的嵌套滾動(dòng)選項(xiàng)。 |
NestedScrollMode10+枚舉說(shuō)明
名稱(chēng) | 描述 |
---|---|
SELF_ONLY | 只自身滾動(dòng),不與父組件聯(lián)動(dòng)。 |
SELF_FIRST | 自身先滾動(dòng),自身滾動(dòng)到邊緣以后父組件滾動(dòng)。父組件滾動(dòng)到邊緣以后,如果父組件有邊緣效果,則父組件觸發(fā)邊緣效果,否則子組件觸發(fā)邊緣效果。 |
PARENT_FIRST | 父組件先滾動(dòng),父組件滾動(dòng)到邊緣以后自身滾動(dòng)。自身滾動(dòng)到邊緣后,如果有邊緣效果,會(huì)觸發(fā)自身的邊緣效果,否則觸發(fā)父組件的邊緣效果。 |
PARALLEL | 自身和父組件同時(shí)滾動(dòng),自身和父組件都到達(dá)邊緣以后,如果自身有邊緣效果,則自身觸發(fā)邊緣效果,否則父組件觸發(fā)邊緣效果。 |
EdgeEffectOptions11+對(duì)象說(shuō)明
參數(shù)名 | 類(lèi)型 | 必填 | 描述 |
---|---|---|---|
alwaysEnabled | boolean | 是 | 組件內(nèi)容大小小于組件自身時(shí),設(shè)置是否開(kāi)啟滑動(dòng)效果 |
示例
示例1
// xxx.ets
import Curves from '@ohos.curves'
@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: number) => {
Text(item.toString())
.width('90%')
.height(150)
.backgroundColor(0xFFFFFF)
.borderRadius(15)
.fontSize(16)
.textAlign(TextAlign.Center)
.margin({ top: 10 })
}, (item: string) => item)
}.width('100%')
}
.scrollable(ScrollDirection.Vertical) // 滾動(dòng)方向縱向
.scrollBar(BarState.On) // 滾動(dòng)條常駐顯示
.scrollBarColor(Color.Gray) // 滾動(dòng)條顏色
.scrollBarWidth(10) // 滾動(dòng)條寬度
.friction(0.6)
.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')
.height('5%')
.onClick(() => { // 點(diǎn)擊后下滑指定距離150.0vp
this.scroller.scrollBy(0, 150)
})
.margin({ top: 10, left: 20 })
Button('scroll 100')
.height('5%')
.onClick(() => { // 點(diǎn)擊后滑動(dòng)到指定位置,即下滑100.0vp的距離
const yOffset: number = this.scroller.currentOffset().yOffset;
this.scroller.scrollTo({ xOffset: 0, yOffset: yOffset + 100 })
})
.margin({ top: 60, left: 20 })
Button('scroll 100')
.height('5%')
.onClick(() => { // 點(diǎn)擊后滑動(dòng)到指定位置,即下滑100.0vp的距離,滑動(dòng)過(guò)程配置有動(dòng)畫(huà)
let curve = Curves.interpolatingSpring(10, 1, 228, 30) //創(chuàng)建一個(gè)階梯曲線(xiàn)
const yOffset: number = this.scroller.currentOffset().yOffset;
this.scroller.scrollTo({ xOffset: 0, yOffset: yOffset + 100, animation: { duration: 1000, curve: curve } })
})
.margin({ top: 110, left: 20 })
Button('back top')
.height('5%')
.onClick(() => { // 點(diǎn)擊后回到頂部
this.scroller.scrollEdge(Edge.Top)
})
.margin({ top: 160, left: 20 })
Button('next page')
.height('5%')
.onClick(() => { // 點(diǎn)擊后滑到下一頁(yè)
this.scroller.scrollPage({ next: true })
})
.margin({ top: 210, left: 20 })
}.width('100%').height('100%').backgroundColor(0xDCDCDC)
}
}
示例2
@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: number) => {
ListItem() {
Text("ListItem" + item)
.width("100%")
.height("100%")
.borderRadius(15)
.fontSize(16)
.textAlign(TextAlign.Center)
.backgroundColor(Color.White)
}.width("100%").height(100)
}, (item: string) => item)
}
.width("100%")
.height("50%")
.edgeEffect(EdgeEffect.None)
.friction(0.6)
.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)
}
}
示例3
@Entry
@Component
struct StickyNestedScroll {
@State message: string = 'Hello World'
@State arr: number[] = []
@Styles
listCard() {
.backgroundColor(Color.White)
.height(72)
.width("100%")
.borderRadius(12)
}
build() {
Scroll() {
Column() {
Text("Scroll Area")
.width("100%")
.height("40%")
.backgroundColor('#0080DC')
.textAlign(TextAlign.Center)
Tabs({ barPosition: BarPosition.Start }) {
TabContent() {
List({ space: 10 }) {
ForEach(this.arr, (item: number) => {
ListItem() {
Text("item" + item)
.fontSize(16)
}.listCard()
}, (item: string) => item)
}.width("100%")
.edgeEffect(EdgeEffect.Spring)
.nestedScroll({
scrollForward: NestedScrollMode.PARENT_FIRST,
scrollBackward: NestedScrollMode.SELF_FIRST
})
}.tabBar("Tab1")
TabContent() {
}.tabBar("Tab2")
}
.vertical(false)
.height("100%")
}.width("100%")
}
.edgeEffect(EdgeEffect.Spring)
.friction(0.6)
.backgroundColor('#DCDCDC')
.scrollBar(BarState.Off)
.width('100%')
.height('100%')
}
aboutToAppear() {
for (let i = 0; i < 30; i++) {
this.arr.push(i)
}
}
}
示例4
@Entry
@Component
struct Index {
scroller: Scroller = new Scroller;
private arr: number[] = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]
build() {
Scroll(this.scroller) {
Column() {
ForEach(this.arr, (item: number) => {
Text(item.toString())
.width('90%')
.height(200)
.backgroundColor(0xFFFFFF)
.borderWidth(1)
.borderColor(Color.Black)
.borderRadius(15)
.fontSize(16)
.textAlign(TextAlign.Center)
}, (item: string) => item)
}.width('100%').backgroundColor(0xDCDCDC)
}
.backgroundColor(Color.Yellow)
.height('100%')
.edgeEffect(EdgeEffect.Spring)
.scrollSnap({snapAlign:ScrollSnapAlign.START, snapPagination:400, enableSnapToStart:true, enableSnapToEnd:true})
}
}
最后,有很多小伙伴不知道學(xué)習(xí)哪些鴻蒙開(kāi)發(fā)技術(shù)?不知道需要重點(diǎn)掌握哪些鴻蒙應(yīng)用開(kāi)發(fā)知識(shí)點(diǎn)?而且學(xué)習(xí)時(shí)頻繁踩坑,最終浪費(fèi)大量時(shí)間。所以有一份實(shí)用的鴻蒙(HarmonyOS NEXT)資料用來(lái)跟著學(xué)習(xí)是非常有必要的。?
這份鴻蒙(HarmonyOS NEXT)資料包含了鴻蒙開(kāi)發(fā)必掌握的核心知識(shí)要點(diǎn),內(nèi)容包含了(ArkTS、ArkUI開(kāi)發(fā)組件、Stage模型、多端部署、分布式應(yīng)用開(kāi)發(fā)、音頻、視頻、WebGL、OpenHarmony多媒體技術(shù)、Napi組件、OpenHarmony內(nèi)核、Harmony南向開(kāi)發(fā)、鴻蒙項(xiàng)目實(shí)戰(zhàn)等等)鴻蒙(HarmonyOS NEXT)技術(shù)知識(shí)點(diǎn)。
希望這一份鴻蒙學(xué)習(xí)資料能夠給大家?guī)?lái)幫助,有需要的小伙伴自行領(lǐng)取,限時(shí)開(kāi)源,先到先得~無(wú)套路領(lǐng)?。?!
獲取這份完整版高清學(xué)習(xí)路線(xiàn),請(qǐng)點(diǎn)擊→純血版全套鴻蒙HarmonyOS學(xué)習(xí)資料
鴻蒙(HarmonyOS NEXT)最新學(xué)習(xí)路線(xiàn)
-
?HarmonOS基礎(chǔ)技能
-
HarmonOS就業(yè)必備技能?
- ?HarmonOS多媒體技術(shù)
- 鴻蒙NaPi組件進(jìn)階
- HarmonOS高級(jí)技能
-
初識(shí)HarmonOS內(nèi)核?
- 實(shí)戰(zhàn)就業(yè)級(jí)設(shè)備開(kāi)發(fā)
有了路線(xiàn)圖,怎么能沒(méi)有學(xué)習(xí)資料呢,小編也準(zhǔn)備了一份聯(lián)合鴻蒙官方發(fā)布筆記整理收納的一套系統(tǒng)性的鴻蒙(OpenHarmony )學(xué)習(xí)手冊(cè)(共計(jì)1236頁(yè))與鴻蒙(OpenHarmony )開(kāi)發(fā)入門(mén)教學(xué)視頻,內(nèi)容包含:ArkTS、ArkUI、Web開(kāi)發(fā)、應(yīng)用模型、資源分類(lèi)…等知識(shí)點(diǎn)。
獲取以上完整版高清學(xué)習(xí)路線(xiàn),請(qǐng)點(diǎn)擊→純血版全套鴻蒙HarmonyOS學(xué)習(xí)資料
《鴻蒙 (OpenHarmony)開(kāi)發(fā)入門(mén)教學(xué)視頻》
《鴻蒙生態(tài)應(yīng)用開(kāi)發(fā)V2.0白皮書(shū)》
《鴻蒙 (OpenHarmony)開(kāi)發(fā)基礎(chǔ)到實(shí)戰(zhàn)手冊(cè)》
OpenHarmony北向、南向開(kāi)發(fā)環(huán)境搭建
?《鴻蒙開(kāi)發(fā)基礎(chǔ)》
- ArkTS語(yǔ)言
- 安裝DevEco Studio
- 運(yùn)用你的第一個(gè)ArkTS應(yīng)用
- ArkUI聲明式UI開(kāi)發(fā)
- .……
?《鴻蒙開(kāi)發(fā)進(jìn)階》
- Stage模型入門(mén)
- 網(wǎng)絡(luò)管理
- 數(shù)據(jù)管理
- 電話(huà)服務(wù)
- 分布式應(yīng)用開(kāi)發(fā)
- 通知與窗口管理
- 多媒體技術(shù)
- 安全技能
- 任務(wù)管理
- WebGL
- 國(guó)際化開(kāi)發(fā)
- 應(yīng)用測(cè)試
- DFX面向未來(lái)設(shè)計(jì)
- 鴻蒙系統(tǒng)移植和裁剪定制
- ……
《鴻蒙進(jìn)階實(shí)戰(zhàn)》
- ArkTS實(shí)踐
- UIAbility應(yīng)用
- 網(wǎng)絡(luò)案例
- ……
?獲取以上完整鴻蒙HarmonyOS學(xué)習(xí)資料,請(qǐng)點(diǎn)擊→純血版全套鴻蒙HarmonyOS學(xué)習(xí)資料
總結(jié)
總的來(lái)說(shuō),華為鴻蒙不再兼容安卓,對(duì)中年程序員來(lái)說(shuō)是一個(gè)挑戰(zhàn),也是一個(gè)機(jī)會(huì)。只有積極應(yīng)對(duì)變化,不斷學(xué)習(xí)和提升自己,他們才能在這個(gè)變革的時(shí)代中立于不敗之地。?文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-850216.html
文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-850216.html
到了這里,關(guān)于鴻蒙Harmony應(yīng)用開(kāi)發(fā)—ArkTS聲明式開(kāi)發(fā)(容器組件:Scroll)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!