WebView에 페이지 방향 스크롤 이벤트 추가하기

1432 단어

수요

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

좋은 웹페이지 즐겨찾기