无 js 解决滚动穿透,不知道兼不兼容苹果,其他没问题

2019-01-14 17:33:55 +08:00
 TomVista

膨胀.jpg

原理是:滚动穿透是因为 2 个滚动内容在文档结构上出现嵌套,导致滚动事件传递给父级滚动内容.所以把两个滚动部分从父子关系改为并列关系即可解决问题.

大多出现滚动穿透问题的父滚动内容为 document,所以必然嵌套.

那么让 document,body 不能滚后,body 内部才能实现并列滚动元素.

用 body 内的一个 div 模拟之前的 document 或 body,承载内容,相临元素作为第二个滚动内容,即可避免滚动穿透

另外,没百度到这个解决办法,如果已存在,还是膨胀.jpg

<!DOCTYPE html>
<html>

<head>
    <meta charset="utf-8" />
    <title>滚一个试试</title>
    <meta name="viewport" content="width=device-width, initial-scale=1">
</head>
<style>
    html,
    body {
        width: 100%;
        height: 100%;
        overflow: hidden;
        margin: 0;
        padding: 0;
    }

    .mainContainer {
        width: 100%;
        height: 100%;
        overflow: scroll;
    }

    .box {
        width: 300px;
        height: 300px;
    }
    .modal{
        position: fixed;
        left: 0;
        right: 0;
        top: 0;
        bottom: 0;
        width:300px;
        height: 100px;
        background-color:black;
        color:wheat;
        overflow: scroll;
    }
</style>

<body>
    <div class="mainContainer">
            <div class="box" style="background-color: aquamarine">
    
            </div>
            <div class="box" style="background-color:chocolate">
    
            </div>
            <div class="box" style="background-color: aquamarine">
    
            </div>
            <div class="box" style="background-color:chocolate">
    
            </div>
            <div class="box" style="background-color: aquamarine">
    
            </div>
            <div class="box" style="background-color:chocolate">
    
            </div>
            <div class="box" style="background-color: aquamarine">
    
            </div>
            <div class="box" style="background-color:chocolate">
    
            </div>
            <div class="box" style="background-color: aquamarine">
    
            </div>
            <div class="box" style="background-color:chocolate">
    
            </div>
            <div class="box" style="background-color: aquamarine">
    
            </div>
            <div class="box" style="background-color:chocolate">
    
            </div>
            <div class="box" style="background-color: aquamarine">
    
            </div>
            <div class="box" style="background-color:chocolate">
    
            </div>

    </div>
    <div class="modal">
        <div>rows</div>
        <div>rows</div>
        <div>rows</div>
        <div>rows</div>
        <div>rows</div>
        <div>rows</div>
        <div>rows</div>
        <div>rows</div>
        <div>rows</div>
        <div>rows</div>
        <div>rows</div>
        <div>rows</div>
        <div>rows</div>
        <div>rows</div>
        <div>rows</div>
        <div>rows</div>
    </div>
</body>

</html>
2539 次点击
所在节点    JavaScript
2 条回复
TomVista
2019-01-15 08:55:37 +08:00
可以收专利费过日子了:dog
KuroNekoFan
2019-01-15 10:02:42 +08:00
有的人有怪癖,觉得 body/document 就应该包住内容,比如我

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/526973

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX