给WebView加一个滚动页面方向事件

需求

WebView中监听到滚动的方向,然后根据方向进行原生UI的隐藏/显示。
比如,向下滚动的时候,隐藏导航栏,向上则显示。

注入脚本

所以我们计划采用injectedJavaScript属性来向页面注入一个脚本,监听页面滚动后,使用postMessage向RN客户端发送一个数据进行通信。

所以注入脚本这么写:

(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下不执行):

(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);

监听脚本

既然已经注入了一个发送数据的脚本,我们就在RN端进行监听判断吧!

很简单,WebView设置onMessage事件即可:

          onMessage={e => {
            const { data } = e.nativeEvent;
            if (data === 'scroll:d') {
              this.toolBar.hide();
            } else if (data === 'scroll:u') {
              this.toolBar.show(this.webView)
            }
          }}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 前言 基于React-Native0.41及0.25两个版本来分析 公司项目基于ReactNative开发,最近有...
    jiaming_阅读 29,598评论 12 23
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 175,327评论 25 709
  • 源码传送门react-native-webview-plugin插件 在开发Android的时候,一般我们会有一些...
    Code4Android阅读 52,184评论 23 21
  • 记得周六那天兼完职回来,躲在床上看了一部你喜欢我我喜欢她她喜欢他的无聊电影,只想说 ,很喜欢里面美得像画的场景,还...
    李四萌阅读 910评论 0 0
  • (猫星人的场合) 嘿,各位朋友们,我们又见面啦~ 这次给大家带来的还是校园里的流浪猫咪 我们一起来看看这次是哪位小...
    kikiyaya阅读 1,358评论 0 0