javascript - React 中的粘滞条实现?

标签 javascript reactjs

我有一个使用 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 .

最佳答案

您可以分配类名 headerstate属性。将其切换为 header sticky使用 setState()作为window.pageYOffset高于标准范围

打开此链接 我已经进行了上述更改。 Link

关于javascript - React 中的粘滞条实现?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51396209/

相关文章:

javascript - 如何动态地将值从下拉列表传输到数据表?

javascript - react : update one value of my state in reducer

javascript - 从 React.js 中的 json 文件中获取数据

javascript - 如何覆盖(overwrite)material-ui(React)中的类和样式

reactjs - Nextjs 中的路由器

javascript - 为什么可以改变我的状态的浅拷贝?

javascript - 在 react 中加载脚本

javascript - 当还启用缩放时,如何使用 Highcharts 触发模态视图?

javascript - Barchart/Columnchart - 同一系列中相同颜色的条形图

reactjs - react native : `styled-components/native` cannot be resolved by bundler under yarn workspace