首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用Scroll top方法

如何使用Scroll top方法
EN

Stack Overflow用户
提问于 2016-01-12 02:51:38
回答 4查看 1.3K关注 0票数 11

滚动上的标题应该像jQuery中指示的那样向下滑动/向上滑动,然而,在移动iOS中不会发生这种情况,并且标题在屏幕顶部抖动?

它适用于Chrome、Mozilla Firefox、Internet Explorer和Safari --在大浏览器上。

这是不是因为不正确地使用了scroll top方法?我该如何纠正这个问题呢?

代码语言:javascript
复制
jQuery(document).ready(function ($) {
var lastScrollTop = 0;
$(window).scrollTop(0);

$(window).on('scroll', function() {
    var header = $('header');
    var content = $('content');
    var headerBg = $('.header-bg');
    var headerCnt = $('.header-content');
    var scrollTop = $(window).scrollTop();
    var dynHeaderVisible = false;
  
    if (lastScrollTop > scrollTop) {
      if (scrollTop <= 400) {
        headerBg.css("height", 0);
        headerCnt.css('color', 'white');
      } else {
        headerBg.css("height", 80);
        headerCnt.css("height", 80);
        headerCnt.css('color', 'black');
      }
    } else {
      // Down
      if (scrollTop > 350) {
        console.log ("hi");
        headerCnt.css("height", 0);
        headerBg.css("height", 0);
      }
    }
    
    lastScrollTop = scrollTop;
});

$.fn.isOnScreen = function(){
    var element = this.get(0);
    var bounds = element.getBoundingClientRect();
    return bounds.top < window.innerHeight && bounds.bottom > 0;
}
});
代码语言:javascript
复制
* {
  margin: 0;
  padding: 0;
  box-sizing: border-box;
  width: 100%;
  margin: 0;
  list-style: none;
  text-decoration: none;
  font-size:1em;
  font-family: Helvetica Neue, Helvetica, Arial, Sans-serif;
  }
	a {
    background:transparent;
    border:none;
    letter-spacing:0.15em;
    text-transform:uppercase;
    transition: .3s color;
	transition: .3s height;
	}


header {
  display: block;
  position: fixed;
  height: 80px;
  width: 100%;
}

header ul {
  z-index: 20;
}

.header-wrapper {
  position: relative;
  width: 100%;
  height: 100%;
  background-color: transparent;
}

.header-bg,
.header-content {
  position: fixed;
  top: 0;
  left: 0;
  width: 100%;
  text-align: center;
}

.header-bg {
  z-index: 100;
  color: gray;
  background-color: white;
  border-bottom: 1px solid black;
  transition: .3s height;
  height: 0;
}

.header-content {
  z-index: 200;
  transition: .3s color;
  color: white;
  background-color: transparent;
  height: 80px;
  transition: .3s height;
  overflow: hidden;
  list-style: none;
}

.logo {
    position: absolute;
    left: 47%;
	color: inherit;
    display: inline-block;
    width: 15px;
    height: 15px;
    padding: 18px;
    cursor: pointer;
    font-size:.8em;
    letter-spacing:0.05em;
	transition: .3s color;
	}
</style>
<style>

content {
  display: block;
  height: 2000px;
  background-color: orange;
}

.stage {
    color: #fff;
    display: -webkit-box;
    display: -webkit-flex;
    display: -ms-flexbox;
    display: flex;
    -webkit-box-pack: center;
    -webkit-justify-content: center;
    -ms-flex-pack: center;
    justify-content: center;
    -webkit-box-align: center;
    -webkit-align-items: center;
    -ms-flex-align: center;
    align-items: center;
    height: 100vh;
    background-color: white;
	border-bottom: 1px solid black;
    font-size: 48px;
	height: 200px;
	width: 100%;
}

.stage-0 {
    background: grey;
    height: 400px;
}
代码语言:javascript
复制
<script src=	"//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>

<header>
  <div class="header-wrapper">
    <div class="header-bg"></div>
    <div class="header-content">
      <ul>
        <li>
        <a href="" class="logo">Logo </a>
        </li>
      </ul>
    </div>
  </div>
</header>
<content>
<div class="stage stage-0">1</div>
<div class="stage stage-2">3</div>
<div class="stage stage-4">5</div>
<div class="stage stage-6">7</div>
<div class="stage stage-8">9</div>
<div class="stage stage-10">11</div>
<div class="stage stage-12">13</div>
<div class="stage stage-14">15</div>
<div class="stage stage-16">17</div>
<div class="stage stage-18">19</div>
<div class="stage stage-20">21</div>
<div class="stage stage-22">23</div>
</content>

EN

回答 4

Stack Overflow用户

发布于 2016-01-14 22:52:11

试试这段代码

代码语言:javascript
复制
$(window).scroll(function() {
    var scrollTop = $(this).scrollTop(), //Get the current vertical position of the scroll bar for the first element in the set of matched elements
                     header = $('.header-content'); // Target Element

    if(scrollTop > header.offset().top) {
        header.addClass('navbar-fixed-top'); 
    }
}
票数 1
EN

Stack Overflow用户

发布于 2016-01-18 19:06:37

固定的元素可能会在移动设备上产生一些相当不稳定的效果,因为它不能与触摸事件正常工作(在这种情况下,我猜是滚动)。

如果这是这里的问题,我不是100%,但我认为很有可能是这样。

有一个叫做https://modernizr.com/的软件可以帮助你检测所有与浏览器相关的东西,包括它是否能在触摸屏上工作。我不认为目前有一个真正的解决方案来解决触摸事件和固定元素之间的不良工作,但使用现代你可以尝试找到某种解决方案。

祝你好运!

票数 1
EN

Stack Overflow用户

发布于 2016-01-20 00:14:42

这可能是因为您在其他position: fixed元素中嵌套了一些position:fixed元素。根据我的经验,这有时会在手机上导致奇怪的bug。

因此,尝试替换此规则中的position:fixed行:

代码语言:javascript
复制
.header-bg,
.header-content {
  position: fixed;
  top: 0;
  left: 0;
  width: 100%;
  text-align: center;
}

使用position: absolute

代码语言:javascript
复制
.header-bg,
.header-content {
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  text-align: center;
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34728885

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档