美文网首页
React Native实现底部弹出菜单

React Native实现底部弹出菜单

作者: 阿拉斌 | 来源:发表于2020-05-25 16:34 被阅读0次

    我们先看看效果:

    这个功能,和前面写的下拉菜单,实际上是一样的,只是一个从上面出来,一个从下面出来,那么,我们直接就知道了,组件由两部分组成:1. 遮罩层,2. 弹出菜单

            <Couverture
              onPress={() => this.popupHide()}
              isShow={isActive}
              opacity={fadeAnim}
              zIndex={5}
            />
    

    弹出菜单组件:

            <Animated.View
              style={{
                position: 'absolute',
                left: 0,
                right: 0,
                width,
                zIndex: 20,
                transform: [
                  { translateY },
                ]
              }}
            >
              <View style={{
                position: 'absolute',
                left: 0,
                top: 0,
                width,
                height,
                zIndex: 30,
              }}
              >
                <Animated.View
                  style={{
                    position: 'absolute',
                    left: 0,
                    bottom: 0,
                    backgroundColor: '#FFF',
                    width,
                    height: this.state.popupHeight + 50,
                    transform: [
                      { translateY },
                    ]
                  }}
                >
                  {this.header()}
                  {content}
                </Animated.View>
              </View>
            </Animated.View>
    

    在这两个写好之后,我们就可以写打开和关闭的两个方法了。

    打开弹窗:

      // 打开弹窗
      openPanel = () => {
        const { animatedValue } = this.state;
        // 设置动画为0
        animatedValue.setValue(0);
        // 执行动画
        Animated.spring(
          animatedValue, {
            toValue: 1, // 透明度最终变为1,即完全不透明
            // @ts-ignore
            duration: 300, // 让动画持续一段时间
            useNativeDriver: true // <-- 加上这一行
          }
        ).start();
      };
    

    关闭弹窗:

    注意:这里在执行完成后。需要把遮罩层也关闭了哦

      popupHide = () => {
        const { animatedValue } = this.state;
        // 设置动画为0
        animatedValue.setValue(1);
        // 执行动画
        Animated.spring(
          animatedValue, {
            toValue: 0, // 透明度最终变为1,即完全不透明
            // @ts-ignore
            duration: 300, // 让动画持续一段时间
            useNativeDriver: true // <-- 加上这一行
          }
        ).start(() => this.setState({ isAction: false }));
      };
    

    相关文章

      网友评论

          本文标题:React Native实现底部弹出菜单

          本文链接:https://www.haomeiwen.com/subject/ybveqctx.html