美文网首页
给WebView加一个滚动页面方向事件

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

作者: NextStack | 来源:发表于2018-02-07 14:08 被阅读0次

    需求

    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)
                }
              }}
    

    相关文章

      网友评论

          本文标题:给WebView加一个滚动页面方向事件

          本文链接:https://www.haomeiwen.com/subject/mfgozxtx.html