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 相关文章推荐
修复IE9&amp;safari 的sort方法
Oct 21 Javascript
javascript 实现简单的table排序及table操作练习
Dec 28 Javascript
jQuery模拟超链接点击效果代码
Apr 21 Javascript
JS保留小数点(四舍五入、四舍六入)实现思路及实例
Apr 25 Javascript
js动态修改表格行colspan列跨度的方法
Mar 30 Javascript
从零开始学习Node.js系列教程之设置HTTP头的方法示例
Apr 13 Javascript
Bootstrap Multiselect 常用组件实现代码
Jul 09 Javascript
使用angularjs.foreach时return的问题解决
Sep 30 Javascript
Koa从零搭建到Api实现项目的搭建方法
Jul 30 Javascript
vue-cli3跨域配置的简单方法
Sep 06 Javascript
中级前端工程师必须要掌握的27个JavaScript 技巧(干货总结)
Sep 23 Javascript
Openlayers实现图形绘制
Sep 28 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
PHP4实际应用经验篇(7)
2006/10/09 PHP
php继承的一个应用
2011/09/06 PHP
PHP中auto_prepend_file与auto_append_file用法实例分析
2014/09/22 PHP
php从memcache读取数据再批量写入mysql的方法
2014/12/29 PHP
PHP实现上传文件并存进数据库的方法
2015/07/16 PHP
Kindeditor编辑器添加图片上传水印功能(php代码)
2017/08/03 PHP
PHP创建XML的方法示例【基于DOMDocument类及SimpleXMLElement类】
2019/09/10 PHP
使用jQuery轻松实现Ajax的实例代码
2010/08/16 Javascript
让复选框只能选择一项的方法
2013/10/08 Javascript
jQuery实现简单网页遮罩层/弹出层效果兼容IE6、IE7
2014/06/16 Javascript
简单的jQuery banner图片轮播实例代码
2016/03/04 Javascript
Node.js文件操作方法汇总
2016/03/22 Javascript
辨析JavaScript中的Undefined类型与null类型
2016/05/26 Javascript
JS图片左右无缝隙滚动的实现(兼容IE,Firefox 遵循W3C标准)
2016/09/23 Javascript
javascript中的后退和刷新实现方法
2016/11/10 Javascript
JavaScript微信定位功能实现方法
2016/11/29 Javascript
layui表格数据重载
2019/07/27 Javascript
layui 点击重置按钮, select 并没有被重置的解决方法
2019/09/03 Javascript
mapboxgl实现带箭头轨迹线的代码
2021/01/04 Javascript
vue 数据双向绑定的实现方法
2021/03/04 Vue.js
SublimeText 2编译python出错的解决方法(The system cannot find the file specified)
2013/11/27 Python
python django集成cas验证系统
2014/07/14 Python
如何使用 Pylint 来规范 Python 代码风格(来自IBM)
2018/04/06 Python
numpy.ndarray 交换多维数组(矩阵)的行/列方法
2018/08/02 Python
Django中如何防范CSRF跨站点请求伪造攻击的实现
2019/04/28 Python
对pyqt5中QTabWidget的相关操作详解
2019/06/21 Python
Python OrderedDict的使用案例解析
2019/10/25 Python
美国眼镜网:GlassesUSA
2017/09/07 全球购物
REN Clean Skincare官网:英国本土有机护肤品牌
2019/02/23 全球购物
新锐科技Java程序员面试题
2016/07/25 面试题
班级标语大全
2014/06/21 职场文书
最新离婚协议书范本
2014/08/19 职场文书
2014年图书管理员工作总结
2014/12/01 职场文书
2014年煤矿安全工作总结
2014/12/04 职场文书
大学生自我推荐信范文
2015/03/24 职场文书
python如何利用cv2.rectangle()绘制矩形框
2022/12/24 Python