当我滚动过去某个部分的某个部分时,某些元素不会淡入

Posted

技术标签:

【中文标题】当我滚动过去某个部分的某个部分时,某些元素不会淡入【英文标题】:Certain element won't fade in when I scroll past a certain portion of a section 【发布时间】:2018-10-12 06:29:05 【问题描述】:

我的代码有点问题。

如您所见,我的示例包含三个部分。更确切地说是landing-pagesectionabout。对于最后两个,我使用CSS grid 将它们分成两个小节。

我正在尝试使用jquery 在滚动上实现transition。就像,当我滚动超过 section 的 1/3 时,我的 left 元素开始从 opacity:0 消失。这应该分别发生在我的about 部分中的我的right 元素上,但是对于我的代码,一旦我滚动超过section 的1/3,就会发生这种情况。

我尝试将right.hidden 的类更改为right.hide,它完全停止了褪色。

下面我附上了我的代码,这是一个 link 到我的 CodePen

翡翠

.landing-page
.section
  .left.hidden
  .right
.about
  .left
  .right.hidden 

萨斯

.landing-page
  height: 100vh
  width: 100vw
  background: gray
.section
  height: 100vh
  width: 100vw
  display: grid
  grid-template-columns: repeat(2, 1fr)
  grid-template-areas: 'left right' 'left right'
  .left
    grid-area: left
    background: orangered
    transition: 2000ms
  .left.hidden
    opacity: 0
  .right
    grid-area: right
    background: lightblue
.about
  height: 100vh
  width: 100vw
  display: grid
  grid-template-columns: repeat(2, 1fr)
  grid-template-areas: 'left right' 'left right'
  .left
    grid-area: left
    background: lightgreen
  .right
    grid-area: right
    background: orangered
    transition: 2000ms
  .right.hidden
    opacity: 0

jQuery

$(document).ready(function() 
  var sectionLeftEl = $('.left'),
      sectionRightEl = $('.right'),
      sectionLeftElOffset = sectionLeftEl.offset().top / 3,
      sectionRightElOffset = sectionRightEl.offset().top / 3,
      documentEl = $(document);

  documentEl.on('scroll', function() 
    if (documentEl.scrollTop() > sectionLeftElOffset && sectionLeftEl.hasClass('hidden')) sectionLeftEl.removeClass('hidden');
    if (documentEl.scrollTop() > sectionRightElOffset && sectionRightEl.hasClass('hidden') sectionRightEl.removeClass('hidden');

  );
);

【问题讨论】:

为什么要隐藏?该类被称为隐藏 仔细阅读我的帖子。我尝试更改它,因为我认为滚动 1/3 左右后它会消失 我读了这篇文章,仍然不明白为什么要改成不存在的课程?你期待什么?您必须删除或添加现有类 我认为使用隐藏的类,这在两个 div 之间很常见,创建了这个过渡。我希望我的右元素在我滚动 1/3 的 about div 后消失,而不是在我滚动 1/3 到部分后。这就是为什么我尝试使用不同的类。 你的问题是偏移量计算,你有两个右边部分,你得到第一个与左边第一个相同的偏移量 【参考方案1】:

如果我理解正确,计算是错误的(@Temani Afif 提到的选择器问题的补充)。

截面偏移(右或左)应为

sectionTopOffset - 2 / 3 * sectionHeight

想象一下(或测试一下)当您开始滚动时,您可以看到.section 的顶部。所以你希望每当你超过 1/3 中的 .section 时,就像说 2 / 3 * .section.height()

所以:

$(document).ready(function() 
  var sectionLeftEl = $('.section .left'),
    sectionRightEl = $('.about .right'),
    sectionLeftElOffset = sectionLeftEl.offset().top - (2 * sectionLeftEl.height() / 3),
    sectionRightElOffset = sectionRightEl.offset().top - (2 * sectionRightEl.height() / 3),
    documentEl = $(document);

  documentEl.on('scroll', function() 
    if (documentEl.scrollTop() > sectionLeftElOffset && sectionLeftEl.hasClass('hidden')) sectionLeftEl.removeClass('hidden');
    if (documentEl.scrollTop() > sectionRightElOffset && sectionRightEl.hasClass('hidden')) sectionRightEl.removeClass('hidden');
  );
);
.landing-page 
  height: 100vh;
  width: 100vw;
  background: gray;


.section 
  height: 100vh;
  width: 100vw;
  display: grid;
  grid-template-columns: repeat(2, 1fr);
  grid-template-areas: "left right" "left right";


.section .left 
  grid-area: left;
  background: orangered;
  transition: 2000ms;


.section .left.hidden 
  opacity: 0;


.section .right 
  grid-area: right;
  background: lightblue;


.about 
  height: 100vh;
  width: 100vw;
  display: grid;
  grid-template-columns: repeat(2, 1fr);
  grid-template-areas: "left right" "left right";


.about .left 
  grid-area: left;
  background: lightgreen;


.about .right 
  grid-area: right;
  background: orangered;
  transition: 2000ms;


.about .right.hidden 
  opacity: 0;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="landing-page"></div>
<div class="section">
  <div class="left hidden"></div>
  <div class="right"></div>
</div>
<div class="about">
  <div class="left"></div>
  <div class="right hidden"></div>
</div>

https://codepen.io/moshfeu/pen/jxmYyp?editors=0010

【讨论】:

以上是关于当我滚动过去某个部分的某个部分时,某些元素不会淡入的主要内容,如果未能解决你的问题,请参考以下文章

Div 在滚动时的某个点淡入

如何检测是不是在某个元素内发生滚动

导航上的淡入淡出和滑动效果(jQuery)

js进入页面时设置滚动条滚动到某个元素的位置

缩小 UIScrollView 以专注于某个页面

滚动过去元素时更改固定标题的背景