首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >jQuery检测涡旋上的div位置

jQuery检测涡旋上的div位置
EN

Stack Overflow用户
提问于 2015-12-09 16:27:39
回答 2查看 2.3K关注 0票数 2

我对jQuery并不熟悉,我很难让jQuery检测到div.stag-O的位置,这样在向下滚动时.header就不会消失,直到页面的底部-O到达页面的顶部?

代码语言:javascript
复制
jQuery(document).ready(function () {
    var lastFixPos = 0,
	threshold = 100, //sensitivity on scrolling
  	$header = $('.header');
	
	

$(window).on('scroll', function() {
  var st = $(this).scrollTop();
  var diff = Math.abs($(window).scrollTop() - lastFixPos);

  if (diff > threshold || st < 100) {
    if (st < lastFixPos) {
      // scroll up
      $header.removeClass('hide').addClass('color headerBGchange headerLIchange');
    }
    lastFixPos = st;
  } else if (st > lastFixPos) {
    //scroll down 
    $header.addClass('hide').removeClass('color');
  }

});

$(window).scroll(function(e) {
    var sw = $('.header'),
        pg = $('.stage-2'),
        diff = pg[0].offsetbottom - window.pageYOffset;
            
    sw.css('background-color', diff < 100 ? 'white' : '');
});
	});
代码语言:javascript
复制
.header {
  display: -webkit-box;
  display: -webkit-flex;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
  -webkit-align-items: center;
      -ms-flex-align: center;
          align-items: center;
  height: 80px;
  -webkit-transition: top 250ms ease;
  transition: top 250ms ease;
  position: fixed;
  width: 100%;
  top: 0;
  background-color: transparent;
  overflow: hidden;
}
.header ul {
  margin: 20px;
  padding: 0;
}
.header ul li {
  display: inline-block;
  margin-right: 20px;
  color: green;
}
.header ul li:last-child {
  margin-right: 0;
}

.hide {
  top: -80px;
}

.headerBGchange{
	Background: white;
}

.headerLIchange{
	color: Blue;
}

.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: bisque;
  font-size: 48px;
}

.stage-0 {
  background: black;
}

.stage-1 {
  background: #030202;
}

.stage-2 {
  background: #060505;
}

.stage-3 {
  background: #080707;
}

.stage-4 {
  background: #0b0a09;
}

.stage-5 {
  background: #0e0c0b;
}

.stage-6 {
  background: #110e0e;
}

.stage-7 {
  background: #141110;
}

.stage-8 {
  background: #161312;
}

.stage-9 {
  background: #191515;
}

.stage-10 {
  background: #1c1817;
}

.stage-11 {
  background: #1f1a19;
}

.stage-12 {
  background: #221d1c;
}

.stage-13 {
  background: #241f1e;
}

.stage-14 {
  background: #272120;
}

.stage-15 {
  background: #2a2422;
}

.stage-16 {
  background: #2d2625;
}

.stage-17 {
  background: #302827;
}

.stage-18 {
  background: #322b29;
}

.stage-19 {
  background: #352d2c;
}

.stage-20 {
  background: #38302e;
}

.stage-21 {
  background: #3b3230;
}

.stage-22 {
  background: #3e3432;
}

.stage-23 {
  background: #413735;
}

.stage-24 {
  background: #433937;
}
代码语言:javascript
复制
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>

<div class="header">
  <ul>
    <li>Home</li>
    <li>About</li>
    <li>Contact</li>
  </ul>
</div>
<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>

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-12-09 19:14:23

这就是你要找的吗?我对代码做了相当大的修改,因为你的代码看起来有点过于复杂了。不知道为什么要附加两个滚动事件。另外,我只是在舞台类中添加了一个红色边框,这样你就可以清楚地看到我们什么时候通过了它的底部。

小提琴:http://jsfiddle.net/AtheistP3ace/4hs7n0Lq/

代码语言:javascript
复制
var lastScrollTop = 0;
$(window).on('scroll', function() {
    var header = $('.header');
    var stage0 = $('.stage-0');
    var scrollTop = $(window).scrollTop();
    if (scrollTop > lastScrollTop) {
        // down scroll
        if (scrollTop > stage0.offset().top + stage0.height()) {
            header.addClass('hide').removeClass('color');
        }
    } else {
        // up scroll
        if (scrollTop <= stage0.offset().top + stage0.height()) {
            header.removeClass('color headerBGchange headerLIchange');
        } else {
            header.removeClass('hide').addClass('color headerBGchange headerLIchange');
        }
    }
    lastScrollTop = scrollTop;
});

它只是跟踪lastScroll,以确定我们是上升还是下降。如果我们要下降,让我们检查我们是否通过通过获得它的偏移量加上它的高度(底部)通过stage0 div。如果我们正在滚动,让我们看看我们是否在stage0 div底部,如果不是,我们正在滚动,但还没有达到它。

至于您关于文本颜色的问题,它不起作用,因为您在标题上设置了颜色,这将层叠而下,但您也有以下内容:

代码语言:javascript
复制
.header ul li {
    display: inline-block;
    margin-right: 20px;
    color: green;
}

这是一个更具体的选择器,因此它会覆盖更高的选择器。所以而不是

代码语言:javascript
复制
.headerLIchange {
    color: Blue;
}

代码语言:javascript
复制
.header.headerLIchange ul li {
    color: Blue;
}

小提琴:http://jsfiddle.net/AtheistP3ace/4hs7n0Lq/1/

票数 3
EN

Stack Overflow用户

发布于 2015-12-09 16:39:26

这可能对你有帮助:

代码语言:javascript
复制
<body onload="document.getElementById('scrollBox').scrollTop = document.getElementById('scrollPosition').value;">
<input type="hidden" id="scrollPosition" />
<div id="scrollBox" style="overflow:scroll;height:100px;width:150px;" onscroll="javascript:document.getElementById('scrollPosition').value = this.scrollTop">
...content goes here...
...more content...
...link goes here...
</div>
</body>

参考文献: position.cfm

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34183925

复制
相关文章

相似问题

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