H5 阻止整个页面下拉刷新,并允许内部元素滚动

2,526 阅读1分钟

H5 阻止整个页面下拉刷新,并允许内部元素滚动

移动端页面默认会有下拉刷新的效果,在微信,手机浏览器以及使用 webview 嵌入 app 中,都会有这种效果, 禁用 body 的 touchmove 即可

document.body.addEventListener(
  "touchmove",
  (e) => {
    //阻止默认的处理方式(阻止下拉滑动的效果)
    e.preventDefault();
    // 这里可以允许内部元素滚动
    document.querySelector(".content").scrollTop = XXX;
    return false;
  },
  /**
   如果我们是为了阻止页面滚动添加了上述代码,默认行为就是滚动页
   面,但是如果我们阻止了这一默认行为,浏览器是无法预先知道的,
   必须等待事件监听器执行完成后,才知道要去阻止默认行为。等待监
   听器的执行是耗时的,,有些甚至耗时很明显,这样就会导致页面卡
   顿。即便监听器是个空函数,也会产生一定的卡顿,毕竟空函数的执
   行也会耗时。所以就有了passive属性,如果要阻止默认事件可以设
   置passive:false。
  */
  { passive: false }
);