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 相关文章推荐
奇妙的js
Sep 24 Javascript
Javascript的时间戳和php的时间戳转换注意事项
Apr 12 Javascript
js 事件截取enter按键页面提交事件示例代码
Mar 04 Javascript
js调用百度地图及调用百度地图的搜索功能
Sep 07 Javascript
基于PHP和Mysql相结合使用jqGrid读取数据并显示
Dec 02 Javascript
Javascript基础教程之比较null和undefined值
May 16 Javascript
Node连接mysql数据库方法介绍
Feb 07 Javascript
VUE实现一个分页组件的示例
Sep 13 Javascript
Node.js进阶之核心模块https入门
May 23 Javascript
JavaScript设计模式之代理模式简单实例教程
Jul 03 Javascript
js+css实现红包雨效果
Jul 12 Javascript
实例详解Vue项目使用eslint + prettier规范代码风格
Aug 20 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 应用程序的安全 -- 不能违反的四条安全规则
2006/11/26 PHP
对比分析php中Cookie与Session的异同
2016/02/19 PHP
PHP封装XML和JSON格式数据接口操作示例
2019/03/06 PHP
火狐浏览器(firefox)下获得Event对象以及keyCode
2008/11/13 Javascript
javascript 伪数组实现方法
2010/10/11 Javascript
JS对HTML标签select的获取、添加、删除操作
2013/10/17 Javascript
Javascript Memoizer浅析
2014/10/16 Javascript
js实现下拉列表选中某个值的方法(3种方法)
2015/12/17 Javascript
深入理解Javascript中的自执行匿名函数
2016/06/03 Javascript
Angular 页面跳转时传参问题
2016/08/01 Javascript
Angular-Ui-Router+ocLazyLoad动态加载脚本示例
2017/03/02 Javascript
Angular CLI 安装和使用教程
2017/09/13 Javascript
用JavaScript做简易的购物车的代码示例
2017/10/20 Javascript
vue iview组件表格 render函数的使用方法详解
2018/03/15 Javascript
create-react-app安装出错问题解决方法
2018/09/04 Javascript
使用ng-packagr打包Angular的方法示例
2018/09/21 Javascript
p5.js临摹动态图形实现方法详解
2019/10/23 Javascript
《javascript设计模式》学习笔记一:Javascript面向对象程序设计对象成员的定义分析
2020/04/07 Javascript
在vue中使用jsonp进行跨域请求接口操作
2020/10/29 Javascript
python实现超简单端口转发的方法
2015/03/13 Python
详解Python编程中对Monkey Patch猴子补丁开发方式的运用
2016/05/27 Python
对python中的argv和argc使用详解
2018/12/15 Python
Python3使用xml.dom.minidom和xml.etree模块儿解析xml文件封装函数的方法
2019/09/23 Python
Python正则re模块使用步骤及原理解析
2020/08/18 Python
详解Scrapy Redis入门实战
2020/11/18 Python
canvas进阶之如何画出平滑的曲线
2018/10/15 HTML / CSS
欧洲第一的摇滚和金属乐队服装网站:EMP
2017/10/26 全球购物
日常奢侈品,轻松购物:Verishop
2019/08/20 全球购物
幼儿园门卫岗位职责
2014/02/14 职场文书
绩效工资实施方案
2014/03/15 职场文书
车辆工程专业求职信
2014/06/14 职场文书
实验心得体会
2014/09/05 职场文书
终止劳动合同通知书
2015/04/16 职场文书
2015年教师节感言
2015/08/03 职场文书
农村房屋租赁合同(范本)
2019/07/23 职场文书
python小型的音频操作库mp3Play
2022/04/24 Python