【问题标题】:react native show/hide navbar according to scroll direction根据滚动方向反应原生显示/隐藏导航栏
【发布时间】:2018-01-14 06:26:36
【问题描述】:

我是 react native 和 js 的新手。

我想在用户开始在任何时间/位置向上滚动时显示我的导航栏,并在用户开始在任何位置向下滚动时隐藏我的导航栏。

我的第一个方法是同时使用“动画”和“找出滚动方向”,但我失败了。谁能告诉我详细的怎么可能?

谢谢!

【问题讨论】:

  • 请帮忙:(

标签: javascript react-native scrollview react-native-ios react-native-listview


【解决方案1】:

基于类似的要求,当用户向上滚动(隐藏)和向下滚动(显示)时,我必须隐藏位于屏幕底部的操作栏。受到其他答案的启发。这就是我所做的 -

const [oldOffset, setOldOffset] = useState(0);

<ScrollView
  styleContainer={styles.container}
  onScrollBeginDrag={event => {
    const currentOffset = event.nativeEvent.contentOffset.y;
    setOldOffset(currentOffset);
    if (!(currentOffset < 0) && currentOffset !== 0) {
      if (currentOffset < oldOffset) {
        console.log('up');
      } else {
        console.log('down');
      }
    }
  }}
>
</ScrollView>

因为我不太担心显示/隐藏延迟,所以我确保不会出现错误状态。

【讨论】:

    【解决方案2】:

    在您的滚动视图中,将 onScroll 函数添加到您的滚动视图中。

    当函数被调用时,检查滚动的方向:

    var currentOffset = event.nativeEvent.contentOffset.y;
    var direction = currentOffset > this.offset ? 'down' : 'up';
    if(direction == 'down') {
        // hide the nav
    } else {
        // show the nav
    }
    

    希望对你有帮助!

    【讨论】:

    • 我收到错误“找不到变量事件”。你能给出更详细的代码吗?你能准确地为我写 _onScroll() 函数吗? ://
    • @EmreŞahiner 你可以看看这个:stackoverflow.com/questions/29503252/… 在手柄滚动中,简单地复制/粘贴我在下面发布的代码!其实我不能给你写完整的功能。也许明天!
    • 感谢您的回答!我实施了您的建议并且它有效,但是当我滚动两个方向时,总是打印“向上”(在其他内部)。 **注意 (this.offset 返回 "undefined" )
    • 您需要在 onScroll 函数结束时将 this.offset 设置为 currentOffset 值
    • 我也有同样的问题,在android中,navbar show or hide会影响onscroll func中的contentoffset,并且在onscroll func中无法获取实时帧。所以这不是一个好的解决方案。跨度>
    猜你喜欢
    • 1970-01-01
    • 2021-02-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-03
    • 2019-06-22
    • 1970-01-01
    相关资源
    最近更新 更多