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 相关文章推荐
checkbox 复选框不能为空
Jul 11 Javascript
jquery下为Event handler传递动态参数的代码
Jan 06 Javascript
JS下拉框内容左右移动效果的具体实现
Jul 10 Javascript
将字符串中由空格隔开的每个单词首字母大写
Apr 06 Javascript
Javascript中的异步编程规范Promises/A详细介绍
Jun 06 Javascript
javascript 实现map集合
Apr 03 Javascript
jQuery实现可展开合拢的手风琴面板菜单
Sep 15 Javascript
基于Javascript实现倒计时功能
Feb 22 Javascript
js智能获取浏览器版本UA信息的方法
Aug 08 Javascript
vue.js框架实现表单排序和分页效果
Aug 09 Javascript
vue使用jsonp抓取qq音乐数据的方法
Jun 21 Javascript
JS中如何优雅的使用async await详解
Oct 05 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时的知识积累总结
2013/06/07 PHP
PHP 生成N个不重复的随机数
2015/01/21 PHP
php使用PDO下exec()函数查询执行后受影响行数的方法
2017/03/28 PHP
JavaScript 定义function的三种方式小结
2009/10/16 Javascript
javascript URL编码和解码使用说明
2010/04/12 Javascript
图片上传判断及预览脚本的效果实例
2013/08/07 Javascript
jQuery对Select的操作大集合(收藏)
2013/12/28 Javascript
基于jquery实现无限级树形菜单
2016/03/22 Javascript
JQueryEasyUI框架下的combobox的取值和绑定的方法
2017/01/22 Javascript
Angularjs 事件指令详细整理
2017/07/27 Javascript
自定义类似于jQuery UI Selectable 的Vue指令v-selectable
2017/08/23 jQuery
Angular4.0中引入laydate.js日期插件的方法教程
2017/12/25 Javascript
Vue 仿QQ左滑删除组件功能
2018/03/12 Javascript
详解angular2如何手动点击特定元素上的点击事件
2018/10/16 Javascript
微信小程序实现留言板
2018/10/31 Javascript
vue实现的组件兄弟间通信功能示例
2018/12/04 Javascript
nodejs中使用worker_threads来创建新的线程的方法
2021/01/22 NodeJs
[43:41]OG vs Newbee 2019国际邀请赛淘汰赛 胜者组 BO3 第一场 8.21.mp4
2020/07/19 DOTA
[00:57]英雄,你的补给到了!
2020/11/13 DOTA
详解python3百度指数抓取实例
2016/12/12 Python
python 中的int()函数怎么用
2017/10/17 Python
Python网络编程之TCP套接字简单用法示例
2018/04/09 Python
Python文本统计功能之西游记用字统计操作示例
2018/05/07 Python
tensorflow 打印内存中的变量方法
2018/07/30 Python
python实现通过队列完成进程间的多任务功能示例
2019/10/28 Python
新手入门学习python Numpy基础操作
2020/03/02 Python
PyTorch加载自己的数据集实例详解
2020/03/18 Python
Django 实现图片上传和下载功能
2020/12/31 Python
美国电子产品主要品牌的授权在线零售商:DataVision
2019/03/23 全球购物
P D PAOLA意大利官网:西班牙著名的珠宝首饰品牌
2019/09/24 全球购物
简述你对Statement,PreparedStatement,CallableStatement的理解
2013/03/25 面试题
EJB timer的种类
2014/10/28 面试题
2014年个人工作总结范文
2014/11/07 职场文书
2016猴年春节问候语
2015/11/11 职场文书
OpenCV 图像梯度的实现方法
2021/07/25 Python
抖音动画片,皮皮虾,《治愈系》动画在用这首REMIX作为背景音乐,Anak ,The last world with you完整版
2022/03/16 杂记