美文网首页前端开发
vue3 路由跳转相关

vue3 路由跳转相关

作者: Spinach | 来源:发表于2022-09-23 15:41 被阅读0次
需求:

点击按钮实现页面跳转&&触发浏览器的回到上一页/下一页,页面和按钮效果实时变化。

方法:

监听路由变化,vue3监听路由变化不再使用watch,而是onBeforeRouteUpdate。


image.png

html:

  <div class="tabber">
    <div
      v-for="(item,index) in routerData"
      :key="index"
      class="tabber-item"
      @click="changePage(item.route)"
    >
      <div class="icon" :class="routeName===item.route?'icon-active':''">
        <span class="iconfont" :class="item.icon" />
      </div>
      <text>{{ item.name }}</text>
    </div>
  </div>

script:

import { useRouter, onBeforeRouteUpdate } from 'vue-router';
const router = useRouter();
const routerData = ref([
  {
    name: '现状资源',
    route: 'resource',
    icon: 'icon-xianzhuangziyuan',
  },
  {
    name: '规划管控',
    route: 'control',
    icon: 'icon-guihuaguankong',
  },
  {
    name: '全览',
    route: 'home',
    icon: 'icon-zonglan',
  },
  {
    name: '村寨管理',
    route: 'administrator',
    icon: 'icon-cuizhai',
  },
  {
    name: '执法监督',
    route: 'supervise',
    icon: 'icon-zhifajiandu',
  },
]);
const routeName = ref(sessionStorage.getItem('routeName') || 'home');
const changePage = (route) => {
  sessionStorage.setItem('routeName', route);
  router.push(`/${sessionStorage.getItem('routeName')}`);
};

style:

.tabber{
  width: 54%;
  height: 80px;
  @include flexRowCenter;
  position: fixed;
  bottom: 0;
  left: 23%;
  font-size: 1rem;
  color: #FFFFFF;
  @extend .font4;
  font-style: italic;
  background-image: url("../../public/static/img/fix-bg.png");
  background-repeat: no-repeat;
  background-size:100% 100%;
  z-index:999;

  .tabber-item{
    margin-right: 54px;
    margin-top: -54px;
    position: relative;
    @include flexColCenter;
    .icon{
      width: 56px;
      height: 56px;
      cursor: pointer;
      @include flexRowCenter;
      border: 1px solid #FFFFFF;
      border-radius: 50%;
      box-shadow: 4px 6px 17px 0px rgba(198,233,253,0.61) inset, 3px 12px 50px 0px rgba(121,248,243,0.26) inset;
      transition: all .5s;

      .iconfont{
        color: #FFFFFF;
        font-size: 28px;
      }
    }
    .icon-active,
    .icon:hover
    {
      position: relative;
      top: -5px;
      background: rgba(0, 184, 175, 0);
      border: 4px solid #95E4FF;
      box-shadow: 4px 6px 10px 0px rgba(92, 254, 255, 0.83) inset, 4px 15px 50px 0px rgba(92, 188, 255, 0.71) inset;
    }
    &:first-child,
    &:last-child
    {
      top: 14px;
    }
    &:nth-child(2),
    &:nth-child(4)
    {
      top: 7px;
    }
    &:nth-child(3){
      .icon {

      }
    }
  }

}

相关文章

网友评论

    本文标题:vue3 路由跳转相关

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