【Vue】Vue 项目前端响应式布局及框架搭建

news2024/11/18 1:42:06

文章目录

  • Vue 项目前端响应式布局及框架搭建
    • 一、项目基本结构
    • 二、项目分辨率响应式创建
      • 1、flexible.js
      • 2、引用 flexible 插件
      • 3、修改 flexible 默认配置
      • 4、cssrem 插件 (px -> rem)
    • 三、项目页面框架搭建
      • 1、设置背景图
      • 2、设置标题文字
      • 3、页面主体部分
        • (1)section 主体部分
        • (2)左、中、右布局
        • (3)左、右图表容器整体插槽
        • (4)左、右各图表容器插槽
        • (5)中间图表容器布局
    • 四、图表环境搭建
      • 1、Echarts 全局引用
      • 2、Axios 全局引用


Vue 项目前端响应式布局及框架搭建

环境

  • Vue 3.0+Vue-router+axios、flex布局、LESS、rem屏幕适配、echarts 5.0、nodejs+express

一、项目基本结构

在这里插入图片描述

返回顶部


二、项目分辨率响应式创建

项目是需要根据页面的大小改变 做出响应式改变的 所以我们可以使用第三方插件flexible.js帮助我们修改html根节点的font-size大小,从而控制当前页面的rem(会根据页面的html根节点font-size大小改变而改变)样式改变

1、flexible.js

  • flexible.js: web自适应方案 ,阿里团队开源的一个库。使用flexible.js轻松搞定各种不同的移动端设备兼容自适应问题。

下载 flexible:

G:\Projects\VsCodeProject\vue\app>npm install --save lib-flexible

返回顶部


2、引用 flexible 插件

下载完成后找到 src 下的 main.js 进行配置,import导入:

image-20220326200817131

返回顶部


3、修改 flexible 默认配置

默认情况下只会在 540px分辨率 下生效 所以我们需要根据我们的项目分辨率进行调整,在node_module/lib-flexible/flexible.js中修改代码如下:

function refreshRem(){
    var width = docEl.getBoundingClientRect().width;
    // if (width / dpr > 540) {
    //     width = 540 * dpr;
    // }
    // var rem = width / 10;

    // 修改 最大值:2560   最小值:400
    if (width /dpr < 400){
        width = 400 * dpr;
    } else if(width /dpr > 2560){
        width = 2560 * dpr;
    }
    // 设置成24分 1920px设计稿 1rem=80px
    var rem = width / 24;

    docEl.style.fontSize = rem + 'px';
    flexible.rem = win.rem = rem;
}

修改好了之后重启项目: ·G:\Projects\VsCodeProject\vue\app>npm run serve ,这个时候重启项目大家打开浏览器调试器 即可发现在浏览器大小改变的时候 在html根节点上会自动设置一个font-size,当我们拖动窗口大小的时候,其值会自动改变。

在这里插入图片描述

返回顶部


4、cssrem 插件 (px -> rem)

我们在写代码的时候发现如果我们都根据80px1rem在编写代码的时候转换非常的麻烦 所以我们可以在vscode中安装一个cssrem的插件帮助我们进行转换 ,这样一来开发过程中会更加的方便:

在这里插入图片描述

我们打开 homePage.vue 页面,添加一个测试的 div 样式, font-size 设置为 50px,可以发现提示中自动帮我们转换成了 3.125rem

cssrem自动匹配比例

如果不能够换成对应的比例,可能cssrem还使用的默认 16px -> 1rem,找到安装的插件,打开设置,设置 Root Font Size 修改为 80 即可:

cssrem修改比例

返回顶部


三、项目页面框架搭建

1、设置背景图

将图片放入assets文件夹中 在app.vue中设置背景图:

<template>

  <router-view/>
</template>

<style lang="less">
 *{
    margin: 0px;
    padding: 0px;
    box-sizing: border-box;//border-box 告诉浏览器去理解你设置的边框和内边距的值是包含在width内的。
 }
 body {
   background: url("~@/assets/bg.jpg") top center no-repeat;
 }
</style>

image-20220327174847614

返回顶部


2、设置标题文字

homePage.vue 中设置页面的顶部标题栏并进行相应的css样式

<template>
  <div>
      <!-- 顶部标题栏 -->
      <header>
          <h1>大数据可视化--vue3.0与echarts</h1>
      </header>
  </div>
</template>

<script>
export default {}
</script>

<style lang="less">
    header{
        height: 1rem;
        width: 100%;
        /* 设置一个半透明淡蓝色背景 */
        background-color: rgba(0, 0, 255, .2);
        /* 把标题文字样式设置 */
        h1{
            font-size: .375rem;
            color:#fff;
            text-align: center;
            line-height: 1rem;
        }
    }
</style>

在这里插入图片描述

返回顶部


3、页面主体部分

(1)section 主体部分

<template>
  <div>
    <!-- 顶部标题栏 -->
    <header>
      <h1>大数据可视化 - Vue3.0&echarts</h1>
    </header>
    <!-- 中间容器 -->
    <section class="container">
        
    </section>
  </div>
</template>

<style lang='less'>
/* 中间容器 */
.container{
    // 最大最小的宽度
    min-width: 1200px;
    max-width: 2048px;
    margin: 0 auto;
    // 盒子上10px 左右10px 下0的外边距
    padding: .125rem .125rem 0;
    // 测试
    height: 10rem;
    background-color: grey;
} 
</style>

出去头部标题栏部分,我们需要设置主体的图表展示部分,创建一个类名为containersection容器,并为其设置css样式(测试):

在这里插入图片描述

返回顶部


(2)左、中、右布局

创建左中右这三个部分,分别进行图型的展示。这个时候我们可以使用flex布局来分割他们所占的区块大小,那么他们的占比分别是 3 5 3 。首先创建三个section容器,分别表示部分,然后对其应用 flex布局,并设置占比。

<template>
  <div>
      <header>
          <h1>大数据可视化--vue3.0与echarts</h1>
      </header>
      <!-- 大容器 -->
      <section class='container'>
          <!-- 左容器 -->
          <section class='itemLeft'>1</section>
          <!-- 中容器 -->
          <section class='itemCenter'>2</section>
          <!-- 右容器 -->
          <section class='itemRight'>3</section>
      </section>
  </div>
</template>

<style lang='less'>
/* 中间容器 */
.container {
  // 最大最小的宽度
  min-width: 1200px;
  max-width: 2048px;
  margin: 0 auto;
  // 盒子上10px 左右10px 下0的外边距
  padding: 0.125rem 0.125rem 0;

  display: flex; //父容器设置flex布局才能在子元素使用
  // 设置左中右的占比 但是不要忘了在父容器要设置flex
  .itemLeft,
  .itemRight {
    flex: 3;
    background-color: pink;    // 测试后注释掉
  }
  .itemCenter {
    flex: 5;
    background-color: orange;  // 测试后注释掉
  }
}
</style>

效果如图所示:

image-20220327195759166

返回顶部


(3)左、右图表容器整体插槽

大家会发现我们要展示的左、右4个区域的容器效果是一样的。所以我们可以剥离成一个组件 然后重复调用即可。并且在其中放置slot 槽口,后期方便向容器内插入图表。

components文件夹下创建 itemPage.vue 创建容器组件:

<template>
  <div class="item">
      <!-- 设置插槽 -->
      <slot></slot>
  </div>
</template>

<script>
export default {};
</script>

<style>
.item {
  /* 高度410px */
  height: 5.125rem;
  border: 1px solid blue;
  /* 外边距20px */
  margin: 0.25rem;
  background-color: rgba(13, 130, 255, 0.851);
}
</style>

在views下的homePage中引用调用使用:

<template>
  <div>
    <!-- 顶部标题栏 -->
    <header>
      <h1>大数据可视化 - Vue3.0&echarts</h1>
    </header>
    <!-- 中间容器 -->
    <section class="container">
      <!-- 左容器 -->
      <section class="itemLeft">
        <!-- 调用插槽组件 -->
        <ItemPage />
        <ItemPage />
      </section>
      <!-- 中容器 -->
      <section class="itemCenter">2</section>
      <!-- 右容器 -->
      <section class="itemRight">
        <ItemPage />
        <ItemPage />
      </section>
    </section>
  </div>
</template>

<script>
// 导入插槽组件
import ItemPage from "@/components/itemPage.vue";
export default {
  components: {
    ItemPage,
  },
};
</script>

image-20220327194411944

返回顶部


(4)左、右各图表容器插槽

左、右一共4个图标 使用一个公共的组件容器 所以我们编写这4个不同图表的组件并且分别显示。然后在4个文件中分别设置相关内容与样式(每个图表的标题不一样要修改):

<template>
  <div>
      <h2>图表一</h2>
      <div class="chart">
          <!-- 图标容器 -->
      </div>
  </div>
</template>

<script>
export default {

}
</script>

<style>
</style>

homePage.vue中引用调用使用这4个组件:

<template>
  <div>
    <!-- 顶部标题栏 -->
    <header>
      <h1>大数据可视化 - Vue3.0和echarts</h1>
    </header>
    <!-- 中间容器 -->
    <section class="container">
      <!-- 左容器 -->
      <section class="itemLeft">
        <ItemPage>
          <itemOne />
        </ItemPage>
        <ItemPage>
           <itemTwo />
        </ItemPage>
      </section>
      <!-- 中容器 -->
      <section class="itemCenter">
         <h2>地图展示</h2>  
      </section>
      <!-- 右容器 -->
      <section class="itemRight">
        <ItemPage>
           <itemThree />
        </ItemPage>
        <ItemPage>
           <itemFour />
        </ItemPage>
      </section>
    </section>
  </div>
</template>

<script>
// 导入插槽组件
import ItemPage from "@/components/itemPage.vue";
// 左右4个小组件的引用
import itemOne from "@/components/itemOne.vue";
import itemTwo from "@/components/itemTwo.vue";
import itemThree from "@/components/itemThree.vue";
import itemFour from "@/components/itemFour.vue";

export default {
  components: {
    ItemPage,itemOne,itemTwo,itemThree,itemFour
  },
};
</script>

在这里插入图片描述

返回顶部


(5)中间图表容器布局

views文件夹下的 homePage.vue 中设置中间区域容器样式,设置容器高度、内外边距、边框:

<!-- 中间容器 -->
<section class="itemCenter"><h2>地图展示</h2></section>

</style>
/* 中间容器 */
.container {
    .itemCenter {
    	flex: 5;
        // 高度840px
        height: 10.5rem;
        border: 1px solid blue;
        // 内边距10px
        padding: 0.125rem;
        // 外边距20px
        margin: 0.25rem;
    }
}
</style>

在这里插入图片描述

返回顶部


四、图表环境搭建

1、Echarts 全局引用

下载 npm install --save echarts

在这里插入图片描述

vue2.0中使用如下写法把echarts挂载在vue实例上,但是这招在3.0行不通了:

// 引用echarts
import * as echarts from "echarts"
Vue.prototype.$echarts=echarts;

vue3.0中,在App.vue 中导入全局的echarts组件:

<template>
  <router-view />
</template>
<script>
import { provide } from "vue";
// 引用echarts
import * as echarts from "echarts";
export default {
  setup() {
    //第一个参数是名字  第二个参数是你传递的内容
    provide("echarts", echarts);   // 不是provider,否则会出现下面报错
  },
};
</script>

homePage.vue中进行引用和调用:

<script>
// 导入插槽组件
import ItemPage from "@/components/itemPage.vue";
// 左右4个小组件的引用
import itemOne from "@/components/itemOne.vue";
import itemTwo from "@/components/itemTwo.vue";
import itemThree from "@/components/itemThree.vue";
import itemFour from "@/components/itemFour.vue";
import { inject } from '@vue/runtime-core';

export default {
  components: {
    ItemPage,itemOne,itemTwo,itemThree,itemFour,
  },
  // 导入echarts组件 
  setup(){
    let $echarts = inject("echarts");
    // 控制台打印信息
    console.log($echarts);
  }
};
</script>

重新运行项目查看控制台的输出,发现报错,原因是函数名称写错了(见上面App.vue的注释):

image-20220328101733632

修改后重新运行,可以看到控制台打印了所有的echarts属性信息:

在这里插入图片描述

返回顶部


2、Axios 全局引用

下载 npm install --save axios

在这里插入图片描述

vue3.0中,在App.vue 中导入全局的echarts组件:

<template>
  <router-view />
</template>
<script>
import { provide } from "vue";
// 引用echarts
import * as echarts from "echarts";
// 引用axios
import axios from 'axios';
export default {
  setup() {
    //第一个参数是名字  第二个参数是你传递的内容
    provide("echarts", echarts);  
    provide("axios", axios);
  },
};
</script>

homePage.vue中进行引用和调用:

<script>
// 导入插槽组件
import ItemPage from "@/components/itemPage.vue";
// 左右4个小组件的引用
import itemOne from "@/components/itemOne.vue";
import itemTwo from "@/components/itemTwo.vue";
import itemThree from "@/components/itemThree.vue";
import itemFour from "@/components/itemFour.vue";
import { inject } from '@vue/runtime-core';

export default {
  components: {
    ItemPage,itemOne,itemTwo,itemThree,itemFour,
  },
  // 导入echarts组件 
  setup(){
    let $echarts = inject("echarts");
    let $axios = inject("axios");
    console.log($echarts);
    // 控制台打印信息
    console.log($axios);
  }
};
</script>

image-20220328102930258

返回顶部


在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/409658.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Request请求转发getRequestDispatcher

文章目录一、getRequestDispatcher理解二、RequestDispatcher.forward()方法与HttpServletResponse.sendRedirect()方法的区别三、实现步骤1.编写index.jsp登录页面2.编写跳转页面success.jsp页面3.编写LoginServlet.java类四、运行示例一、getRequestDispatcher理解 request.g…

Vue项目使用百度地图api

目录 1.百度开发者认证 2.创建应用 3.引用百度地图API文件 4.展示地图 1.百度开发者认证 进入百度地图开放平台 官网&#xff0c;&#xff08;认证需要身份证号码&#xff0c;人脸识别&#xff0c;手机百度APP&#xff0c;邮箱地址&#xff09; 注册登录完成&#xff0c;…

vue中devTools插件安装教程

vue-devTools 为了更方便的在开发过程中对 Vue 程序进行调试&#xff0c;除了传统的浏览器自带的 debug 工具以外&#xff0c;我们还可以通过一些专门为 Vue 提供的扩展插件来进行调试 vue-devTools插件&#xff1a;点击下载 插件安装教程&#xff1a;https://chrome.zzzmh.cn…

js深拷贝方法

一、ES6中扩展运算符 ES6中的扩展运算符&#xff08;如果只是一层数组或者对象就是深拷贝&#xff0c;多层就是浅拷贝&#xff09; var obj {name : "海绵宝宝",age: 18,sayHello (){console.log("比奇堡早上好");}}var newObj {...obj}console.log(&q…

Vue中的跨域解决方案

前言 跨域是因为浏览器存在对不同源页面数据接收的限制。这种限制就是浏览器的同源策略。 同源策略是浏览器的安全机制&#xff0c;跨域的原理就是通过各种方式避开浏览器的安全机制 使用 在项目开发时&#xff0c;对跨域的概念仅限于了解&#xff0c;所以没有注重过程&#xf…

Vue全新一代状态管理库 Pinia【一篇通】

文章目录前言1. Pinia 是什么&#xff1f;1.1 为什么取名叫 Pinia?1.2. 为什么要使用 Pinia ?2. 安装 Pinia2.1.创建 Store2.1.1. Option 类型 Store2.1.2 Setup 函数类型 Store2.1.3 模板中使用3. State 的使用事项&#xff08;Option Store &#xff09;3.1 读取 State3.2 …

命令行 cnpm install 报错: Install fail Error: Unsupported URL Type: npm:vue-loader@^15.9.7

是不是在 进行 cnpm install 报了同款错误呢&#xff01; G:\Git\owl-read-admin>cnpm install Install fail! Error: Unsupported URL Type: npm:vue-loader^15.9.7 Error: Unsupported URL Type: npm:vue-loader^15.9.7at parseUrl (C:\Users\Lenovo\AppData\Roaming\np…

@DateTimeFormat注解

DateTimeFormat注解 前言 前言在使用DateTimeFormat进行格式化注解时&#xff0c;总是不能匹配前端传入的。格式总是报错 我这里使用的是pattern进行解析的的但是前端是给我传入的ISO类型的导致不能匹配所以总是报错。后来我们进行查看源码得到了答案。 源码解析 看下源码解析…

vue实现在线预览office文件

最近在做电子档案&#xff0c;后端提供了文件的华为云的oss链接。已经实现了点击下载文件的功能。但是呢&#xff0c;他们又希望常规的文件&#xff0c;可以直接点击预览&#xff0c;不需要下载。 按道理说&#xff0c;做文件的在线预览&#xff0c;买个第三方服务什么的&…

前端工程师都在用的 VSCode 常用插件

文章目录前言一、VSCode常用的插件1.Chinese (Simplified) (必备)2.Auto Rename Tag3.One Dark Pro 颜色主题4.格式化代码&#xff08;vscode系统自带&#xff09;5.open in browser 浏览器预览页面6. Live Server 实时预览&#xff08;推荐&#xff09;7. vscode-icons 设置文…

Vue用户管理(增删改查)功能详情

1、最终实现效果&#xff1a; Users.vue: <template><div><!--面包屑导航区域--><el-breadcrumb separator-class"el-icon-arrow-right"><el-breadcrumb-item :to"{ path: /home }">首页</el-breadcrumb-item><el…

Ant Design Vue文件上传详解

ant design 基于vue的文件上传 (XSLX文件篇) Upload 上传 template <a-uploadname"multipartFile":multiple"false":action"action"methods"post"change"uploadFile":file-list"fileList":disabled"di…

Emmet语法总结

1 Emmet简介 Emmet是一个Web开发工具&#xff0c;用于加快HTML和CSS代码的编写速度。使用Emmet能够通过简短的表达式生成HTML或CSS代码片段。另外&#xff0c;截至2022年&#xff0c;主流的编辑器工具如Visual Studio Code、WebStorm都已经集成了Emmet工具&#xff0c;无需手动…

Element-Plus el-col、el-row快速布局

文章目录前言一、el-colspanpush & pull响应式offset二、el-rowgutterjustifyalign总结前言 拖拉了一晚, 总结了一些Layout布局工具的使用方法. 一、el-col 本来打算先说row的… 写完看了一遍感觉还是换过来的好(捂脸). el-col是el-row的子元素. 在el-row添加 style&qu…

学会在Vue项目中插入高德地图JS API与地图的相关设置,看这一篇就够了~(保姆级精简教学)

高德地图API官网&#xff1a;高德开放平台 | 高德地图API。由于博主是基于前端 Vue 框架进行开发的&#xff0c;所以针对地图 JavaScript API 结合 Vue 展开介绍。 目录 一、案例效果 二、开发准备 1. 注册高德开放平台账号 2. 创建应用添加 key 值 三、项目中使用地图组件…

Echart地图组件的使用

1、基本应用&#xff08;中国地图世界地图&#xff09; ​ echarts中想要使用地图首先需要准备地图对应的js文件&#xff0c;js文件可以到github上克隆下来&#xff0c;地址为&#xff1a; https://github.com/Luna829/incubator-echarts &#xff0c;地图的js文件存放在 map/…

vue2实现可拖拽甘特图(结合element-ui的gantt图)

一、前言 接到公司需求&#xff0c;要做一个可拖拽的甘特图来实现排期需求&#xff0c;官方的插件要付费还没有中文的官方文档可以看&#xff0c;就去找了各种开源的demo来看&#xff0c;功能上都不是很齐全&#xff0c;于是总结了很多demo&#xff0c;合在一起组成了一版较为完…

【前端工程化】配置package.json中scripts命令脚本,新手必学

每日鸡汤&#xff1a;你总要努力追上那个曾经被赋予众望的自己吧 目录 前言 一、运行npm run 命令之后会干啥&#xff1f; 1. scripts里面写啥 2. node_modules/.bin 二进制可执行文件 二、运行插件配置 1. 运行某个npm包的命令 2. 多个命令一起运行 总结 前言 配置pac…

JavaScript工具库——Lodash.js介绍安装及使用

前言&#xff1a; 本文主要介绍-JavaScript工具库——Lodash.js介绍安装及使用&#xff01; 作为初入职场、或者对 JavaScript 很多原理掌握的还不是那么透彻的时候&#xff0c;Lodash 这个工具库绝对是一把“杀手锏”&#xff0c;让我们一起来看看这把 “杀手锏” 的厉害之处。…

【前端八股文】浏览器系列:性能优化——HTML、CSS、JS、渲染优化

文章目录HTMLCSSCSS加载会造成阻塞吗JavaScript渲染优化参考本系列目录&#xff1a;【前端八股文】目录总结 是以《代码随想录》八股文为主的笔记。详情参考在文末。 代码随想录的博客_CSDN博客-leecode题解,ACM题目讲解,代码随想录领域博主 性能优化&#xff0c;从以下几个方…