前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >前端周卡——第一周

前端周卡——第一周

作者头像
GopalFeng
修改2023-09-23 16:03:10
1.8K0
修改2023-09-23 16:03:10
举报
文章被收录于专栏:前端杂货铺-Gopal
vue 中使用 rem 布局

背景:移动端的设备会越来越多,而且会有不同的分辨率。那如何在不同的手机中显示相同的效果呢?也就是我们常说的移动端适配是怎么做到的呢?

常见的方法有很多,比如百分比、flex 布局等。但现在更加常见的是采用 rem 布局的方式

如何在 Vue 项目中使用 rem 呢?

这里记录一下 使用 lib-flexible 和 px2rem-loader 自动转换

  • 安装插件
代码语言:javascript
复制
npm install lib-flexible --save
npm install px2rem-loader --save-dev
  • main.js 中引入
代码语言:javascript
复制
import 'amfe-flexible/index.js'
  • 在 webpack 的配置中配置 px2rem-loader,我这里是采用 Vue-cli 搭建的,在 build/utils.js 文件中,加入如下配置。
代码语言:javascript
复制
  const px2remLoader = {
    loader: 'px2rem-loader',
    options: {
      // 设计稿是 320 px
      remUnit: 32 // 默认换算为1rem为32px,可根据你的原型图修改
    }
  }

另外需要在 generateLoaders 函数中加入我们的 px2remLoader 配置,主要的作用是告诉 webpack,处理 CSS 的使用要经过 px2remLoader

代码语言:javascript
复制
const loaders = options.usePostCSS ? [cssLoader, postcssLoader, px2remLoader] : [cssLoader, px2remLoader]
  • 在 Vue 组件中使用 这里我用了 Sass,具体的使用如下。注意,我这里设计稿是 320px,,所以
rem: 320/10rem; 这一句是计算一个 rem 代表多少 px。然后 40/

rem 计算出来实际的 rem 值。

代码语言:javascript
复制
<style scoped lang="scss">
$rem: 320/10rem;

.header {
  width: 100%;
  height: 40/$rem;
  display: flex;
  align-items: center;
  background: #8560A9;
}

参考:vue 中使用 rem 布局的两种方法[1]

ajax 请求报 415 错误

没有配置 accept 请求头

代码语言:javascript
复制
xhr.setRequestHeader('Accept', 'application/json')
xhr.setRequestHeader('Content-Type', 'application/json')

参考:https://stackoverflow.com/questions/11492325/post-json-fails-with-415-unsupported-media-type-spring-3-mvc

当作为 background-image 时修改 SVG 填充颜色

背景:我们知道,假如我们使用 svg 在 HTML 中的时候,我们可以通过 CSS 修改它的颜色

代码语言:javascript
复制
polygon.mystar {
    fill: blue;
}

circle.mycircle {
    fill: green;
}

但是假如是通过 background-image 引入的 SVG 呢?

解决方法:

CSS masks

这个是存在浏览器的兼容性问题的,基本使用如下所示:

代码语言:javascript
复制
.icon {
    background-color: red;
    -webkit-mask-image: url(icon.svg);
    mask-image: url(icon.svg);
}

dataLoader 源码的阅读【初步】

1.load 方法通过 getCurrentBatch 返回当前的 Batch,这个方法中又通过 _batchScheduleFn 方法即 getValidBatchScheduleFn 方法处理当前的,如果没有,通过 enqueuePostPromiseJob 方法,判断是使用 process.nextTick 还是 setTimeout 还是 setImmediate,去处理入队列的任务

2.loadMany 方法就是多个 load 方法,只是用了 Promise.all 方法处理

思考:这里关于事件队列 Tick 的思考,我个人理解,举个例子,setTimeout 中回调中使用 setTimeout,那么第一个 setTimeout 执行的时候是第一个 Tick,执行完再将第二个 setTimeout 放入第二个 Tick 中。

参考资料:

https://github.com/graphql/dataloader/blob/master/src/index.js

https://www.jianshu.com/p/fbd1257116b0

https://www.thinbug.com/q/42073880

https://dataloader.js.cool/#/?id=loadkey

http://www.ecma-international.org/ecma-262/6.0/#sec-jobs-and-job-queues

Vue 路由拦截跳转登录页

背景:实现跳转到各个页面,判断是否登录,假如没有登录,则跳转到登录页

代码语言:javascript
复制
router.beforeEach((to, from, next) => {
  if (to.path === '/login') {
    next()
  } else {
    let token = getCookie('X-BLACKCAT-TOKEN')
    if (!token) {
      next('/login')
    } else {
      next()
    }
  }
})

参考资料

[1]

vue 中使用 rem 布局的两种方法: https://blog.csdn.net/Robin_star_/article/details/86638138

[2]

「前端进阶」高性能渲染十万条数据(虚拟列表): https://juejin.im/post/5db684ddf265da4d495c40e5

[3]

模块的基础操作,导出和导入: https://juejin.im/post/5b2b2d8de51d4558ba1a64e0

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-05-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 前端杂货铺 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • ajax 请求报 415 错误
  • 当作为 background-image 时修改 SVG 填充颜色
  • dataLoader 源码的阅读【初步】
  • Vue 路由拦截跳转登录页
    • 参考资料
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档