【问题标题】:Changing height of a div on scrolling在滚动时更改 div 的高度
【发布时间】:2017-03-14 14:13:18
【问题描述】:

我正在使用 reactjs 做一个 Web 应用程序。我需要在向下滚动时更改 div 的高度,并在向上滚动时恢复到原始高度。我不确定是否有我需要的纯 CSS 解决方案。实现我上面描述的方法是什么。

class InternalGroupsPage extends Component {
     constructor() {
     super();
}

render() {

return (
         <div className="body_clr">

            <div className="group_page_header">
                    This is the div i want to change the height when scrolling
            </div>

            <div>
                    Other stuff
            </div>
         </div>

        );
    }
}

CSS

.group_page_header {

    width: 100%;
    height: 220px;
    background-color: #0b97c4;
    position: fixed;
    margin-top: 50px;
    z-index: 1;

}

.body_clr {

    overflow-y: scroll;
    width: 100%;
    height: 100%;
    position: fixed;
    background-color: #eceff1;

}

【问题讨论】:

  • 你的 react 组件代码在哪里?
  • 我只给出了html和css,因为我认为不需要其他代码。无论如何我现在已经更新了
  • 如果你能给我一个小提琴上面的代码工作,我可以为你做。基本上,当scrollTop 通过某个点以进行重新渲染时,您需要切换状态变量 + className。有意义吗?

标签: javascript html css reactjs


【解决方案1】:

所以,基本上就像我在评论中提到的那样。

基本上,当 scrollTop 通过某个点以进行重新渲染时,您需要切换状态变量 + className。

这是手柄滚动功能:

handleScroll(event) {
      var scrollTop = event.srcElement.body.scrollTop;
      var isScrollUp = this.getScrollDirection();

      if(isScrollUp) {
        this.setState({
          hideHeader: true,
        });
      } else {
        this.setState({
          hideHeader: false,
        });
      }
  };

检测滚动方向:

getScrollDirection() {
    var currentScrollTop = document.body.scrollTop;
    var isScrollUp = currentScrollTop < this.previousScrollTop;
    this.previousScrollTop = currentScrollTop;
    return isScrollUp;
  }

以及切换类的渲染函数

 render() {
    var headerClassName = this.state.hideHeader ? `group_page_header hideHeader` : `group_page_header showHeader`;
    console.log('classNAme ->', headerClassName)
    return (
      <div className="body_clr">
        <div className={headerClassName}>
        This is the div i want to change the height when scrolling
        </div>
        <div className="other-stuff">
          Other stuff
        </div>
      </div>
    );
  }

这是fiddle

您可以更新小的 CSS 更改并尝试一下。基本上这应该是你达到这个要求应该遵循的方向。

【讨论】:

  • 我确实像你在这里所做的那样。但是状态不会在滚动时改变。滚动时,console.log 仅打印 group_page_header showHeader。
  • @CraZyDroiD 我需要你的代码来解释更多。基本上是假设我提供的答案是您想要的答案?
  • @CraZyDroiD 说得对,您可以根据需要更新 css。检查更新的小提琴链接 - jsfiddle.net/nevinm/9c9vtxxu/6
  • 我使用了您的代码,并且在某种程度上它有效。但是 .hideHeader 有什么用?即使我删除该类它也有效。当我使用你的代码时,我没有减少标题高度,而是在滚动时消失了。
猜你喜欢
  • 2013-05-03
  • 2014-07-20
  • 1970-01-01
  • 2012-09-07
  • 1970-01-01
  • 2018-11-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多