vue 解决mintui弹窗弹起来,底部页面滚动bug问题
作者:vieber 发布时间:2024-04-30 10:47:22
经过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可以使我们省好多事,用起来吧!
来源:https://blog.csdn.net/sufubo/article/details/89535316


猜你喜欢
- Pytorch的backward()函数假若有多个loss函数,如何进行反向传播和更新呢? x = torch.tensor(2.0, re
- OpenCV的全称是:Open Source Computer Vision Library。OpenCV是一个基于BSD许可(开源)发行的
- 前言我们在写sql语句的时候,总是无法避免使用到连接关键词,比如内连接、外连接。种类是很多的,我在这里贴上一张在别处找到的图:这张图我认为是
- 如何随机显示图片计数器?一切就绪,看看我们的代码:count.asp< html >< head >
- UltraEdit简介UltraEdit 是一套功能强大的文本编辑器,可以编辑文本、十六进制、ASCII 码,完全可以取代记事本(如果电脑配
- 今天我们来学习,如何使用有趣的自定义标记来布局页面。有的朋友可能有这样的疑问,自己随便定义的标记浏览器怎么能正确的认识呢?这里我们就要用到文
- 2012年,AlexNet横空出世。它首次证明了学习到的特征可以超越手工设计的特征。它一举打破了计算机视觉研究的现状。AlexNet使用了8
- MySQL 复制表详解如果我们需要完全的复制MySQL的数据表,包括表的结构,索引,默认值等。 如果仅仅使用CREATE TABLE ...
- 人工智能是一种未来性的技术,目前正在致力于研究自己的一套工具。一系列的进展在过去的几年中发生了:无事故驾驶超过300000英里并在三个州合法
- 如何进行 Python 性能优化,是本文探讨的主要问题。本文会涉及常见的代码优化方法,性能优化工具的使用以及如何诊断代码的性能瓶颈等内容,希
- 一、在javascript中嵌入php代码javascript若是通过js文件包含进来的,那么js文件中也可以直接写php代码,
- 本人电脑是windows系统,装了Python3.7版本,但目前tensorflow支持最新的python版本为3.6,遂想再安装Pytho
- 在开发过程中经常碰到在本地环境无法完成联调测试的情况,必须到统一的联机环境对接其他系统测试。往往是出现了BUG难以查找数据记录及时定位到错误
- 使用auto.js实现自动化每日打卡疫情原因,需要在家每天定时打卡,每天刚起床的时候避免不了出现注意力不集中或者是看不到app,点不到按钮什
- unittest是python的一个单元测试框架关于断言它是用于对一个确定结果和预测结果的一种判断,如果结果正确无任何返回效果,如果结果错误
- 插入记录时,影响插入速度的主要是索引、唯一性校验、一次插入记录条数等。根据这些情况,可以分别进行优化,本节将介绍优化插入记录速度的几种方法。
- 1. 安装完整的vim# apt-get install vim-gnome2. 安装ctags,ctags用于支持taglist,必需!#
- 1 :普通SQL语句可以用exec执行Select * from tableName exec('select * from tab
- 一、selenium实战这里我们只会用到很少的selenium语法,我这里就不补充别的用法了,以实战为目的二、打开艺龙网可以直接点击这里进入
- python 版本 3.x首先安装 PIL由于PIL仅支持到Python 2.7,加上年久失修,于是一群志愿者在PIL的基础上创建了兼容的版