防止固定元素在智能手机上移动

Posted

技术标签:

【中文标题】防止固定元素在智能手机上移动【英文标题】:prevent fixed element from moving on smartphone 【发布时间】:2020-04-26 18:41:18 【问题描述】:

我有以下 sn-p 工作,除非您滚动到#section-container 的底部,顶部的固定元素会移动。如何防止这种情况发生在智能手机上?

html 
  margin: 0;
  padding: 0;
  height: 100%;
  width: 100%; 
  background-color: orange;


body 
  margin: 0;
  padding: 0;
  height: 100%;
  width: 100%; 


#container 
  position: -webkit-sticky;
  position:sticky;
  height: 80%;
  width: 100%;
  top: 20%;
  background-color: purple;


#fixed 
  position: -webkit-sticky;
  position:sticky;
  top: 0;
  height: 20%;
  width: 100%;
  background-color: lightblue;


#section-container 
  height: 100%;
  overflow: scroll;


.sections 
  height: 100%;


#section1,
#section3 
  background-color: blue;


#section2 
  background-color: red;
<!DOCTYPE html>
<html>

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

</head>

<body>
  <div id='fixed'>

  </div>
  <div id='container'>

    <div id='section-container'>
      <div id='section1' class='sections'>

      </div>
      <div id='section2' class='sections'>

      </div>
      <div id='section3' class='sections'>

      </div>
    </div>
  </div>
</body>

</html>

【问题讨论】:

移除位置:固定;和顶部:0;从你的 CSS 的 html 和 body 部分开始 没有区别 它会在您将浅蓝色部分更改为 position:sticky 而不是 fixed 时(此外。无论如何,您的 body 和 html 将始终从顶部开始,并且绝对定位在响应式设计中永远不会起作用。位置应该只应用于正文中的元素 @Rachel Gallen 感谢您抽出宝贵时间回答,但您的建议并没有真正帮助。如果您首先测试您的建议以确保它们有效,将会有所帮助。 这是 Safari 特有的吗? 【参考方案1】:

我找到了一个名为 bodyScrollLock 的 js 库,它可以工作。做这么简单的事情似乎需要很多开销。有没有人有更原生的解决方案?

<!DOCTYPE html>
<html>
    <head>
        <meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1" >
        <title>scroll</title>
        <script src="https://www.sustainablewestonma.org/swag/public/js/bodyScrollLock.min.js?test0=xxx"></script>
        <style>
            html
                margin:0;
                padding:0;
                height:100%;
                width:100%;
                background-color:orange;
            
            body
                margin:0;
                padding:0;
                height:100%;
                width:100%;
            
            #container
                position: -webkit-sticky;
                position:sticky;
                height:80%;
                width:100%;
                top:20%;
                background-color:purple;
            
            #fixed
                position: -webkit-sticky;
                position:sticky;
                top:0;
                height:20%;
                width:100%;
                background-color:lightblue;
            
            #section-container
                height:100%;
                overflow:scroll;
                
            
            .sections
                height:100%;
            
            #section1,#section3
                background-color:blue;
            
            #section2
                background-color:red;
            
        </style>
    </head>
    <body id='myBody'>
        <div id='fixed'>
                
        </div>
        <div id='container'>
            
            <div id='section-container'>
                <div id='section1' class='sections'>
                    
                </div>
                <div id='section2' class='sections'>
                    
                </div>
                <div id='section3' class='sections'>
                    
                </div>
            </div>
        </div>
        <script>
            const scrollElement = document.getElementById('section-container');
            bodyScrollLock.disableBodyScroll(scrollElement);
        </script>
    </body>
</html>

【讨论】:

以上是关于防止固定元素在智能手机上移动的主要内容,如果未能解决你的问题,请参考以下文章

围绕三个.js 对象移动智能手机摄像头

手机控车OBD-移动管家手机控车方案基于Android手机智能控制汽车系统的研究与实现;

如何在移动 Android 智能手机上的 Chrome 浏览器中进行“硬页面重新加载”

透过MWC看全球智能手机市场的兴衰

在智能手机上使用 TensorFlow

怎么样提高手机网站的用户浏览体验