【问题标题】: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 到部分后。这就是为什么我尝试使用不同的类。
  • 你的问题是偏移量计算,你有两个右边部分,你得到第一个与左边第一个相同的偏移量

标签: jquery html css sass pug


【解决方案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

【讨论】:

    猜你喜欢
    • 2018-08-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-23
    • 1970-01-01
    • 2014-06-13
    • 1970-01-01
    • 2019-12-09
    相关资源
    最近更新 更多