精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

Webview 和 React Native 中吸頂效果實現

開發 前端
在移動端開發中,webview 已經成為很重要的一部分,比如 app 中內嵌的 web 頁面,或者小程序的視圖載體,本質上都是 webview。

一、前言

在跨端開發中,離不開一些吸頂的交互場景,可以參考淘寶或是京東類電商 app 中一些 tab ,在整個容器滑動的過程中,吸頂效果非常的連貫和絲滑的,當然這些 tab 可能是用 native 開發的,但是跨端應用也能實現很不錯的吸頂效果,那么今天我們就來研究一下跨端開發是如何實現吸頂的。

希望通過這篇文章,你將學習到:

  • webview 中吸頂的實現方式。
  • React Native 中吸頂方法,SectionList 是如何實現吸頂的。

創作不易,希望屏幕前的你能給筆者賞個贊,以此鼓勵我繼續創作前端硬文。

二、webview 吸頂實現方式

在移動端開發中,webview 已經成為很重要的一部分,比如 app 中內嵌的 web 頁面,或者小程序的視圖載體,本質上都是 webview。

基于 webview 的混合開發模式非常受到歡迎,回到今天的主題上來,在 webview 中如何實現吸頂效果呢?

2.1 position :sticky

webview 本質上就是 web 應用,所以我們可以使用 css 屬性來做很多交互效果。如果說到吸頂效果,這里首先想到的就是 position:sticky 粘性屬性。

position:sticky 是一個新的css3屬性,它的表現類似于 position:relative 和 position:fixed 的交集。

在目標區域在屏幕中可見時,它的行為就像 position:relative;

而當頁面滾動超出目標區域時,它的表現就像 position:fixed,它會固定在目標位置。

通過上面可以得出,如果實現吸頂效果,設置一個 css 屬性就能實現。

圖片

如上圖所示,圖中 head 部分是需要吸頂的內容,那么把 head 加上 position:sticky 就可以了。

sticky 的缺點:

當然 sticky 也有一些缺點:

sticky 屬性存在兼容性。

sticky 和 absolute 定位屬性在 ios 上的表現不友好,在 scrollview 等視圖容器組件內部滾動時候,可能存在抖動的問題,這樣用戶體驗非常差。

2.2 scrollview

webview 還有一種實現吸頂的方法,就是通過 scrollview ,scrollview 是什么?scrollview 是一個滾動的容器組件,web 中并沒有現成的 scrollview 組件,常見的 scrollview 組件主要存在小程序或者一些跨段解決方案中,比如 Taro 中的 Scrollview,這些組件并非是原生組件,都是在各個平臺底層基于原生的 DOM 元素和 EventListener 封裝的。

以微信小程序為例子,看一下 scroll-view 如何實現吸頂,這種方式主要是依靠計算的方式,來確定什么時候元素應該吸頂了。因為 scroll-view 上有回調函數 bindscroll ,可以實時的得到滾動的距離,使用滾動距離,可以推導出吸頂臨界點,比如:

圖片

通過上面可以推導出 offsetTop === scrollTop 此時就是 current 吸頂的臨界點。當然在不同場景下,這個臨界點可以會有區別,但大體思路是不變的。

但是目前可能存在一些問題,就是如果我們繼續通過 position:absolute 來觸發吸頂的話,還會有 2.1 面臨的問題——在 scroll-view 中使用了定位產生抖動,那么應該如何處理呢?

筆者在這里推薦大家一種方法就是,用兩個吸頂模塊,來模擬吸頂效果的實現:

  • 如上 current 是需要吸頂的組件,但是我們準備兩個狀態一樣的組件 current1 和 current2,current1 在 scroll-view 外部,用 fixed 定位,定位在容器頂部,current2 在 scroll-view 內部,不加任何定位效果。
  • 在正常情況下,不是吸頂情況下,current1 是隱藏狀態 ,current2 是顯示狀態。
  • 如果達到了吸頂的臨界點,那么改變狀態,current1 變成顯示狀態,current2 變成隱藏狀態,這里有一點需要注意,因為我們隱藏了 current2 如果不做處理,會讓下面元素頂上來,這里處理的方案是通過一個元素占位,如下面代碼塊中 class="hold" 元素,就是占位元素。占位元素的高度和 current2 高度相同。

圖片

用代碼簡單描述一下過程:

wxml中:

<current1 wx-if="{{ show }}" >
<scroll-view bindscroll="{{ handleScroll }}" >
<view class="hold" wx-if="{{ show }}" />
<current2 wx-if="{{ !show }}" >
</scroll-view>

js 中:

/* 處理滾動事件 */
handleScroll(event){
const { scrollTop } = event.detail
const { offsetTop,show }= this.data
const isCeiling = scrollTop === offsetTop
if(isCeiling !== show ){
/* 當吸頂狀態發生變化時 */
this.setData({
show:isCeiling
})
}
}

這種方式實現吸頂也有一些缺點,就是當快速滑動的時候,比如小程序,因為觸發吸頂調用 setData ,setData 底層會調用于 native 通信的方法,這樣視圖上的更新會滯后,直觀上的感受就是置頂效果滯后。

三、React Native 中的吸頂方式

React Native 是跨端開發的一個解決方案,不同于 webview,webview 的渲染還是走 web 那一套,而 RN 這個一點就不同于 webview,采用了 Native 方式來渲染,所以就渲染性能上要優于 webview。

RN 中有很多中實現吸頂的方式,ScrollView ,FlatList ,和 SectionList 都能實現吸頂效果,

3.1 ScrollView 和 FlatList

ScrollView 和 FlatList 一般用于列表組件,兩者中有一個stickyHeaderIndices 可以輕松實現吸頂效果。

<ScrollView
stickyHeaderIndices={[0]}//第一個子元素即頭部組件,上滑時吸頂
/>

stickyHeaderIndices: 一個子視圖下標的數組,用于決定哪些成員會在滾動之后固定在屏幕頂端。舉個例子,傳遞stickyHeaderIndices={[0]}會讓第一個成員固定在滾動視圖頂端。這個屬性不能和horizontal={true}一起使用。

但是筆者在工作中,用到吸頂的場景,并不是單單列表中的某一個元素,有可能是視圖中某一個 section 模塊的頭部。

所以接下來重點介紹一個場景,就是通過 SectionList 來實現吸頂效果。

3.2 SectionList 介紹及如何實現吸頂效果

SectionList 是高性能的分組(section)列表組件,支持下面這些常用的功能:

  • 完全跨平臺。
  • 行組件顯示或隱藏時可配置回調事件。
  • 支持單獨的頭部組件。
  • 支持單獨的尾部組件。
  • 支持自定義行間分隔線。
  • 支持分組的頭部組件。
  • 支持分組的分隔線。
  • 支持多種數據源結構
  • 支持下拉刷新。
  • 支持上拉加載。

SectionList 顧名思義,就是分 Section 模塊的列表。SectionList 的吸頂效果也是得益于一個屬性——stickySectionHeadersEnabled。

當 stickySectionHeadersEnabled 為 true 的時候,當下一個 section 把它的前一個 section 的可視區推離屏幕的時候,讓這個 section 的 header 粘連在屏幕的頂端。這個屬性在 iOS 上是默認可用的,因為這是 iOS 的平臺規范。

圖片

如上我們期望 section2 的 current 模塊吸頂,那么當 section1 元素離開可視區域的時候,section2 的 current 就會吸頂了。這樣說,有的同學可能不明白,我們來看一下具體使用。

具體使用:

const defaultSections = [
{
data:[ name:'section1' ],
key:'section1',
},
{
data:[ name:'section2' ],
key:'section2',
},
]
function Index(){
//....省去一些邏輯
const renderContent = ({ item:{ name } }) => ( name === 'section1' ? <Section1Content /> : <Section2Content />);
/* 當只有 section2 有頭部并且會吸頂 */
const renderHeader = ({ section:{ key } }) => (key === 'section2' && <Current />)
return <SectionList
sections={defaultSections} // section 的配置項
renderSectionHeader={renderHeader} // 分 section 渲染頭部
renderItem={renderContent} // 分 section 渲染主體內容
stickySectionHeadersEnabled // 設置吸頂狀態為 true
/>
}

如上,可以通過 sections ,renderSectionHeader,renderItem 來自由的組合 SectionList 需要展現的 content 和  header,這樣會讓吸頂功能更加靈活。

四、總結

本文介紹了跨端開發中,webview 和 React Native 實現吸頂的主流方式,希望能給做此類功能的同學提供一個解決思路。

參考文檔

React Native 中文網

參考資料

[1]https://juejin.cn/post/7112770927082864653: https://juejin.cn/post/7112770927082864653


責任編輯:武曉燕 來源: 前端Sharing
相關推薦

2017-01-13 11:21:39

Android吸頂效果開發

2017-01-13 11:10:41

Android吸頂效果開發

2023-01-29 08:00:00

Instagram濾鏡圖片編輯

2010-09-10 09:57:27

DIV樣式

2013-07-05 10:26:40

Android

2011-08-10 14:40:23

iPhone動畫

2017-01-22 17:25:55

Android放大鏡效果源碼分析

2010-08-03 11:29:09

Flex全屏

2009-12-25 14:25:39

WPF圖標

2013-06-25 11:21:35

Android開發幻燈片效果Gallery

2025-06-10 08:23:39

Android懸浮窗自動吸邊

2010-09-10 14:33:32

SQL循環語句

2021-07-13 06:51:16

H5web開發吸頂

2024-02-20 01:53:01

ReactFlutter開發

2017-01-04 10:18:00

React NativScrollViewAndroid

2023-10-11 08:14:43

iPhoneTabs標簽頁

2017-04-17 06:07:01

React Nativ開發性能

2016-11-23 16:48:20

react-nativandroidjavascript

2017-02-14 17:29:42

Android毛玻璃虛化效果

2009-08-17 17:15:48

C# 進度條效果
點贊
收藏

51CTO技術棧公眾號

成人亚洲欧美一区二区三区| 中文日韩在线观看| 久久久久久久久久久视频| 色网站在线免费观看| 日韩中文字幕av电影| 日韩一区二区福利| 手机免费看av片| www成人在线视频| 国产精品福利在线播放| 不卡一卡2卡3卡4卡精品在| 国产精品19乱码一区二区三区| 最近国产精品视频| 日韩三级av在线播放| 欧美aⅴ在线观看| 看女生喷水的网站在线观看| 99天天综合性| 91免费精品视频| 六月丁香婷婷综合| 在线观看国产精品入口| 亚洲免费视频一区二区| 中文字幕亚洲影院| 免费观看亚洲| 亚洲一区二区av在线| 色爱区成人综合网| 无码精品黑人一区二区三区| 黄色小说综合网站| 国产成人中文字幕| 国产a∨精品一区二区三区仙踪林| 欧美好骚综合网| 亚洲欧美精品一区二区| 日本xxxx免费| 成人在线精品| 欧美日韩精品一区二区三区四区 | 亚洲乱码中文字幕| 日本视频精品一区| 欧洲视频在线免费观看| 成人午夜大片免费观看| 亚洲一区二区三| 伊人免费在线观看| 日韩在线观看一区二区| 欧美亚洲午夜视频在线观看| 久久婷婷国产麻豆91| 9191国语精品高清在线| 中文字幕自拍vr一区二区三区| 五月婷婷综合在线观看| 日本三级久久| 日韩高清有码在线| xxxxxx黄色| 国产伦理久久久久久妇女 | 视频在线观看你懂的| 国产成人精品免费| 99超碰麻豆| www.日本在线观看| 国产91精品一区二区麻豆网站| 国产日韩精品在线播放| 在线免费观看av片| 精品一区二区三区在线播放视频| 国产日韩在线看片| 一道本无吗一区| 六月丁香婷婷久久| 国产在线观看91精品一区| 亚洲最新av网站| 国产在线播放一区三区四| 91九色国产视频| 99热这里只有精品9| 国产美女视频一区| av在线不卡一区| 欧日韩在线视频| 99re热这里只有精品免费视频| 精品国产综合久久| 六十路在线观看| 国产欧美日韩另类一区| 亚洲精品9999| a毛片在线看免费观看| 一区二区三区四区在线播放| 精品成在人线av无码免费看| 成年人黄色大片在线| 欧美性xxxxhd| 在线免费观看av的网站| 精品国产一区二区三区性色av| 日韩欧美不卡在线观看视频| 东京热av一区| 自拍偷拍欧美一区| 神马久久桃色视频| 久久婷婷综合国产| 视频一区在线视频| 92看片淫黄大片欧美看国产片| 国产成人精品毛片| 99精品国产一区二区三区不卡| 欧美日韩国产精品一卡| 黄色网址视频在线观看| 五月天网站亚洲| 99热这里只有精品在线播放| 亚洲精品一区二区三区中文字幕 | 色天使在线视频| jizzjizz欧美69巨大| 美女av一区二区| 天堂а√在线中文在线新版| 久久av资源网| 精品卡一卡二| 日本在线人成| 黑人狂躁日本妞一区二区三区| 中文字幕 91| 欧美一性一交| 久热精品视频在线免费观看| 欧美特黄aaaaaa| 国产一区二区三区av电影| 久久亚裔精品欧美| caopo在线| 在线亚洲+欧美+日本专区| 美女日批在线观看| 欧美亚洲在线日韩| 久久免费精品视频| 国产麻豆免费视频| 久久久91精品国产一区二区三区| 欧美少妇一区二区三区| 粉嫩一区二区三区| 亚洲国产精品嫩草影院久久| 天天操夜夜操av| 毛片一区二区| 国产精品久久一区二区三区| 欧美成人二区| 在线精品国精品国产尤物884a| 欧美午夜精品一区二区| 欧美黄色录像片| 国产精品久久久久久久久男 | www.爱久久.com| 看一级黄色录像| 丁香婷婷久久| 国产小视频国产精品| 国产黄色片免费看| 不卡的av电影| 成年人网站国产| 奇米一区二区| 欧美成人精品在线| 国产乱码精品一区二区| 中文字幕乱码久久午夜不卡| www国产黄色| 丝袜美腿综合| 69av在线视频| 天天在线女人的天堂视频| 亚洲午夜久久久久久久久电影网 | www亚洲欧美| 中文亚洲av片在线观看| 国产欧美日韩精品a在线观看| 欧美在线观看成人| 特黄特色欧美大片| 91av中文字幕| 免费黄色在线视频网站| 午夜精品视频在线观看| 老司机免费视频| 亚洲经典在线| 蜜桃传媒视频第一区入口在线看| 欧美男人天堂| 亚洲欧美变态国产另类| 黄色在线观看国产| 国产亚洲欧美中文| 一区二区三区韩国| 婷婷综合网站| 亚洲一区二区日本| gogo高清在线播放免费| 日韩精品免费在线播放| 一二三区免费视频| 国产精品视频观看| 午夜激情影院在线观看| 狠狠入ady亚洲精品经典电影| 国产伦精品一区二区三区四区视频| 国产蜜臀在线| 亚洲片在线资源| 成人午夜精品视频| 综合亚洲深深色噜噜狠狠网站| 免费成人黄色大片| 亚洲性图久久| 欧美综合77777色婷婷| 色综合久久久| 九九热精品在线| 午夜黄色小视频| 欧美性做爰猛烈叫床潮| h色网站在线观看| 北条麻妃国产九九精品视频| 欧美 日本 亚洲| 精品久久久久久久久久久aⅴ| 国产欧美日韩高清| 黄色的视频在线观看| 亚洲老头老太hd| 国产乱淫a∨片免费视频| 亚洲成人在线免费| 变态另类ts人妖一区二区| 国产剧情一区二区| 中文字幕日本最新乱码视频| 日韩欧美字幕| 国内视频一区二区| 国产精品久久亚洲不卡| 欧美精品在线第一页| 日韩三级电影网| 欧美一区二区视频观看视频| 日韩毛片在线播放| 国产精品电影院| 亚洲色图14p| 国产一区二区中文字幕| 亚洲 高清 成人 动漫| 911久久香蕉国产线看观看| 九九九九九九精品| 96视频在线观看欧美| 欧洲亚洲在线视频| 天堂av资源在线观看| 在线精品国产欧美| 色综合免费视频| 欧美日韩1234| 国产成人无码一区二区在线播放| 亚洲欧洲综合另类| 欧美18—19性高清hd4k| aaa亚洲精品| 特级黄色片视频| 日本在线不卡视频| 日本福利视频在线| 午夜天堂精品久久久久| 亚洲一卡二卡三卡| 国产日产精品_国产精品毛片| 大波视频国产精品久久| www一区二区三区| 国产成人在线播放| 中文字幕在线免费观看视频| 欧美国产日韩视频| jizz性欧美| 俺去了亚洲欧美日韩| 国产二区视频在线观看| 日韩精品中文字幕有码专区 | 国产成人午夜精品5599| 国产嫩草在线观看| 久久精品一区| 一本大道熟女人妻中文字幕在线 | 国产精品久久夜| 少妇人妻好深好紧精品无码| 久久奇米777| av鲁丝一区鲁丝二区鲁丝三区| 国产xxx精品视频大全| a级大片免费看| 国产毛片精品视频| 亚洲精品成人在线播放| 蓝色福利精品导航| 亚洲天堂2018av| 免费成人在线网站| 激情 小说 亚洲 图片: 伦| 日韩国产高清在线| 高清一区二区视频| 日韩电影免费一区| 亚欧在线免费观看| 日本欧美一区二区| 超碰在线播放91| 麻豆久久久久久久| 中文字幕在线观看日 | 成人xxxx视频| 国产一区一区| 动漫美女被爆操久久久| 国产精品成人自拍| 九色视频成人porny| 视频一区欧美| 亚洲精品无人区| 围产精品久久久久久久| 午夜久久久久久久久久久| 欧美视频福利| 久久久久久久中文| 老司机精品导航| 亚洲 激情 在线| 国产美女精品人人做人人爽| 任你躁av一区二区三区| 91论坛在线播放| 亚洲天堂岛国片| 亚洲欧美另类久久久精品| 久久伊人成人网| 日韩欧美精品中文字幕| 中文字幕在线播放不卡| 欧美一区二区三区在线| 色欲久久久天天天综合网 | av网在线播放| 日韩毛片高清在线播放| 国产一级生活片| 91激情五月电影| 国产乱淫a∨片免费观看| 亚洲第一福利在线观看| 国产无套粉嫩白浆在线2022年| www.亚洲人.com| gogo高清午夜人体在线| 国产精品美女av| 18国产精品| 日韩三级电影网站| 国产一区清纯| 黄色国产小视频| 成人性生交大片免费看视频在线| 亚洲国产欧美视频| 亚洲视频香蕉人妖| av一级在线观看| 日韩一二三区视频| 国产大学生校花援交在线播放| 久久不射电影网| 成人香蕉视频| 97人人干人人| 成人精品影视| 可以看毛片的网址| 另类专区欧美蜜桃臀第一页| 国产精品久久久久久久无码| 国产精品超碰97尤物18| 国产成人免费看| 日韩一区二区高清| 91在线不卡| 91超碰中文字幕久久精品| 精品视频一区二区三区| 欧美一区视久久| 精品91久久久久| 久久久久久久久久久久久久久国产| 91亚洲国产成人精品一区二区三 | 国产高清自拍视频| 亚洲女爱视频在线| 波多野结衣家庭主妇| 亚洲精品在线免费观看视频| 国产秀色在线www免费观看| 日韩免费高清在线观看| 精品精品国产毛片在线看| 午夜探花在线观看| 美女任你摸久久| 国产又粗又猛又爽视频| 黄色成人av在线| 亚洲国产999| 欧美成人合集magnet| 国产成人午夜性a一级毛片| 欧美日本亚洲| 久久精品三级| 中文字幕免费看| 欧美性猛交xxxx乱大交极品| 免费观看黄色一级视频| 欧美国产日韩二区| 在线日韩成人| www.国产二区| 国产美女精品一区二区三区| 女性裸体视频网站| 欧美日韩三级一区二区| 懂色av中文在线| 国产精品国内视频| 精品久久精品| 爱情岛论坛亚洲首页入口章节| 久久久电影一区二区三区| 亚洲日本视频在线观看| 日韩av资源在线播放| 欧美在线极品| 久久影院理伦片| 视频在线观看一区| 99国产精品免费| 欧美日韩精品综合在线| 日本在线免费看| 92国产精品视频| 欧美视频亚洲视频| 日批在线观看视频| 欧美三级免费观看| 可以在线观看的av| 国产精品老牛影院在线观看| 不卡视频在线| 在线观看国产一级片| 中文字幕一区二区三区不卡| 国产精品一级二级| 色综合久久88色综合天天看泰| 亚洲国产精品免费视频| 日韩在线观看a| 97久久精品人人爽人人爽蜜臀| 精品91久久久| 亚洲性av网站| 国产精品成人3p一区二区三区| 日韩专区第三页| 91丝袜高跟美女视频| 中文字幕国产在线观看| 最近中文字幕日韩精品| 青草伊人久久| 日本中文字幕片| 国产精品入口麻豆九色| av中文字幕免费| 欧美在线欧美在线| 欧美顶级大胆免费视频| 1314成人网| 疯狂做受xxxx欧美肥白少妇| 高清美女视频一区| 亚洲自拍中文字幕| 国产精品毛片在线| 貂蝉被到爽流白浆在线观看| 日韩精品中文字幕一区| 日产福利视频在线观看| 亚洲啪啪av| 不卡欧美aaaaa| 在线免费av网| 97超级碰碰碰| 久久久久国产| 色噜噜日韩精品欧美一区二区| 欧美精品一二三| 国产伦理精品| 日本黄色a视频| 91蝌蚪porny九色| 国产精品天天操| 国产精品第一视频| 韩国一区二区三区在线观看| jizz日本免费| 69p69国产精品|