vue 解决mintui弹窗弹起来,底部页面滚动bug问题


Posted in Javascript onNovember 12, 2020

经过dom层层注释缩小反馈终于找到问题所在。

问题经过

我在弹起弹窗的时候,设置了popupVisible为true

然后触发了vue的updated生命周期钩子函数

然后我在这个函数里面做了去this.$refs.container.offsetHeight导致页面重绘

然后就导致了底部页面向上滚动

解决办法

去掉updated函数里面的重绘方法

补充知识:项目总结之关于vue中使用mint-ui的mt-popup出现滚动穿透问题的解决总结

说实话,使用Mint-ui这个ui组件的过程中遇到了很多问题,这个ui组件问题真多。

先说今天的主题吧,我在使用popup选择框的时候和datepicker时间选择器的时候出现了滚动穿透的问题,特别是在ios上面。

找了好多方法,最后同事给出了一个好的方法,很简洁,于是就想着总结下来。

防止滚动穿透 只需加入@touchmove.native.stop.prevent 阻止默认根元素的默认事件就可以了,native是关键,这个表示根元素的意思,也就是body或者html

代码如下:

Popup组件:

<mt-popup
     v-model="popupVisible"
     position="bottom">
     ...
  </mt-popup>
  // 防止滚动穿透 只需加入@touchmove.native.stop.prevent 阻止默认根元素的默认事件就可以了native是关键,这个表示根元素的意思,也就是body或者html
  <mt-popup
   v-model="popupVisible"
   position="bottom"
   @touchmove.native.stop.prevent>
   ...
  </mt-popup>

注意当mt-popup中还有div等子元素的时候,一定要注意,这个时候可能会有一些问题,会出现mt-popup这个元素也滚动不了的情况,所以说如果mt-popup本身不需要滚动的话,加了@touchmove.native.stop.prevent,底部页面就不会跟着滑动,如果mt-popup里面有滚动条需要滚动的话,可能就滚动不了,这个时候需要采取常规方法了,如下:

// 解决方式,通过监听popupVisible变量,在弹窗出现后禁止body节点touchMove事件,弹窗消失后恢复body节点的touchMove事件

//html 如下
   <mt-popup
     v-model="popupVisible"
     position="bottom">
     ...
   </mt-popup>
  // js 如下
  const handler = function(e) {
    e.preventDefault();
  }
  
  // vue实例内
  watch: {
    popupVisible: function (val) {
     if(val) {
       document.getElementsByTagName('body')[0].addEventListener('touchmove', this.handler, { passive: false });
     } else {
       document.getElementsByTagName('body')[0].removeEventListener('touchmove', this.handler, { passive: false });
     }
    }
  }

Datetime Picker:

<mt-datetime-picker
    ref="picker"
    type="time"
    v-model="pickerValue"
    @touchmove.native.stop.prevent>
 </mt-datetime-picker>

对于时间组件加了@touchmove.native.stop.prevent,选择时间滚动的时候底部页面就不会跟着滚动了,很完美。

@touchmove.native.stop.prevent可以使我们省好多事,用起来吧!

以上这篇vue 解决mintui弹窗弹起来,底部页面滚动bug问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
求得div 下 img的src地址的js代码
Feb 28 Javascript
参考:关于Javascript中实现暂停的几篇文章
Mar 04 Javascript
jQuery 使用个人心得
Feb 26 Javascript
由document.body和document.documentElement想到的
Apr 13 Javascript
jquery 年会抽奖程序
Dec 22 Javascript
chrome下img加载对height()的影响示例探讨
May 26 Javascript
window.open()详解及浏览器兼容性问题示例探讨
May 29 Javascript
基于AGS JS开发自定义贴图图层
Mar 31 Javascript
利用three.js画一个3D立体的正方体示例代码
Nov 19 Javascript
vue 不使用select实现下拉框功能(推荐)
May 17 Javascript
了解JavaScript中的选择器
May 24 Javascript
Vue时间轴 vue-light-timeline的用法说明
Oct 29 Javascript
vue打包通过image-webpack-loader插件对图片压缩优化操作
Nov 12 #Javascript
详解ES6 扩展运算符的使用与注意事项
Nov 12 #Javascript
在vue中使用image-webpack-loader实例
Nov 12 #Javascript
Vue向后台传数组数据,springboot接收vue传的数组数据实例
Nov 12 #Javascript
JavaScript ES 模块的使用
Nov 12 #Javascript
在vue中给后台接口传的值为数组的格式代码
Nov 12 #Javascript
vue 解决provide和inject响应的问题
Nov 12 #Javascript
You might like
用PHP实现读取和编写XML DOM代码
2010/04/07 PHP
php笔记之:php函数range() round()和list()的使用说明
2013/04/26 PHP
php表单请求获得数据求和示例
2014/05/15 PHP
thinkPHP实现的省市区三级联动功能示例
2017/05/05 PHP
二级域名转向类
2006/11/09 Javascript
IE和Firefox在JavaScript应用中的兼容性探讨
2008/04/01 Javascript
JQuery从头学起第三讲
2010/07/06 Javascript
jquery 查找select ,并触发事件的实现代码
2011/03/30 Javascript
jQuery对表单元素的取值和赋值操作代码
2011/05/19 Javascript
JQuery里选择超链接的实现代码
2011/05/22 Javascript
浅析javascript中function 的 length 属性
2014/05/27 Javascript
nodejs教程之异步I/O
2014/11/21 NodeJs
JS中的==运算: [''] == false —&gt;true
2016/07/24 Javascript
Javascript获取background属性中url的值
2016/10/17 Javascript
Javascript使用uploadify来实现多文件上传
2016/11/16 Javascript
jquery实现瀑布流效果 jquery下拉加载新数据
2016/12/12 Javascript
整理关于Bootstrap导航的慕课笔记
2017/03/29 Javascript
简述Angular 5 快速入门
2017/11/04 Javascript
浅谈Emergence.js 检测元素可见性的 js 插件
2017/11/18 Javascript
微信小程序实现点击按钮移动view标签的位置功能示例【附demo源码下载】
2017/12/06 Javascript
JavaScript迭代器的含义及用法
2019/06/21 Javascript
js实现点击选项置顶动画效果
2020/08/25 Javascript
[44:15]国士无双DOTA2 6.82版本详解(上)
2014/09/28 DOTA
python 正则表达式 概述及常用字符
2009/05/04 Python
Python基于gevent实现高并发代码实例
2020/05/15 Python
python 操作mysql数据中fetchone()和fetchall()方式
2020/05/15 Python
关于多种方式完美解决Python pip命令下载第三方库的问题
2020/12/21 Python
一张图片能隐含千言万语之隐藏你的程序代码
2012/12/13 HTML / CSS
英国百安居装饰建材网上超市:B&Q
2016/09/13 全球购物
雅高酒店中国:Accorhotels.com China
2018/03/26 全球购物
韩国乐天网上商城:Lotte iMall
2021/02/03 全球购物
介绍一下木马病毒的种类
2015/07/26 面试题
中职生自荐信
2013/10/13 职场文书
信用社竞聘演讲稿
2014/05/16 职场文书
公司总经理岗位职责范本
2014/08/15 职场文书
html实现随机点名器的示例代码
2021/04/02 Javascript