在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

HarmonyOS實(shí)戰(zhàn):Tab頂部滑動(dòng)懸停功能實(shí)現(xiàn)

尤楓 ? 來源:jf_54996641 ? 2025-06-24 17:07 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

前言

日常開發(fā)過程中,遇到這種 Scroll 嵌套 List 列表滑動(dòng)頂部懸停的場(chǎng)景十分常見,在鴻蒙開發(fā)時(shí)也正好實(shí)現(xiàn)了這個(gè)功能,本篇文章將帶你一步步實(shí)現(xiàn) Tab 頂部懸停的效果,建議點(diǎn)贊收藏!

實(shí)現(xiàn)效果

先看本文的最終實(shí)現(xiàn)效果如下:

需求分析

  • 當(dāng)整體向上滑動(dòng)時(shí),優(yōu)先 Scroll 向上滑動(dòng)。
  • 當(dāng)整體向下滑動(dòng)時(shí),優(yōu)先 Scroll 向下滑動(dòng)。

技術(shù)實(shí)現(xiàn)

  1. 首先需要實(shí)現(xiàn)基礎(chǔ)頁面布局,直接使用 Scroll 嵌套 List 布局。將 List 用 Tab 布局嵌套起來。
Scroll(this.scroller) {
          Column() {
            Text("內(nèi)容")
              .textAlign(TextAlign.Center)
              .fontColor(Color.White)
              .backgroundColor(this.themColor.value)
              .width('100%')
              .height('40%')

            Tabs({ barPosition: BarPosition.Start }) {
              TabContent() {
                Column() {
                  Refresh({refreshing:false,friction:0,offset:0}){
                    List({ space: 10, scroller: this.scrollerForList }) {
                      ForEach(this.list, (item: string) = > {
                        ListItem() {
                          Text('ListItem' + item)
                            .width('100%')
                            .height('100%')
                            .borderRadius(15)
                            .fontSize(24)
                            .textAlign(TextAlign.Center)
                            .backgroundColor(Color.White)
                        }
                        .width('100%')
                        .height(100)
                      }, (item: string) = > item)
                    }
                   
                  .pullToRefresh(true)
                }

              }.tabBar('你好')

              TabContent() {
                Column().width('100%').height('100%').backgroundColor('#007DFF')
              }.tabBar('好的')

            }
            }

這里布局比較簡(jiǎn)單,使用兩個(gè) tab 用來切換布局。外層使用 Scroll 包裹,其中一個(gè) tab 的里面使用 List 布局。相信這對(duì)大多人來說沒有什么難度。

  1. 搭建好基礎(chǔ)布局后,開始處理滑動(dòng)沖突問題。根據(jù)實(shí)現(xiàn)效果來看,每次都是讓外層的 Scroll 優(yōu)先滑動(dòng),需要給 List 增加攔截處理,讓每次滑動(dòng)優(yōu)先外層 Scroll 布局滑動(dòng),這里使用nestedScroll 屬性的NestedScrollMode.PARENT_FIRST,即優(yōu)先父布局滑動(dòng)。
.nestedScroll({
                      scrollForward: NestedScrollMode.PARENT_FIRST,
                      scrollBackward: NestedScrollMode.PARENT_FIRST
                    })
  1. 這時(shí)不管怎么上下滑動(dòng),里面的 List 都不會(huì)滑動(dòng),只讓外層的 Scroll 組件滑動(dòng)。接下來處理 List 的滑動(dòng)事件。
  2. 首先定義一個(gè)枚舉類型,用來標(biāo)記滑動(dòng)位置。
enum ScrollPosition {
  top,
  center,
  bottom
}
  1. 接下來分別實(shí)現(xiàn) List 的 onReachStart,onReachEnd,onScrollFrameBegin 三個(gè)方法。這個(gè)比較容易理解,滑動(dòng)道頂部時(shí),記錄當(dāng)前位置為頂部,滑動(dòng)底部時(shí),記錄當(dāng)前位置為底部,onScrollFrameBegin 表示滑動(dòng)過程中的回調(diào),根據(jù)當(dāng)前滑動(dòng)位置和滑動(dòng)偏移量來記錄是否繼續(xù)滑動(dòng)。
.onReachStart(() = > {
                      this.listPosition = ScrollPosition.top
                    })
                    .onReachEnd(() = > {
                      this.listPosition = ScrollPosition.bottom
                    })
                    .onScrollFrameBegin((offset: number, state: ScrollState) = > {
                      if ((this.listPosition == ScrollPosition.top && offset <=0)||(this.listPosition == ScrollPosition.bottom && offset >=0)) {
                        return {offsetRemain :offset}
                      }
                      this.listPosition = ScrollPosition.center
                      return {offsetRemain:offset}
                    })
  1. 再看外層 Scroll 的滑動(dòng)方法監(jiān)聽,同樣也是分別實(shí)現(xiàn)這三種方法,不過注意onScrollFrameBegin 里面返回值和 List 的不同,當(dāng) Scroll 滑動(dòng)到底部活著頂部時(shí),Scroll 不再滑動(dòng),注意看返回值為 0,否則 Scroll 才滑動(dòng)。
.onReachStart(() = > {
          this.listPosition = ScrollPosition.top
        })
        .onReachEnd(() = > {
          this.listPosition = ScrollPosition.bottom
        })
        .onScrollFrameBegin((offset: number, _: ScrollState) = > {
          if ((this.listPosition == ScrollPosition.top && offset <= 0) || (
            this.listPosition == ScrollPosition.bottom && offset >= 0)
          ) {
            return { offsetRemain: 0 }
          }
          //不在底部
          this.listPosition = ScrollPosition.center
          return { offsetRemain: offset }
        })
  1. 根據(jù) List 組件和 Scroll 組件的滑動(dòng)監(jiān)聽,用來判斷哪種狀態(tài)下 Scroll 優(yōu)先滑動(dòng),當(dāng) Scroll 滑動(dòng)到底部活頂部時(shí),通過返回值賦值為 0 ,阻止 Scroll 滑動(dòng),將滑動(dòng)事件交個(gè)內(nèi)部的 List 滑動(dòng)。注意 List 通過設(shè)置nestedScroll 將滑動(dòng)事件優(yōu)先讓外層 Scroll 處理。所以一開始是外層的 Scroll 先滑動(dòng)。

總結(jié)

本文主要是根據(jù)實(shí)際需求實(shí)現(xiàn)的滑動(dòng)效果,每次都優(yōu)先讓 Scroll 滑動(dòng),還有更多的滑動(dòng)場(chǎng)景都可以用這種方式的思路解決,主要通過不同的判斷條件即可實(shí)現(xiàn)。例如向下滑動(dòng)時(shí)優(yōu)先讓 List 滑動(dòng),然后再讓 Scroll 滑動(dòng)。學(xué)會(huì)的小伙伴趕緊動(dòng)手試試吧!

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 鴻蒙
    +關(guān)注

    關(guān)注

    59

    文章

    2569

    瀏覽量

    43884
  • HarmonyOS
    +關(guān)注

    關(guān)注

    80

    文章

    2145

    瀏覽量

    32483
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    HarmonyOS實(shí)戰(zhàn): 城市選擇功能的快速實(shí)現(xiàn)

    最近在日常開發(fā)過程中,需要實(shí)現(xiàn)城市選擇功能,同時(shí)支持模糊搜索。看似簡(jiǎn)單的功能動(dòng)手實(shí)現(xiàn)起來卻有很多難點(diǎn)。本篇文章詳細(xì)記錄開發(fā)過程中遇到的問題和對(duì)應(yīng)的解決方法,希望能夠幫助你,建議點(diǎn)贊收藏
    的頭像 發(fā)表于 06-24 17:07 ?69次閱讀

    HarmonyOS實(shí)戰(zhàn):快速實(shí)現(xiàn)一個(gè)上下滾動(dòng)的廣告控件

    上要想實(shí)現(xiàn)這樣的功能并不容易,那么在鴻蒙上怎么實(shí)現(xiàn)這樣的功能呢?本篇文章教你使用最簡(jiǎn)單的方式實(shí)現(xiàn)一個(gè)支持上下滾動(dòng)的廣告控件,建議點(diǎn)贊收藏!
    的頭像 發(fā)表于 06-24 17:05 ?81次閱讀

    HarmonyOS實(shí)戰(zhàn)實(shí)現(xiàn)任意拖動(dòng)的應(yīng)用懸浮窗口

    為了增加應(yīng)用程序功能的豐富性和便利性,很多應(yīng)用都會(huì)提供一個(gè)懸浮窗口實(shí)現(xiàn)多頁面顯示。特別是一些性能檢測(cè)工具,比如 dokit 。在鴻蒙上怎么實(shí)現(xiàn)類似的全局懸浮窗口呢?閱讀完本篇文章你將學(xué)會(huì)在鴻蒙上如何
    的頭像 發(fā)表于 06-24 17:04 ?79次閱讀

    HarmonyOS 5】桌面快捷方式功能實(shí)現(xiàn)詳解

    HarmonyOS 5】桌面快捷方式功能實(shí)現(xiàn)詳解 ##鴻蒙開發(fā)能力 ##HarmonyOS SDK應(yīng)用服務(wù)##鴻蒙金融類應(yīng)用 (金融理財(cái)# 一、前言 在移動(dòng)應(yīng)用開發(fā)中,如何讓用戶快速
    的頭像 發(fā)表于 06-21 16:42 ?157次閱讀
    【<b class='flag-5'>HarmonyOS</b> 5】桌面快捷方式<b class='flag-5'>功能</b><b class='flag-5'>實(shí)現(xiàn)</b>詳解

    HarmonyOS實(shí)戰(zhàn):組件化項(xiàng)目搭建

    前言 鴻蒙應(yīng)用開發(fā)已經(jīng)成為互聯(lián)網(wǎng)新的風(fēng)口,開發(fā)鴻蒙軟件已經(jīng)成為今年工作的核心目標(biāo)。在軟件開發(fā)過程中,對(duì)于復(fù)雜度較大,功能較多的軟件都會(huì)采用組件化項(xiàng)目架構(gòu),那么對(duì)于鴻蒙應(yīng)用開發(fā)是否也能實(shí)現(xiàn)組件化呢
    的頭像 發(fā)表于 06-09 14:58 ?166次閱讀
    <b class='flag-5'>HarmonyOS</b><b class='flag-5'>實(shí)戰(zhàn)</b>:組件化項(xiàng)目搭建

    鴻蒙5開發(fā)寶藏案例分享---一多開發(fā)實(shí)例(股票類)

    ;{/*...*/}) }.width(\'70%\') // 固定寬度觸發(fā)截?cái)?} ? 開發(fā)經(jīng)驗(yàn): 當(dāng)Tab超出容器時(shí)自動(dòng)隱藏并顯示\"...\" 用Blank組件實(shí)現(xiàn)間距自動(dòng)填充 雙指滑動(dòng)
    發(fā)表于 06-03 16:13

    鴻蒙5開發(fā)寶藏案例分享---折疊屏懸停態(tài)開發(fā)實(shí)踐

    HarmonyOS早就準(zhǔn)備好了超多實(shí)用案例,今天必須帶大家解鎖\"懸停態(tài)\"開發(fā)的正確姿勢(shì),手慢無哦~ ?** 先來點(diǎn)干貨:什么是懸停態(tài)?** 就是把折疊屏像筆記本電腦那樣半折立在桌上
    發(fā)表于 06-03 12:04

    HarmonyOS5云服務(wù)技術(shù)分享--登錄郵件功能整理

    高度封裝的實(shí)現(xiàn)方案。希望本文能幫你快速落地功能,同時(shí)注重安全與體驗(yàn)的平衡。如果有更多實(shí)戰(zhàn)問題,歡迎在評(píng)論區(qū)留言交流,一起玩轉(zhuǎn)HarmonyOS生態(tài)! ??Happy Coding! ?
    發(fā)表于 05-22 16:04

    迅為RK3568驅(qū)動(dòng)指南GPIO子系統(tǒng)實(shí)戰(zhàn):實(shí)現(xiàn)動(dòng)態(tài)切換引腳復(fù)用功能

    迅為RK3568驅(qū)動(dòng)指南GPIO子系統(tǒng)實(shí)戰(zhàn):實(shí)現(xiàn)動(dòng)態(tài)切換引腳復(fù)用功能
    的頭像 發(fā)表于 05-22 14:27 ?691次閱讀
    迅為RK3568驅(qū)動(dòng)指南GPIO子系統(tǒng)<b class='flag-5'>實(shí)戰(zhàn)</b>:<b class='flag-5'>實(shí)現(xiàn)</b>動(dòng)態(tài)切換引腳復(fù)用<b class='flag-5'>功能</b>

    Pura X****闊折疊適配:解鎖超視覺與高效交互的全新體驗(yàn)

    時(shí)列表能填滿頂部剩余空間。 以上方法可實(shí)現(xiàn)流暢的滑動(dòng)沉浸式瀏覽體驗(yàn),同時(shí)保證頁面布局的適應(yīng)性和美觀性。 目前,小紅書、蜻蜓FM等應(yīng)用已依據(jù)HarmonyOS開發(fā)者官網(wǎng)設(shè)備場(chǎng)景專區(qū)的最佳
    發(fā)表于 04-14 15:30

    HarmonyOS NEXT 應(yīng)用開發(fā)練習(xí):智能視頻推薦

    一、整體思路 本DEMO展示了如何在HarmonyOS NEXT平臺(tái)上開發(fā)一個(gè)智能視頻推薦應(yīng)用。應(yīng)用通過模擬的用戶偏好數(shù)據(jù),為用戶推薦可能感興趣的視頻。用戶可以通過滑動(dòng)屏幕查看推薦的視頻列表,并點(diǎn)擊
    發(fā)表于 01-02 16:26

    滑動(dòng)變阻器的優(yōu)缺點(diǎn)對(duì)比

    滑動(dòng)變阻器的優(yōu)點(diǎn) 1. 精確控制 滑動(dòng)變阻器能夠提供精確的電阻值調(diào)整,這對(duì)于需要精細(xì)控制電流的實(shí)驗(yàn)和應(yīng)用至關(guān)重要。通過改變滑動(dòng)觸點(diǎn)的位置,可以實(shí)現(xiàn)對(duì)電阻值的連續(xù)調(diào)整,從而精確控制電路中
    的頭像 發(fā)表于 11-25 15:13 ?2059次閱讀

    滑動(dòng)變阻器的應(yīng)用領(lǐng)域 滑動(dòng)變阻器在電路中的作用

    觀察和理解電路中電流和電壓的變化。 2. 工業(yè)自動(dòng)化 在工業(yè)自動(dòng)化領(lǐng)域,滑動(dòng)變阻器被用于控制電機(jī)的速度和力矩。通過調(diào)整電阻值,可以精確控制電機(jī)的電流,從而實(shí)現(xiàn)對(duì)電機(jī)運(yùn)行狀態(tài)的精細(xì)調(diào)節(jié)。 3. 音頻設(shè)備 在音頻設(shè)備中,滑動(dòng)變阻
    的頭像 發(fā)表于 11-25 15:01 ?3651次閱讀

    滑動(dòng)變阻器的作用是什么?

    的電壓大小。這對(duì)于實(shí)現(xiàn)對(duì)電子設(shè)備的精確控制具有重要意義。 滑動(dòng)變阻器還可以用于實(shí)現(xiàn)電路的分壓功能,在某些電路中,需要將電源電壓分成幾個(gè)不同的電壓值。這時(shí),可以使用
    發(fā)表于 10-08 16:39

    滑動(dòng)變阻器調(diào)到最大阻值的目的

    滑動(dòng)變阻器是一種常用的電子元件,其主要功能是通過改變電阻值來控制電路中的電流。在許多電子設(shè)備和實(shí)驗(yàn)中,滑動(dòng)變阻器的調(diào)節(jié)能力對(duì)于實(shí)現(xiàn)精確控制和優(yōu)化性能至關(guān)重要。本文將探討
    的頭像 發(fā)表于 08-05 11:03 ?4330次閱讀
    主站蜘蛛池模板: 国产成人在线影院 | 天天干狠狠干 | 久久久午夜 | 国产福利你懂的 | bt在线www天堂资源网 | 抽搐一进一出gif免费男男 | 成人午夜毛片 | 国产美女精品一区二区三区 | www男人的天堂 | 网站在线观看视频 | 激情网五月天 | 久久香蕉国产视频 | 99久久国产综合精品国 | 天天做天天操 | 永久视频免费 | 中文字幕人成不卡一区 | 亚洲一级毛片免费在线观看 | 最新版天堂资源中文官网 | 国产美女一级高清免费观看 | www.色五月| h小视频在线 | 天天都色 | 久久草在线看 | aⅴ天堂| 深夜视频在线观看免费 | 亚洲一区免费在线 | 亚洲伊人天堂 | 美女视频网站色软件免费视频 | 日本一卡二卡≡卡四卡精品 | 天堂视频免费在线观看 | 中文字幕一二三四区2021 | 最近2018年在线中文字幕高清 | 美人岛福利 | 女性私密部位扒开的视频 | 欧美在线一级视频 | 国产精品毛片天天看片 | 色天天综合色天天看 | bt 另类 专区 欧美 制服 | 国产精品bdsm在线调教 | 国产日本久久久久久久久婷婷 | 日韩一级一欧美一级国产 |