Vue项目移动端滚动穿透问题的实现


Posted in Javascript onMay 19, 2020

概述

今天在做 Vue 移动端项目的时候遇到了滚动穿透问题,在网上查资料后,选取了我觉得最好的方法,记录下来供以后开发时参考,相信对其他人也有用。

上层无需滚动

如果上层无需滚动的话,直接屏蔽上层的 touchmove 事件即可。示例如下:

<div @touchmove.prevent>
我是里面的内容
</div>

上层需要滚动

如果上层需要滚动的话,那么固定的时候先获取 body 的滑动距离,然后用 fixed 固定,用 top 模拟滚动距离;不固定的时候用获取 top 的值,然后让 body 滚动到之前的地方即可。示例如下:

<template>
 <div @click="handleHambergerClick"></div>
</template>
<script>
export default {
 name: 'BaseHeaderMobile',
 data() {
  return {
   isHeaderVisible: false,
  };
 },
 methods: {
  handleHambergerClick() {
   // hack: 滑动穿透问题
   if (!this.isHeaderVisible) {
    this.lockBody();
   } else {
    this.resetBody();
   }

   this.isHeaderVisible = !this.isHeaderVisible;
  },
  lockBody() {
   const { body } = document;
   const scrollTop = document.body.scrollTop || document.documentElement.scrollTop;
   body.style.position = 'fixed';
   body.style.width = '100%';
   body.style.top = `-${scrollTop}px`;
  },
  resetBody() {
   const { body } = document;
   const { top } = body.style;
   body.style.position = '';
   body.style.width = '';
   body.style.top = '';
   document.body.scrollTop = -parseInt(top, 10);
   document.documentElement.scrollTop = -parseInt(top, 10);
  },
 },
};
</script>

到此这篇关于Vue项目移动端滚动穿透问题的实现的文章就介绍到这了,更多相关Vue 移动端滚动穿透内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Javascript 相关文章推荐
javaScript arguments 对象使用介绍
Oct 18 Javascript
jQuery操作Select的Option上下移动及移除添加等等
Nov 18 Javascript
jQuery中unbind()方法用法实例
Jan 19 Javascript
jQuery使用$.ajax进行即时验证的方法
Dec 08 Javascript
浅析jQuery 3.0中的Data
Jun 14 Javascript
简单实现js悬浮导航效果
Feb 05 Javascript
使用weixin-java-tools完成微信授权登录、微信支付的示例
Sep 26 Javascript
vuex vue简单使用知识点总结
Aug 29 Javascript
layui button 按钮弹出提示窗口,确定才进行的方法
Sep 06 Javascript
使用Webpack提升Vue.js应用程序的4种方法(翻译)
Oct 09 Javascript
Vue组件基础用法详解
Feb 05 Javascript
Vue的生命周期一起来看看
Feb 24 Vue.js
vue和小程序项目中使用iconfont的方法
May 19 #Javascript
小程序瀑布流组件实现翻页与图片懒加载
May 19 #Javascript
jQuery 淡入/淡出效果函数用法分析
May 19 #jQuery
微信小程序 wx:for 与 wx:for-items 与 wx:key的正确用法
May 19 #Javascript
微信小程序使用GoEasy实现websocket实时通讯
May 19 #Javascript
jQuery 动画与停止动画效果实例详解
May 19 #jQuery
jQuery 选择方法及$(this)用法实例分析
May 19 #jQuery
You might like
在PHP中养成7个面向对象的好习惯
2010/07/17 PHP
PHP函数学习之PHP函数点评
2012/07/05 PHP
基于ubuntu下nginx+php+mysql安装配置的具体操作步骤
2013/04/28 PHP
PHP利用hash冲突漏洞进行DDoS攻击的方法分析
2015/03/26 PHP
关于PHP内置的字符串处理函数详解
2017/02/04 PHP
Jquery通过Ajax访问XML数据的小例子
2013/11/18 Javascript
jQuery 快速结束当前正在执行的动画
2013/11/20 Javascript
IE浏览器下PNG相关功能
2015/07/05 Javascript
实例讲解JS中setTimeout()的用法
2016/01/28 Javascript
BootStrap制作导航条实例代码
2016/05/06 Javascript
JS简单获取客户端IP地址的方法【调用搜狐接口】
2016/09/05 Javascript
Vue.js组件tabs实现选项卡切换效果
2016/12/01 Javascript
浅谈JavaScript的自动垃圾收集机制
2016/12/15 Javascript
NodeJS学习笔记之Module的简介
2017/03/24 NodeJs
express+vue+mongodb+session 实现注册登录功能
2018/12/06 Javascript
微信小程序授权登录解决方案的代码实例(含未通过授权解决方案)
2019/05/10 Javascript
Vuex 模块化使用详解
2019/07/31 Javascript
Javascript模拟实现new原理解析
2020/03/03 Javascript
uniapp微信小程序实现一个页面多个倒计时
2020/11/01 Javascript
Python Web框架Tornado运行和部署
2020/10/19 Python
浅析Python中yield关键词的作用与用法
2016/11/29 Python
详解Python 序列化Serialize 和 反序列化Deserialize
2017/08/20 Python
python批量读取txt文件为DataFrame的方法
2018/04/03 Python
python3使用QQ邮箱发送邮件
2020/05/20 Python
python的几种矩阵相乘的公式详解
2019/07/10 Python
python enumerate内置函数用法总结
2020/01/07 Python
HTML5的postMessage的使用手册
2018/12/19 HTML / CSS
德国古洛迷亚百货官网:GALERIA Kaufhof
2017/06/20 全球购物
Expedia加拿大官方网站:加拿大最大的在线旅游提供商
2017/12/31 全球购物
英国设计师泳装、沙滩装和比基尼在线精品店:Beach Cafe
2019/08/28 全球购物
美国购买韩国护肤和美容产品网站:Althea Korea
2020/11/16 全球购物
linux面试相关问题
2012/08/11 面试题
幼儿园秋游活动方案
2014/01/21 职场文书
大四自我鉴定
2014/02/08 职场文书
自我鉴定总结
2014/03/24 职场文书
集结号观后感
2015/06/08 职场文书