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 showModalDialog 内跳转页面的问题
Nov 25 Javascript
JavaScript实现在页面间传值的方法
Apr 07 Javascript
有关jquery与DOM节点操作方法和属性记录
Apr 15 Javascript
jquery遍历json对象集合详解
May 18 Javascript
jQuery仿京东商城楼梯式导航定位菜单
Jul 25 Javascript
react以create-react-app为基础创建项目
Mar 14 Javascript
JS实现的base64加密解密操作示例
Apr 18 Javascript
webpack+vue+express(hot)热启动调试简单配置方法
Sep 19 Javascript
Vue-Quill-Editor富文本编辑器的使用教程
Sep 21 Javascript
vue.js引入外部CSS样式和外部JS文件的方法
Jan 06 Javascript
浅谈layer弹出层按钮颜色修改方法
Sep 11 Javascript
vant-ui AddressEdit地址编辑和van-area的用法说明
Nov 03 Javascript
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使用正则过滤js脚本代码实例
2014/05/10 PHP
一个经典的PHP验证码类分享
2014/11/18 PHP
简单谈谈favicon
2015/06/10 PHP
使用PHP生成图片的缩略图的方法
2015/08/18 PHP
24条货真价实的PHP代码优化技巧
2016/07/28 PHP
通过chrome浏览器控制台(Console)进行PHP Debug的方法
2016/10/19 PHP
Laravel框架路由和控制器的绑定操作方法
2018/06/12 PHP
一个对于Array的简单扩展
2006/10/03 Javascript
使用Javascript接收get传递的值的代码
2011/11/30 Javascript
JavaScript 上万关键字瞬间匹配实现代码
2013/07/07 Javascript
js动态创建标签示例代码
2014/06/09 Javascript
Javascript封装DOMContentLoaded事件实例
2014/06/12 Javascript
jQuery插件datepicker 日期连续选择
2015/06/12 Javascript
JavaScript的Polymer框架中dom-repeat与VM的相关操作
2015/07/29 Javascript
JS实现带关闭功能的阿里妈妈网站顶部滑出banner工具条代码
2015/09/17 Javascript
使用Chart.js图表库制作漂亮的响应式表单
2015/10/28 Javascript
jquery中取消和绑定hover事件的实现代码
2016/06/02 Javascript
jQuery编写设置和获取颜色的插件
2017/01/09 Javascript
Webpack+Vue如何导入Jquery和Jquery的第三方插件
2017/02/20 Javascript
快速搭建React的环境步骤详解
2017/11/06 Javascript
在Vue项目中使用d3.js的实例代码
2018/05/01 Javascript
vue底部加载更多的实例代码
2018/06/29 Javascript
JS实现移动端触屏拖拽功能
2018/07/31 Javascript
JavaScript的console命令使用实例
2019/12/03 Javascript
JavaScript监听键盘事件代码实现
2020/06/03 Javascript
python实现百度关键词排名查询
2014/03/30 Python
简单谈谈python的反射机制
2016/06/28 Python
pycharm编写spark程序,导入pyspark包的3中实现方法
2019/08/02 Python
详解如何在cmd命令窗口中搭建简单的python开发环境
2019/08/29 Python
Python List列表对象内置方法实例详解
2019/10/22 Python
俄罗斯披萨、寿司和面食送货到家服务:2 Берега
2019/12/15 全球购物
儿科主治医生个人求职信
2013/09/23 职场文书
详解MySQL主从复制及读写分离
2021/05/07 MySQL
教你利用Selenium+python自动化来解决pip使用异常
2021/05/20 Python
MySQL学习之基础操作总结
2022/03/19 MySQL
MySql数据库 查询时间序列间隔
2022/05/11 MySQL