vue弹出模态框时禁止滚动、关闭时恢复滚动(针对npm下载的插件)

3 篇文章 0 订阅

在做项目时遇到的一个坑:一个通过npm下载的vue插件,原有的滚动功能在我的vue中无效,最后想到了一种解决方案:

当弹出模态框时禁止滚动

1、添加点击事件与方法

我用的插件正好支持在标签内套标签加插槽,直接用@click

methods:{
    stop(){
        this.scrollTop = document.scrollingElement.scrollTop;
        document.body.classList.add('modalOpen');
        document.body.style.top = `-${this.scrollTop}px`;
    }    
}

2、添加禁用css

用于禁用滚动,必须在./public/index.html里引入,否则stop()方法会找不到

.modalOpen {
    -webkit-overflow-scrolling:touch;
    position: fixed;
    width: 100%;
}

当关闭模态框时开启滚动

通过观察,点击"x"图标或'取消'键会关闭模态框,但不会开启滚动,而且跳转到其他页面时也不会开启,原因是我们没有移除modalOpen类

但问题来了,因为是模态框是弹出来后才有标签,因为是下载的插件所以不能在封装前写时间和方法,对此我想到了一个办法——在stop()方法里添加jquery监听事件

stop(){
    ...
    setTimeout(function () {
        var a = document.querySelectorAll('.btn-default')
        $('.btn-default').on('click', function() {
            $('body').removeClass("modalOpen");
        });
        $('.closeIcon').on('click', function() {
            $('body').removeClass("modalOpen");
        });
    },100);
}

注:给jquery设置一个延迟器才能监听到对应的键的类

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值