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优先加载笔记代码
Sep 30 Javascript
jquery 插件开发方法小结
Oct 23 Javascript
javascript特殊用法示例介绍
Nov 29 Javascript
JavaScript闭包函数访问外部变量的方法
Aug 27 Javascript
JavaScript实现同一页面内两个表单互相传值的方法
Aug 12 Javascript
深入浅析Bootstrap列表组组件
May 03 Javascript
微信小程序 后台https域名绑定和免费的https证书申请详解
Nov 10 Javascript
AngularJS入门教程之路由机制ngRoute实例分析
Dec 13 Javascript
利用node.js如何创建子进程详解
Dec 09 Javascript
Angular 组件之间的交互的示例代码
Mar 24 Javascript
基于js Canvas实现二次贝塞尔曲线
Dec 25 Javascript
Vue 实现简易多行滚动&quot;弹幕&quot;效果
Jan 02 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
《神奇女侠:血脉》神力女超人大战犯罪公司
2020/04/09 欧美动漫
重新封装zend_soap实现http连接安全认证的php代码
2011/01/12 PHP
关于PHP实现异步操作的研究
2013/02/03 PHP
写一段简单的PHP建立文件夹代码
2015/01/06 PHP
php英文单词统计器
2016/06/23 PHP
PHP用continue跳过本次循环中剩余代码的注意点
2017/06/27 PHP
php生成条形码的图片的实例详解
2017/09/13 PHP
PHP从零开始打造自己的MVC框架之入口文件实现方法详解
2019/06/03 PHP
jquery 的 $(&quot;#id&quot;).html() 无内容的解决方法
2010/06/07 Javascript
Javascript 面试题随笔
2011/03/31 Javascript
js去除重复字符串两种实现方法
2013/01/09 Javascript
jQuery使用技巧简单汇总
2013/04/18 Javascript
ExtJs默认的字体大小改变的几种方法(自己整理)
2013/04/18 Javascript
jquery控制左右箭头滚动图片列表的实例
2013/05/20 Javascript
jQuery实现在textarea指定位置插入字符或表情的方法
2015/03/11 Javascript
jQuery实现径向动画菜单效果
2015/07/17 Javascript
jQuery增加与删除table列的方法
2016/03/01 Javascript
原生js制作日历控件实例分享
2016/04/06 Javascript
jQuery UI Bootstrap是什么?
2016/06/17 Javascript
深入理解bootstrap框架之入门准备
2016/10/09 Javascript
AngularJS 在同一个界面启动多个ng-app应用模块详解
2016/12/20 Javascript
JQuery统计input和textarea文字输入数量(代码分享)
2016/12/29 Javascript
基于JS实现网页中的选项卡(两种方法)
2017/06/16 Javascript
vue+Element-ui实现分页效果实例代码详解
2018/12/10 Javascript
vue多层嵌套路由实例分析
2019/03/19 Javascript
基于Angular 8和Bootstrap 4实现动态主题切换的示例代码
2020/02/11 Javascript
[23:18]Spirit vs Liquid Supermajor小组赛A组 BO3 第二场 6.2
2018/06/03 DOTA
使用Python编写简单的画图板程序的示例教程
2015/12/08 Python
python爬虫爬取网页表格数据
2018/03/07 Python
PHP中如何创建和修改数组
2012/05/02 面试题
车间机修工岗位职责
2014/02/28 职场文书
企业年度评优方案
2014/06/02 职场文书
党的群众路线教育实践活动学习笔记
2014/11/05 职场文书
2014年生产部工作总结
2014/12/17 职场文书
2016教师学习教育法心得体会
2016/01/19 职场文书
解决Pytorch修改预训练模型时遇到key不匹配的情况
2021/06/05 Python