• 项目实战——创建菜单与游戏页面(上)


    目录

    PS:整篇文章全是实现前端的工作,如果大家不了解vue3,建议补一下前置知识~~

    一、整体框架

    二、实现导航栏

     三、导航栏中实现页面跳转

    四、实现地图

    五、实现墙体

    六、生成障碍物 


    PS:整篇文章全是实现前端的工作,如果大家不了解vue3,建议补一下前置知识~~

    一、整体框架

    项前端框架

     

    二、实现导航栏

    实现导航栏的组件我们可以在 bootstrap 中获得

    Bootstrap v5 中文文档 · Bootstrap 是全球最受欢迎的 HTML、CSS 和 JS 前端工具库。 | Bootstrap 中文网 (bootcss.com)

     在componets 中创建组件 NavBar.vue

    在template标签中导入模板

    1. <nav class="navbar navbar-expand-lg navbar-light bg-light">
    2. <div class="container-fluid">
    3. <a class="navbar-brand" href="#">Navbar w/ texta>
    4. <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarText" aria-controls="navbarText" aria-expanded="false" aria-label="Toggle navigation">
    5. <span class="navbar-toggler-icon">span>
    6. button>
    7. <div class="collapse navbar-collapse" id="navbarText">
    8. <ul class="navbar-nav me-auto mb-2 mb-lg-0">
    9. <li class="nav-item">
    10. <a class="nav-link active" aria-current="page" href="#">Homea>
    11. li>
    12. <li class="nav-item">
    13. <a class="nav-link" href="#">Featuresa>
    14. li>
    15. <li class="nav-item">
    16. <a class="nav-link" href="#">Pricinga>
    17. li>
    18. ul>
    19. <span class="navbar-text">
    20. Navbar text with an inline element
    21. span>
    22. div>
    23. div>
    24. nav>

    App.vue中添加 NavBar 组件(App.vue 就是我们的首页页面)

    1. <template>
    2. <NavBar>NavBar>
    3. <router-view>router-view>
    4. template>
    5. <script>
    6. import NavBar from "@/components/NavBar.vue";
    7. import "bootstrap/dist/css/bootstrap.min.css";
    8. import "bootstrap/dist/js/bootstrap"
    9. export default {
    10. components:{
    11. NavBar
    12. }
    13. }
    14. script>
    15. <style>
    16. body {
    17. background-image: url("./assets/images/background.png");
    18. background-size: cover;
    19. }
    20. style>

     安装依赖

    成功之后的导航栏~ 

     

     三、导航栏中实现页面跳转

    由于我们每个页面可能设计很多组件,因此我们每个页面建一个文件夹比较好~

    需要用到 5 个界面

    pk + record + ranklist + userbots + 404

     这里我启动vue时发生了错误 : 

    解决方法:删掉node_modules,重新cnpm install一下就好了

     

    每个页面的模板如下,不同的页面修改div里面的字体就可。

    对战的修改对战、对局列表就修改为对局列表等。

    1. <template>
    2. <div>对战div>
    3. template>
    4. <script>
    5. script>
    6. <style scoped>
    7. style>

    如何把地址和页面产生关联呢?

    在router/index.js 中定义~~

    1. import PkIndexView from '../views/pk/PkIndexView'
    2. import RanklistIndexView from '../views/ranklist/RanklistIndexView'
    3. import RecordIndexView from '../views/record/RecordIndexView'
    4. import UserBotIndexView from '../views/user/bot/UserBotIndexView'
    5. import NotFound from '../views/error/NotFound'
    6. const routes = [
    7. {
    8. path: "/",
    9. name: "home",
    10. redirect: "/pk/"
    11. },
    12. {
    13. path: "/pk/",
    14. name: "pk_index",
    15. component: PkIndexView,
    16. },
    17. {
    18. path: "/record/",
    19. name: "record_index",
    20. component: RecordIndexView,
    21. },
    22. {
    23. path: "/ranklist/",
    24. name: "ranklist_index",
    25. component: RanklistIndexView,
    26. },
    27. {
    28. path: "/user/bot",
    29. name: "user_bot_index",
    30. component: UserBotIndexView,
    31. },
    32. {
    33. path: "/404/",
    34. name: "404",
    35. component: NotFound,
    36. },
    37. {
    38. path: "/:catchAll(.*)",
    39. redirect: "/404/",
    40. }
    41. ]

    这里有个小细节:如果输入了根路径的网址,我们把它重定向到PK页面~~ 如果是一个不存在的网址,我们跳转到404(从上到下匹配,最后的全是404) 

    还需要在 NavBar 中更改跳转的路径:

    在这里插入图片描述

     如何实现 点击不同页面,但不刷新呢?

    换成  <router-link>  ,按照以下格式

    class="nav-link" :to="{name: 'pk_index'}">对战

    在这里插入图片描述

     每个页面有一部分都是公共的,因此我们把这一部分抽取出来作为一个组件

    在Commponents中新建ContentField.vue 组件

    1. <script>
    2. script>
    3. <style scoped>
    4. div.content-field{
    5. margin-top: 20px;
    6. }
    7. style>

    在不同界面引入组件,比如 PK 界面:

    1. <script>
    2. import ContentField from '../../components/ContentField'
    3. export default {
    4. components: {
    5. ContentField
    6. }
    7. }
    8. script>
    9. <style scoped>
    10. style>

    如何实现我们在哪个界面,那个界面上边的标题高亮呢?

     

    我们需要添加三元运算符来判断 是否添加 active 属性: