html 使用“锁定”正文覆盖滚动的示例页面

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了html 使用“锁定”正文覆盖滚动的示例页面相关的知识,希望对你有一定的参考价值。

<!DOCTYPE html>
<html>

<head>
<meta name="viewport" content="width=device-width, initial-scale=1">

    <style>
    .noscroll {
        overflow: hidden;
    }
    
    .content {
        background: linear-gradient(red, green);
        height: 600vh;
        overflow: hidden;
    }
    
    .overlay-wrapper {
        display: none;
        position: fixed;
        top: 0;
        left: 0;
        right: 0;
        bottom: 0;
        overflow-y: auto;
        -webkit-overflow-scrolling: touch;
    }
    
    .overlay-wrapper .shim {
        width: 1px;
        height: 101vh;
    }
    
    .overlay-wrapper .overlay-content {
        position: absolute;
        top: 100px;
        left: 40px;
        right: 40px;
        bottom: 80px;
        text-align: center;
        background-color: rgba(255, 255, 255, 0.75);
    }
    </style>
</head>

<body class="">
    <div class="content"></div>
    <div class="overlay-wrapper">
        <div class="overlay-content">
            <h2>Menu Item</h2>
            <h2>Menu Item</h2>
            <h2>Menu Item</h2>
            <h2>Menu Item</h2>
            <button onclick="closeMenu();">Close Menu</button>
        </div>
    </div>
    <script>
    var content = document.getElementsByClassName('content')[0];

    for (var i = 0; i < 9000; i++) {

        var node = document.createElement('h1');
        node.innerHTML = i + ' LOREM IPSUM';
        content.appendChild(node)

        if (!(i % 10)) {
            var btn = document.createElement('button');
            btn.innerHTML = 'OPEN MENU';
            btn.onclick = openMenu;
            content.appendChild(btn)
        }
    }

    function openMenu() {
        document.body.className += ' noscroll';

        var overlay = document.getElementsByClassName('overlay-wrapper')[0];
        
        var shim = document.createElement('div');
        shim.setAttribute('class', 'shim');

        overlay.appendChild(shim);
        overlay.setAttribute('style', 'display: block;');
    }

    function closeMenu() {
        console.log('hi');
        document.body.className = document.body.className.replace(' noscroll', '');

        var overlay = document.getElementsByClassName('overlay-wrapper')[0];
        overlay.setAttribute('style', '');

        var shim = document.getElementsByClassName('shim')[0];
        shim.parentNode.removeChild(shim);
    }
    </script>
</body>

</html>

以上是关于html 使用“锁定”正文覆盖滚动的示例页面的主要内容,如果未能解决你的问题,请参考以下文章

我的 Flutter 网页的滚动正文出现问题

页面正文滚动时如何滚动元素?

mCustomScroll - 页面加载上的滚动正文焦点[关闭]

Ipad iOS 滚动不一致:禁用正文滚动但允许在某些元素上滚动

Bootstrap 页脚覆盖正文内容

iOS页面控制滚动锁定