当前位置: 首页 > article >正文

vue3项目中的404页面

vue3项目中的404页面

春节前的最后一篇技术博客了

写了不少vue项目,发现一直没有正确处理404页面。404页面的出现有这么几种可能:

  • 错误输入了页面地址
  • 路由连接跳转时,某些路由已经不存在了,而程序员并没有正确处理

也就是说404页面是为了防止用户访问不存在的路由地址而设计的,当用户访问一个不存在的地址时,这个地址将会重定向至404页面

看一下最后的效果:

在这里插入图片描述

一、路由设计

在vue项目中,需要设计404页面的路由

在路由文件router/index.js中编写代码:

import { createRouter, createWebHistory } from "vue-router";
import Main from "@/views/Main.vue";

const router = createRouter({
  history: createWebHistory(import.meta.env.BASE_URL),
  routes: [
    {
      // 其他路由
    },
      // 路由页面
    {
      path: '/404',
      name: '404page',
      component: () => import('@/views/404/index.vue'),
    },
      // 未知路由重定向
    {
      path: '/:pathMatch(.*)',
      redirect: '/404',
      hidden: true
    }
  ],
});

export default router;

二、404组件

直接上代码了

<template>
    <div class="body">
        <div class="mars"></div>
        <img src="./images/404.svg" class="logo-404">
        <img src="./images/meteor.svg" class="meteor">
        <p class="title">Oh no!!</p>
        <p class="subtitle">
            页面未找到<br>要么请求一个不再在这里的页面。
        </p>
        <div align="center">
            <a class="btn-back" href="/">返回首页</a>
        </div>
        <img src="./images/astronaut.svg" class="astronaut">
        <img src="./images/spaceship.svg" class="spaceship">
    </div>
</template>

<script setup>
</script>

<style lang="scss" scoped>
@keyframes floating {
    from {
        transform: translateY(0px);
    }

    65% {
        transform: translateY(15px);
    }

    to {
        transform: translateY(0px);
    }
}

.body {
    background-image: url("./images/star.svg"), linear-gradient(to bottom, #05007A, #4D007D);
    height: 100vh;
    margin: 0;
    background-attachment: fixed;
    overflow: hidden;
}

.mars {
    left: 0;
    right: 0;
    bottom: 0;
    position: absolute;
    height: 27vmin;
    background: url("./images/mars.svg") no-repeat bottom center;
    background-size: cover;
}

.logo-404 {
    position: absolute;
    margin-left: auto;
    margin-right: auto;
    left: 0;
    right: 0;
    top: 16vmin;
    width: 30vmin;
}

@media (max-width: 480px) and (min-width: 320px) {
    .logo-404 {
        top: 45vmin;
    }
}

.meteor {
    position: absolute;
    right: 2vmin;
    top: 16vmin;
}

.title {
    color: white;
    font-family: "Nunito", sans-serif;
    font-weight: 600;
    text-align: center;
    font-size: 5vmin;
    margin-top: 31vmin;
}

@media (max-width: 480px) and (min-width: 320px) {
    .title {
        margin-top: 65vmin;
    }
}

.subtitle {
    color: white;
    font-family: "Nunito", sans-serif;
    font-weight: 400;
    text-align: center;
    font-size: 3.5vmin;
    margin-top: 10vmin;
    margin-bottom: 9vmin;
}

.btn-back {
    border: 1px solid white;
    color: white;
    height: 5vmin;
    padding: 12px;
    font-family: "Nunito", sans-serif;
    text-decoration: none;
    border-radius: 5px;
}

.btn-back:hover {
    background: white;
    color: #4D007D;
}

@media (max-width: 480px) and (min-width: 320px) {
    .btn-back {
        font-size: 3.5vmin;
    }
}

.astronaut {
    position: absolute;
    top: 18vmin;
    left: 10vmin;
    height: 30vmin;
    animation: floating 3s infinite ease-in-out;
}

@media (max-width: 480px) and (min-width: 320px) {
    .astronaut {
        top: 2vmin;
    }
}

.spaceship {
    position: absolute;
    bottom: 15vmin;
    right: 24vmin;
}

@media (max-width: 480px) and (min-width: 320px) {
    .spaceship {
        width: 45vmin;
        bottom: 18vmin;
    }
}</style>

页面的动画效果主要由样式中的keyframes提供,而图像全都由相应的svg文件提供,svg文件我已经免费上传了

svg文件


http://www.kler.cn/a/229657.html

相关文章:

  • 【Qt】事件、qt文件
  • unity 播放 序列帧图片 动画
  • 第4节、电机多段转动【51单片机+L298N步进电机系列教程】
  • 软考21-上午题-数组、矩阵
  • Flutter中的Container小部件介绍与使用
  • 【Linux】线程池
  • 电力负荷预测 | 基于AE-LSTM的电力负荷预测(Python)
  • 一文学会gtest UT测试编写(TEST\TEST_F)
  • 【手写数据库toadb】虚拟文件描述符,连接表对象与物理文件的纽带,通过逻辑表找到物理文件的密码
  • 【数据结构笔记】线性表(代码)
  • 《动手学深度学习(PyTorch版)》笔记7.4
  • 每日一题(づ ̄3 ̄)づ╭❤~(数字在升序数组中出现的次数,整数转换)
  • arm 汇编积累
  • 节点确认交易全过程
  • docker下拉(pull)镜像和生成容器,文章尾部有常用的linux命令
  • PHP实现DESede/ECB/PKCS5Padding加密算法兼容Java SHA1PRNG
  • Jgit Packfile is truncated解决方案
  • c++中的char[] ,char* ,string三种字符串变量转化的兼容原则
  • Unity_ShaderGraph节点问题
  • e^{ix} 的 conjugate value(复共轭)
  • 易点易动设备管理系统——精确管理BOM,提升生产效率
  • 【AI绘画+Midjourney平替】Fooocus:图像生成、修改软件(Controlnet原作者重新设计的UI+Windows一键部署)