我有一个使用jQuery的有效“粘性栏”实现:https://jsfiddle.net/mdyv740o/3/

<!DOCTYPE html>
<html>
<head>
  <script src="jquery.min.js"></script>

  <meta name="viewport" content="width=device-width, initial-scale=1">
  <style>
    body {
      margin: 0;
      font-family: Arial;
    }

    .top-container {
      background-color: #f1f1f1;
      padding: 30px;
      text-align: center;
    }

    .header {
    }

    .content {
      padding: 16px;
    }

    .sticky {
      position: fixed;
      top: 0;
      width: 100%;
    }

    .sticky .sticky-body {
      background: #555;
      color: #f1f1f1;
      padding: 10px 16px;
      margin: 10px;
    }

    .sticky + .content {
      padding-top: 90px;
    }
  </style>
</head>
<body>

<div class="top-container">
  <h1>My Sticky Bar Demo</h1>
  <p>Scroll down to see the sticky effect....</p>
</div>

<div class="header" id="myHeader">
  <button type="button">Button 1</button>
  <button type="button">Button 2</button>
  <button type="button">Button 3</button>
  <button type="button">Button 4</button>
  <button type="button">Button 5</button>
</div>

<div class="content">
  <h3>On Scroll Sticky Header</h3>
  <p>The header will stick to the top when you reach its scroll position.</p>
  <p>Scroll back up to remove the sticky effect.</p>
  <p>Some text to enable scrolling.. Lorem ipsum dolor sit amet, illum definitiones no quo,
    maluisset concludaturque et eum, altera fabulas ut quo. Atqui causae gloriatur ius te, id agam
    omnis evertitur eum. Affert laboramus repudiandae nec et. Inciderint efficiantur his ad. Eum no
    molestiae voluptatibus.</p>
  <p>Some text to enable scrolling.. Lorem ipsum dolor sit amet, illum definitiones no quo,
    maluisset concludaturque et eum, altera fabulas ut quo. Atqui causae gloriatur ius te, id agam
    omnis evertitur eum. Affert laboramus repudiandae nec et. Inciderint efficiantur his ad. Eum no
    molestiae voluptatibus.</p>
  <p>Some text to enable scrolling.. Lorem ipsum dolor sit amet, illum definitiones no quo,
    maluisset concludaturque et eum, altera fabulas ut quo. Atqui causae gloriatur ius te, id agam
    omnis evertitur eum. Affert laboramus repudiandae nec et. Inciderint efficiantur his ad. Eum no
    molestiae voluptatibus.</p>
  <p>Some text to enable scrolling.. Lorem ipsum dolor sit amet, illum definitiones no quo,
    maluisset concludaturque et eum, altera fabulas ut quo. Atqui causae gloriatur ius te, id agam
    omnis evertitur eum. Affert laboramus repudiandae nec et. Inciderint efficiantur his ad. Eum no
    molestiae voluptatibus.</p>
  <p>Some text to enable scrolling.. Lorem ipsum dolor sit amet, illum definitiones no quo,
    maluisset concludaturque et eum, altera fabulas ut quo. Atqui causae gloriatur ius te, id agam
    omnis evertitur eum. Affert laboramus repudiandae nec et. Inciderint efficiantur his ad. Eum no
    molestiae voluptatibus.</p>
  <p>Some text to enable scrolling.. Lorem ipsum dolor sit amet, illum definitiones no quo,
    maluisset concludaturque et eum, altera fabulas ut quo. Atqui causae gloriatur ius te, id agam
    omnis evertitur eum. Affert laboramus repudiandae nec et. Inciderint efficiantur his ad. Eum no
    molestiae voluptatibus.</p>
  <p>Some text to enable scrolling.. Lorem ipsum dolor sit amet, illum definitiones no quo,
    maluisset concludaturque et eum, altera fabulas ut quo. Atqui causae gloriatur ius te, id agam
    omnis evertitur eum. Affert laboramus repudiandae nec et. Inciderint efficiantur his ad. Eum no
    molestiae voluptatibus.</p>
  <p>Some text to enable scrolling.. Lorem ipsum dolor sit amet, illum definitiones no quo,
    maluisset concludaturque et eum, altera fabulas ut quo. Atqui causae gloriatur ius te, id agam
    omnis evertitur eum. Affert laboramus repudiandae nec et. Inciderint efficiantur his ad. Eum no
    molestiae voluptatibus.</p>
  <p>Some text to enable scrolling.. Lorem ipsum dolor sit amet, illum definitiones no quo,
    maluisset concludaturque et eum, altera fabulas ut quo. Atqui causae gloriatur ius te, id agam
    omnis evertitur eum. Affert laboramus repudiandae nec et. Inciderint efficiantur his ad. Eum no
    molestiae voluptatibus.</p>
  <p>Some text to enable scrolling.. Lorem ipsum dolor sit amet, illum definitiones no quo,
    maluisset concludaturque et eum, altera fabulas ut quo. Atqui causae gloriatur ius te, id agam
    omnis evertitur eum. Affert laboramus repudiandae nec et. Inciderint efficiantur his ad. Eum no
    molestiae voluptatibus.</p>
  <p>Some text to enable scrolling.. Lorem ipsum dolor sit amet, illum definitiones no quo,
    maluisset concludaturque et eum, altera fabulas ut quo. Atqui causae gloriatur ius te, id agam
    omnis evertitur eum. Affert laboramus repudiandae nec et. Inciderint efficiantur his ad. Eum no
    molestiae voluptatibus.</p>
  <p>Some text to enable scrolling.. Lorem ipsum dolor sit amet, illum definitiones no quo,
    maluisset concludaturque et eum, altera fabulas ut quo. Atqui causae gloriatur ius te, id agam
    omnis evertitur eum. Affert laboramus repudiandae nec et. Inciderint efficiantur his ad. Eum no
    molestiae voluptatibus.</p>
  <p>Some text to enable scrolling.. Lorem ipsum dolor sit amet, illum definitiones no quo,
    maluisset concludaturque et eum, altera fabulas ut quo. Atqui causae gloriatur ius te, id agam
    omnis evertitur eum. Affert laboramus repudiandae nec et. Inciderint efficiantur his ad. Eum no
    molestiae voluptatibus.</p>
  <p>Some text to enable scrolling.. Lorem ipsum dolor sit amet, illum definitiones no quo,
    maluisset concludaturque et eum, altera fabulas ut quo. Atqui causae gloriatur ius te, id agam
    omnis evertitur eum. Affert laboramus repudiandae nec et. Inciderint efficiantur his ad. Eum no
    molestiae voluptatibus.</p>
  <p>Some text to enable scrolling.. Lorem ipsum dolor sit amet, illum definitiones no quo,
    maluisset concludaturque et eum, altera fabulas ut quo. Atqui causae gloriatur ius te, id agam
    omnis evertitur eum. Affert laboramus repudiandae nec et. Inciderint efficiantur his ad. Eum no
    molestiae voluptatibus.</p>
</div>

<script>
  $(function () {
    var $header = $("#myHeader");
    $header.hide();

    //wrap in div
    var $body = $header.wrapInner("<div></div>").children().addClass("sticky-body");

    var myFunction = function() {
      var sticky = $header[0].offsetTop;
      if (window.pageYOffset > sticky) {
        $header.addClass("sticky").show();
      } else {
        $header.removeClass("sticky").hide();
      }
    };

    $(window).on("scroll", myFunction);
  });
</script>

</body>
</html>


基本上,加载页面时,工具栏尚未显示。最终,用户向下滚动一点,工具栏将在屏幕顶部几乎可见。在用户向上滚动直到到达屏幕顶部之前,工具栏一直保持可见状态。等等。

现在我的主管要求我在React中重写它。而且完全没有jQuery。我已经完成了所有的UI部分。我仍然无法弄清楚的是如何基于滚动使粘滞栏可见/不可见。这该怎么做?

This is what I have so far

最佳答案

您可以将类名称header分配给state属性。使用header sticky将其切换为setState(),因为window.pageYOffset高于参数范围

打开此链接,我已完成上述更改。 Link

08-19 07:04