[toc]
# 创建 Drawer 组件并实现动画
![](https://img.kancloud.cn/e5/cd/e5cd006d221a722fd79b3d664ff35bb0_1806x1740.png)
对应样式:
![](https://img.kancloud.cn/a6/af/a6afc8d60dbea1805d36512bfa5c8532_642x1248.png)
现在这个功能存在的问题:
1. 不能左右滑动:官方提供的 `PanResponder` 组件可以实现手势滑动功能。
2. APP 总体向左平移
3. 无法把底部导航给盖(因为是子页面,所以要解决这个问题,需要在最外层实现这个功能)
# 导航栏上收缩的二级导航
## 静态布局
![](https://img.kancloud.cn/1c/e8/1ce85d73847eca3b5e717905f698b6fd_1726x1638.png)
## 制作折叠动画
### 制作三角形
直接使用 CSS 来制作一个三角形。
![](https://img.kancloud.cn/d3/4a/d34aaf1e6d77f1ab26dd2e1d14f713fe_2002x1468.png)
### 添加旋转动画
![](https://img.kancloud.cn/9a/85/9a85b079e5b7ade14501cae33cea9822_2214x1720.png)
点击之后可以旋转,但是存在两个问题:
1. 只能点击一次,只能旋转一次
2. 旋转的轴心不是中心点
问题一、解决:
![](https://img.kancloud.cn/01/57/0157b486756a314e7ccff30c3cd60836_2138x1246.png)
问题二、解决
因为旋转时是旋转的父元素,父元素以中心点旋转,所以只要让三角形在父元素的正中心即可。
![](https://img.kancloud.cn/1a/82/1a825b92b714ac95164304505efe90f1_1162x558.png)
### 订单按钮和三角色形按钮定位
![](https://img.kancloud.cn/c8/8e/c88e4fd85c1344a32da29752a07ca94e_1664x1674.png)
### 制作二级按钮
![](https://img.kancloud.cn/e8/9b/e89b30d5f7c6ce297c277561210f3ec5_2128x1300.png)
添加样式:
![](https://img.kancloud.cn/6d/56/6d56260f1530a49d27eec686d9239f44_398x260.png)
### 实现折叠动画
![](https://img.kancloud.cn/8d/b3/8db3151f7d43288596dbaee09025ac23_2088x1586.png)
# 扩展:跳转对象
如果在一级页面中要实现跳转,可以直接使用 `navigation` 对象。
如果不是一级页面,比如在一级页面中引入了 a组件,a组件又引入了 b 组件,然后在 b 组件中要实现跳转,这时可以:
方法一.、在一级页面中把 navigation 传给 a 组件,a组件再传给 b 组件,然后 b 组件中就可以跳转了。(层级深时比较麻烦)
方法二、有一个 `useNavigation` 的 Hook 函数,可以直接获取到导航对象
~~~
// 1. 引入
import { useNavigation } from '@react-navigation/native';
//...
// 2. 生成对象
const navigation = useNavigation();
// 3. 使用
navigation.navigate('页面')
~~~
示例:在 Menu 组件中实现跳转
![](https://img.kancloud.cn/ef/bc/efbc30304d849306fe6a1b2adccc6108_1466x1624.png)