Эффекты перехода для закрепленного заголовка с фиксированным положением - PullRequest
0 голосов
/ 07 апреля 2020

У меня есть заголовок, который принимает "липкий" класс при прокрутке окна на JS, размеры заголовка отличаются на липком, потому что некоторые элементы отображаются в исходном заголовке и скрыты в липком заголовке, но это тот же самый элемент, который отображается.

Я пытался сделать переход плавным и красивым, поэтому я хотел добавить некоторые ( Fade-in ) и ( Fade-out ) переходы, I был в состоянии добавить постепенное добавление, добавив эффект перехода к background-color, например:

 transition: background-color 800ms linear; 

Но это не относится к исчезновению, так как я хочу, чтобы стилизация липкого заголовка исчезла плавно, в то время как оригинальный заголовок (который является тем же элементом) должен отображаться вместо этого, так что все, что я пытался скрывать заголовок вообще при исчезновении, все вопросы и поиск в Google, я обнаружил, что все они имеют одинаковые размеры заголовка и просто уменьшить непрозрачность, или у них есть два элемента заголовка, оригинальный заголовок и один, который берет липкий стиль и просто скрывает липкий, используя:

$(header).fadeOut(800);

В моем случае, это тот же элемент, который я хочу скрыть , но я должен сделать это гладко, что я могу сделать?

HTML:

<div class="main">

  <div class="header">
    Test Header
    <div class="showOnSticky">
      <p>
        Stricky Header
      </p>
      <p>
        Stricky Header
      </p>
    </div>

    <div class="dontShowOnSticky">
      <p>Don't display me on sticky header</p>
      <p>
        Test
      </p>
      <p>
        Test
      </p>
    </div>
  </div>

  <div class="contents">
    Test some other elements

    <div>
some content .....
</div> 

</div>

CSS код:

.header {
  background-color: #eeeeee;
  transition: background-color 2s linear;
}

.header.sticky {
  position: fixed;
  top: 0;
  width: 100%;
  background-color: yellow;
  transition: background-color 2s linear;
}

.header.sticky .dontShowOnSticky {
  display: none;
}

.header.sticky + div {
  padding-top: 310px;
}

.contents {
  background-color: blue;
  color: white;

}

JS:

$(document).ready(function() {
  var header = document.querySelector(".main .header");
  var header_scroll_top = header.offsetTop + header.clientHeight;

  $(window).scroll(function() {

    if (header) {
      var window_scroll_top = window.pageYOffset || document.documentElement.scrollTop;

      if (window_scroll_top > header_scroll_top && !header.classList.contains("sticky")) {
        header.classList.add("sticky");
      } else if (window_scroll_top < header_scroll_top && header.classList.contains("sticky")) {
        header.classList.remove("sticky");
      }
    }
  });
});

Вот демонстрационная версия для моего кода:

https://jsfiddle.net/k3g2y9z7/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...