精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

亚洲视频在线看| 国产精品国产自产拍在线| 午夜精品一区二区三区视频免费看| 国产a级片视频| 国产高潮在线| 国产精品视频线看| 7777奇米亚洲综合久久| 欧美日韩精品区| 久久国产综合| 亚洲成人三级在线| 亚洲综合欧美激情| 日韩美女免费视频| www.久久久久久久久久久| 波多野结衣在线高清| 国产午夜精品久久久久久久 | 久久久久久久九九九九| 美女久久久久| 欧美tickling网站挠脚心| 激情六月丁香婷婷| 女同视频在线观看| 国产精品不卡一区| 欧美精品一区二区三区在线四季| 国产欧美久久久精品免费| 宅男噜噜噜66国产日韩在线观看| 日韩亚洲欧美成人| 97伦伦午夜电影理伦片| 亚洲精品午夜| 欧美精品日韩一区| 国产精品欧美激情在线观看| 久久免费电影| 国产精品久久久久久久浪潮网站 | 4438全国成人免费| 欧美卡一卡二卡三| 久久大综合网| 亚洲天堂成人在线| 日韩av一二区| 欧美巨大xxxx| 亚洲成人在线网| 久久发布国产伦子伦精品| 综合欧美精品| 欧美日韩一区二区在线视频| 国产l精品国产亚洲区久久| 日本一级理论片在线大全| 1000部国产精品成人观看| 午夜精品福利一区二区| 亚洲va欧美va| 国产精品18久久久久久久网站| 国产精品午夜国产小视频| www.国产一区二区| 亚洲一区二区三区高清不卡| 97视频在线看| 青青操国产视频| 欧美福利专区| 欧美激情精品久久久久久变态| 性欧美videos| 欧美色图麻豆| 欧美精品国产精品日韩精品| 久久久久人妻一区精品色欧美| 亚洲影视一区| 欧美多人爱爱视频网站| 免费又黄又爽又色的视频| 国精品一区二区| 国内揄拍国内精品| 国产精品成人网站| 国产午夜精品一区二区三区欧美 | 麻豆久久久久久久久久| 野花国产精品入口| 欧美中文字幕在线播放| 午夜精品久久久久久久蜜桃| 日本人妖一区二区| 国产日韩在线观看av| 国产老女人乱淫免费| 国产福利一区在线| 国产日韩欧美一区二区| 日韩电影免费| 中文字幕精品三区| 国产高潮呻吟久久久| 免费在线看污片| 亚洲成人精品影院| 精品久久久久久无码国产| 免费视频成人| 日韩精品一区二区三区在线观看| 日本黄色录像片| 国产成人影院| 北条麻妃在线一区二区| 伊人国产在线观看| 三级欧美在线一区| 91久久久国产精品| 色呦呦视频在线| 亚洲国产精品成人综合色在线婷婷| 欧美日韩成人高清| 久久精品理论片| 日本精品黄色| 久久夜色精品国产噜噜av小说| 国产精品乱码一区二区三区软件| 一区二区三区四区五区视频| 婷婷色在线播放| 欧美日韩在线视频一区二区| 精品久久久99| 激情小说亚洲图片| 色婷婷av一区二区三区在线观看| 免费中文字幕在线观看| 老牛影视一区二区三区| 97中文在线| 国产高清视频免费最新在线| 亚洲综合免费观看高清完整版 | 国产精品一区二区三区网站| 精品视频在线观看| 日本电影在线观看网站| 午夜视频一区在线观看| 中国黄色片免费看| 清纯唯美亚洲经典中文字幕| 久久伊人精品天天| 日本熟妇一区二区三区| 成人av在线资源网站| 伊人久久大香线蕉综合75| 欧美三级网站| 精品少妇一区二区三区免费观看| 国产精品理论在线| 一区二区福利| 粉嫩高清一区二区三区精品视频| 在线观看黄av| 色8久久精品久久久久久蜜| 国产性猛交96| 图片区亚洲欧美小说区| 国产精品久久久久久久久粉嫩av| 人妻少妇精品无码专区久久| 亚洲黄色小视频| 亚洲精品手机在线观看| 天美av一区二区三区久久| 欧美激情在线播放| 国内精品久久久久久久久久| 国产精品毛片久久久久久| 日韩精品欧美专区| 国产精品女人久久久久久| 欧美在线激情网| 欧美丰满老妇厨房牲生活| 成年人午夜视频在线观看| 精品国产亚洲一区二区三区大结局| 亚洲人a成www在线影院| 欧美一级视频免费观看| 成人激情黄色小说| 免费人成自慰网站| 视频亚洲一区二区| 欧美成人免费一级人片100| 亚洲性生活大片| 国产精品少妇自拍| 久热精品在线播放| 日韩欧美中字| 成人久久一区二区| 日本中文字幕视频在线| 欧美日韩在线播放三区四区| 大胸美女被爆操| 捆绑紧缚一区二区三区视频| 亚洲国产日韩综合一区| 丁香久久综合| 日日噜噜噜夜夜爽亚洲精品| 一炮成瘾1v1高h| 亚洲色图.com| 狠狠干狠狠久久| 日韩avxxx| 亚洲精品中文字幕99999| 欧美在线免费视频| 黄色毛片在线观看| 欧美日韩国产bt| 91aaa在线观看| heyzo一本久久综合| 国产黄色一级网站| 欧美日韩在线二区| 91色视频在线导航| 丁香花在线观看完整版电影| 日韩成人在线视频| 亚洲永久精品一区| 国产精品国产三级国产aⅴ无密码| 中文字幕精品一区二区三区在线| 女主播福利一区| 国产日本一区二区三区| 国精产品一区一区三区四川| 久久精品国产精品亚洲| 亚洲成人精品女人久久久| 欧美日韩精品在线观看| 久久久国产一级片| 国产麻豆9l精品三级站| 精品国产一二三四区| 精品久久91| 99r国产精品视频| 小早川怜子影音先锋在线观看| 国产亚洲精品美女久久久久| 国产精品一级二级| 精品日韩美女的视频高清| 中文字幕xxx| 国产精品探花在线| 日韩一区二区免费电影| 波多野结衣国产| 亚洲欧洲日韩一区二区三区| av漫画在线观看| 日本不卡免费高清视频在线| 国产一区二区三区四| 色哟哟免费网站| 丝袜美腿一区二区三区动态图| 国产日韩精品在线| 国产直播在线| 免费成人高清视频| 国内精品在线视频| 精品成人一区二区三区四区| 欧美人一级淫片a免费播放| 亚洲在线视频一区| 成人欧美一区二区三区黑人一| 成人国产精品免费网站| 日韩av片专区| 久久久久久婷| 很污的网站在线观看| 久久高清免费| 欧美黑人xxxxx| 91精品尤物| 91久久国产精品| 欧美三级精品| 91国语精品自产拍在线观看性色| 国产超级va在线视频| 亚洲午夜性刺激影院| 天堂成人在线观看| 欧美一级在线视频| 亚洲最新av网站| 91久久精品一区二区三| 中国一级免费毛片| 亚洲一区二区四区蜜桃| 午夜精品福利在线视频| 国产精品理论片在线观看| 免费成人深夜夜行p站| 成人网男人的天堂| 曰本三级日本三级日本三级| 精品午夜一区二区三区在线观看| 别急慢慢来1978如如2| 国产一区二区精品| 九九爱精品视频| 黄色亚洲大片免费在线观看| av中文字幕av| 在线一区免费| 精品一区二区三区毛片| 中文字幕一区二区三区欧美日韩 | 日本精品黄色| 亚洲v日韩v欧美v综合| 久久av超碰| 欧美一区二区综合| 精品福利久久久| 少妇特黄a一区二区三区| 精品在线手机视频| 热re99久久精品国99热蜜月| 国产精品一区二区av日韩在线| 欧美日韩亚洲一区二区三区在线观看 | 中文精品无码中文字幕无码专区 | 国产肉丝袜一区二区| 亚洲AV无码国产成人久久| 久久久久久亚洲综合影院红桃| 黄色国产在线观看| 久久久久久97三级| 欧美福利第一页| 国产精品久久毛片| 日本在线一级片| 一区二区三区美女| 国产精品7777| 色综合天天性综合| 中国黄色一级视频| 欧美一卡二卡三卡| 手机在线精品视频| 国产午夜精品全部视频播放| 日本中文字幕在线视频| 久久91精品国产| 国产拍在线视频| 日韩av片永久免费网站| 激情久久一区二区| 99高清视频有精品视频| 精品亚洲精品| 午夜欧美一区二区三区免费观看| 91亚洲国产| www.国产在线视频| 久久亚洲美女| 日本网站在线看| av高清久久久| 伊人影院综合网| 亚洲免费高清视频在线| 日韩精品视频免费看| 日本高清不卡在线观看| 国产又粗又黄又爽的视频| 精品欧美乱码久久久久久| 久久久久久青草| 久久av中文字幕| 在线播放高清视频www| 国产乱肥老妇国产一区二 | 黄色漫画在线免费看| 国产高清视频一区三区| 日本超碰一区二区| 欧美久久在线| 欧美精品国产一区| 国产精彩免费视频| 国产高清在线观看免费不卡| www在线观看免费视频| 亚洲精品国产一区二区三区四区在线| 日韩污视频在线观看| 欧美老女人第四色| 手机亚洲第一页| 九九久久国产精品| www.久久.com| 久久综合九色综合网站| 你懂的一区二区| wwwwww.色| 99re66热这里只有精品3直播 | 日本在线观看视频| 97视频在线观看免费| 精品一区二区三区中文字幕| 日本一区免费看| 亚洲无线视频| 午夜av中文字幕| 国产欧美日韩麻豆91| 国产精品第72页| 日韩一区二区免费在线观看| 91网页在线观看| 26uuu国产精品视频| 综合视频一区| 色综合久久久久久久久五月| 久久精品视频6| www.成人网| 成人av电影免费| 99久久婷婷| 青青草av网站| 99精品国产一区二区三区不卡| 日韩女优一区二区| 欧美亚洲国产一区在线观看网站 | 精品盗摄一区二区三区| 国产在线观看免费麻豆| 国产精品综合网站| 欧美日中文字幕| 成年人视频在线免费| 大胆亚洲人体视频| 欧美精品一区二区蜜桃| 337p亚洲精品色噜噜| 瑟瑟视频在线| 国产精品视频久| 日韩国产一区| 国产精品一区二区小说| 欧美激情一区二区在线| 久久精品99北条麻妃| 亚洲午夜久久久久久久| 希岛爱理一区二区三区av高清| 免费精品视频一区| 免费看的黄色欧美网站| 免费黄色在线视频| 欧美性猛交xxxx偷拍洗澡| 五月婷婷伊人网| 日本久久久久亚洲中字幕| 久久不见久久见免费视频7| 精品国产成人av在线免| 国产日韩欧美亚洲| 亚洲熟妇无码久久精品| zzijzzij亚洲日本成熟少妇| 亚洲色图综合| 久久久无码中文字幕久...| 国产成人免费视| 日韩av女优在线观看| 亚洲欧美国产制服动漫| 欧美momandson| 亚洲国产一区二区精品视频| 激情伊人五月天久久综合| 国产十六处破外女视频| 亚洲福利影片在线| 日韩欧美看国产| 一区二区三区四区五区精品| 国产精品一级在线| 久久夜色精品亚洲| 亚洲午夜性刺激影院| 成人精品在线| 免费一级特黄毛片| 久久精品免费在线观看| 国产一区二区在线不卡| 久久91亚洲精品中文字幕| 欧洲亚洲视频| 亚洲欧美国产中文| 一区二区高清在线| 日本五码在线| 成人精品一区二区三区电影免费| 红桃视频亚洲| www.av天天| 日韩欧美黄色影院| 欧美xx视频| 国内自拍中文字幕| 久久免费国产精品| 国产av一区二区三区| 热久久这里只有| 一区二区三区在线观看免费| 国产精品伦子伦| 欧美日韩在线不卡| 678在线观看视频| 亚洲在线不卡| 99精品国产99久久久久久白柏| 国产精品午夜福利| 秋霞av国产精品一区| 欧美黄色一区| 精品国产aaa| 亚洲激情久久久| 激情视频亚洲|