自定义指令--【v-lockScroll】用来锁定滚动条

背景

最近在开发业务上,遇到了自己封装的modal组件,组件弹出的时候,会覆盖到页面最上层。 但是覆盖出现了,而页面底层的滚动条还可以滑动,这样对用户就不是很友好了。 如下效果:

解决方案

于是,思考过后,发现我们自己封装一个自定义指令,在组件展示的时候将滚动条给锁定+隐藏,问题就解决了。

思路

  • 当我们使用v-lockscroll="true"时,在指令mounted时计算出滚动条的宽度

    滚动条的宽度=浏览器窗口宽度 - 文档内部宽度.

  • body设置overflow为hidden

  • 重新设置body宽度和浏览器窗口宽度一致。

  • unmounted时候将body的overflow和宽度复原到最初。

具体的实现如下:

vue 复制代码
<template>
    <!-- 使用自定义指令 -->
    <div v-lockscroll>
        //....其余DOM元素
    </div>
</template>


<script setup>
//自定义指令锁定滚动条
const VLockscroll = {
    mounted(_el, binding) {
        if (binding.value) {
            const scrollBarWidth = window.innerWidth - document.documentElement.clientWidth
            document.body.style.overflow = 'hidden'
            document.body.style.width = `calc(100% - ${scrollBarWidth}px)`
            // console.log('scrollBarWidth', scrollBarWidth);
            // document.body.style.paddingRight = `${scrollBarWidth}px`
        }
    },
    unmounted() {
        document.body.style.overflow = ''
        document.body.style.width = ''
    }
}
</script>

效果

这个时候当我们再次打开组件时候,页面的滚动条就被禁用了。


朋友,我是喝西瓜汁的兔叽,感谢您的阅读,衷心祝福您和家人身体健康,事事顺心。

相关推荐
likuolei15 分钟前
XSL-FO 软件
java·开发语言·前端·数据库
正一品程序员16 分钟前
vue项目引入GoogleMap API进行网格区域圈选
前端·javascript·vue.js
j***894621 分钟前
spring-boot-starter和spring-boot-starter-web的关联
前端
star_111227 分钟前
Jenkins+nginx部署前端vue项目
前端·vue.js·jenkins
im_AMBER34 分钟前
Canvas架构手记 05 鼠标事件监听 | 原生事件封装 | ctx 结构化对象
前端·笔记·学习·架构
JIngJaneIL35 分钟前
农产品电商|基于SprinBoot+vue的农产品电商系统(源码+数据库+文档)
java·前端·数据库·vue.js·spring boot·毕设·农产品电商系统
Tongfront40 分钟前
前端通用submit方法
开发语言·前端·javascript·react
可爱又迷人的反派角色“yang”43 分钟前
LVS+Keepalived群集
linux·运维·服务器·前端·nginx·lvs
han_44 分钟前
前端高频面试题之CSS篇(二)
前端·css·面试
JIngJaneIL1 小时前
书店销售|书屋|基于SprinBoot+vue书店销售管理设计与实现(源码+数据库+文档)
java·前端·数据库·vue.js·spring boot·毕设·书店销售管理设计与实现