給WebView加一個滾動頁面方向事件

需求

WebView中監(jiān)聽到滾動的方向,然后根據(jù)方向進行原生UI的隱藏/顯示。
比如,向下滾動的時候,隱藏導(dǎo)航欄,向上則顯示。

注入腳本

所以我們計劃采用injectedJavaScript屬性來向頁面注入一個腳本,監(jiān)聽頁面滾動后,使用postMessage向RN客戶端發(fā)送一個數(shù)據(jù)進行通信。

所以注入腳本這么寫:

(function(){
var callback=function(status){
window.postMessage('scroll:' +status);
}
var a=document.body.scrollTop;
window.addEventListener('scroll',function(){
  var b=document.body.scrollTop;
  var c=b-a;
  if (c===0)return;
  callback(c>0?'d':'u')
  a=b;
}, false);
})(window);

給壓縮成了一行(避免Android下不執(zhí)行):

(function(){var callback=function(status){window.postMessage('scroll:'+status)};var a=document.body.scrollTop;window.addEventListener('scroll',function(){var b=document.body.scrollTop;var c=b-a;if(c===0)return;callback(c>0?'d':'u');a=b},false)})(window);

監(jiān)聽腳本

既然已經(jīng)注入了一個發(fā)送數(shù)據(jù)的腳本,我們就在RN端進行監(jiān)聽判斷吧!

很簡單,WebView設(shè)置onMessage事件即可:

          onMessage={e => {
            const { data } = e.nativeEvent;
            if (data === 'scroll:d') {
              this.toolBar.hide();
            } else if (data === 'scroll:u') {
              this.toolBar.show(this.webView)
            }
          }}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • 前言 基于React-Native0.41及0.25兩個版本來分析 公司項目基于ReactNative開發(fā),最近有...
    jiaming_閱讀 29,529評論 12 23
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,813評論 25 708
  • 源碼傳送門react-native-webview-plugin插件 在開發(fā)Android的時候,一般我們會有一些...
    Code4Android閱讀 52,095評論 23 21
  • 記得周六那天兼完職回來,躲在床上看了一部你喜歡我我喜歡她她喜歡他的無聊電影,只想說 ,很喜歡里面美得像畫的場景,還...
    李四萌閱讀 134評論 0 0
  • (貓星人的場合) 嘿,各位朋友們,我們又見面啦~ 這次給大家?guī)淼倪€是校園里的流浪貓咪 我們一起來看看這次是哪位小...
    kikiyaya閱讀 193評論 0 0