Umijs带底部导航路由切换动画

简介: Umijs带底部导航路由切换动画

实现效果:

image.png

umi实现路由动画

文件目录结构:

.umirc.ts文件配置:

routes: [
    {
      path: '/login',
      component: '@/pages/login/login.tsx',
    },
    {
    path: '/',
    component: '@/pages/home/home.tsx',
    exact: false,
    wrappers: ['@/wrappers/auth'],
    routes: [
      {
        path: '/',
        component: '@/pages/home/home/home',
        wrappers: ['@/wrappers/auth'],
      },
      {
        path: '/type',
        component: '@/pages/home/type/type',
        wrappers: ['@/wrappers/auth'],
      },
      {
        path: '/shopping',
        component: '@/pages/home/shop/shop',
        wrappers: ['@/wrappers/auth'],
      },
    ],
  },
],

home.tsx文件配置:

import React from 'react';
import { NavBar, TabBar } from 'antd-mobile';
import './home.less';
import {
  useHistory,
  useLocation,
  MemoryRouter as Router,
  Switch
} from 'react-router-dom';
import {
  AppOutline,
  UnorderedListOutline,
  UserOutline,
  FileOutline,
} from 'antd-mobile-icons';
import { TransitionGroup, CSSTransition } from 'react-transition-group'
export default (props: any) => {
  const tabs = [
    {
      key: '/',
      title: '首页',
      icon: <AppOutline />,
    },
    {
      key: '/type',
      title: '分类',
      icon: <UnorderedListOutline />,
    },
    {
      key: '/shopping',
      title: '购物车',
      icon: <FileOutline />,
    },
    {
      key: '/person',
      title: '个人',
      icon: <UserOutline />,
    },
  ];
  const history = useHistory();
  const location = useLocation();
  const { pathname } = location;
  const setRouteActive = (value: string) => {
    history.push(value);
  };
  const routerType = {
    'POP': 'back',
    'PUSH': 'dg',
    'REPLACE': 'dg'
  }
  return (
    <div className="app">
      <div className="body">
        <TransitionGroup className='transition_wrapper' style={{ width: '100%', height: '100%' }} childFactory={(child) => (
          React.cloneElement(child, { classNames: routerType[history.action] })
        )}>
          <CSSTransition key={props.location.pathname} appear timeout={1000}>
            {props.children}
          </CSSTransition>
        </TransitionGroup>
      </div>
      <div className="bottom">
        <TabBar activeKey={pathname} onChange={(value: any) => setRouteActive(value)}>
          {tabs.map((item) => (
            <TabBar.Item key={item.key} icon={item.icon} title={item.title} />
          ))}
        </TabBar>
      </div>
    </div>
  );
};

home.less文件配置:

.app {
  height: 100vh;
  display: flex;
  flex-direction: column;
}
.top {
  flex: 0;
  border-bottom: solid 1px var(--adm-color-border);
}
body{
  margin: 0;
}
.body {
  flex: 1;
  display: flex;
  justify-content: center;
  align-items: center;
}
.bottom {
  flex: 0;
  border-top: solid 1px var(--adm-color-border);
  background-color: #fff !important;
  z-index: 200;
  position: fixed;
  width: 100vw;
  bottom: 0;
}
.dg-enter {
  transform: translate(100%, 0);
}
.dg-enter-active {
  transition: 3s;
  transform: translate(0);
}
.dg-enter-done {
  transform: translate(0);
}
.dg-exit-active {
  transition: 1s;
  transform: translate(-100%, 0);
}
.back-enter-active {
  transition: all 3s;
  transform: translate(0, 0) !important;
}
.back-enter-done {
  transform: translate(0, 0) !important;
}
.back-enter {
  z-index: 5 !important;
  transform: translate(-100%, 0);
}
.back-exit-active {
  opacity: 0;
  transition: all 3s;
  transform: translate(100%, 0) !important;
}


相关文章
|
7月前
|
JavaScript API 开发者
使用 u-navbar 组件实现页面导航和布局的完全指南
使用 u-navbar 组件实现页面导航和布局的完全指南
1473 0
uniapp遮罩层穿透问题,uview遮罩层组件,uview的actionSheet组件.鼠标穿透,uview组件u-popup遮罩滚动穿透问题
uniapp遮罩层穿透问题,uview遮罩层组件,uview的actionSheet组件.鼠标穿透,uview组件u-popup遮罩滚动穿透问题
544 0
|
5月前
flutter 导航组件 AppBar (含顶部选项卡TabBar,抽屉菜单 drawer ,自定义导航图标)
flutter 导航组件 AppBar (含顶部选项卡TabBar,抽屉菜单 drawer ,自定义导航图标)
90 1
|
小程序
小程序-uniApp:区域滚动、下拉刷新、上拉加载更多
小程序-uniApp:区域滚动、下拉刷新、上拉加载更多
964 0
|
XML 存储 缓存
底部导航栏的几种实现方式
底部导航栏的几种实现方式
337 0
自定义过渡动画
自定义过渡动画
123 0
自定义过渡动画
|
前端开发 JavaScript
【前端】侧边栏显示隐藏的实现和动画效果
【前端】侧边栏显示隐藏的实现和动画效果
596 0
【前端】侧边栏显示隐藏的实现和动画效果
|
前端开发 开发者 容器
吸顶导航 |学习笔记
快速学习 吸顶导航
137 0
|
JavaScript
在 jQuery 中使用滑入滑出动画效果,实现二级下拉导航菜单的显示与隐藏效果
在 jQuery 中使用滑入滑出动画效果,实现二级下拉导航菜单的显示与隐藏效果
592 0
在 jQuery 中使用滑入滑出动画效果,实现二级下拉导航菜单的显示与隐藏效果
|
索引
【Flutter】底部导航栏页面框架 ( BottomNavigationBar 底部导航栏 | PageView 滑动页面 | 底部导航与滑动页面关联操作 )(一)
【Flutter】底部导航栏页面框架 ( BottomNavigationBar 底部导航栏 | PageView 滑动页面 | 底部导航与滑动页面关联操作 )(一)
358 0