前端常见单位
前端常见单位前端开发过程常常会遇到不同的单位,这些单位你真的了解过吗?
px屏幕像素
rem根据根节点改变自身大小,默认根字体大小为 屏幕宽度/根结点
em根据父节点改变自身大小
vhviewpoint height,视窗高度,1vh 等于视窗高度的 1%
vwviewpoint width,视窗宽度,1vw 等于视窗宽度的 1%
Vue中使用rem移动端适配方案
Vue 中使用 rem 移动端适配方案
安装依赖
1npm install postcss-pxtorem -D
初始化根标签字体大小,设置 px 与 rem 的关系
123456789101112const baseSize = 46; //根据UI尺寸决定function setRem() { const scale = document.documentElement.clientWidth / 1080; //UI尺寸决定 document.documentElement.style.fontSize = baseSize * Math.min(scale, 2) + 'px';}setRem();window.onresize = function () { setRem();};
在 main 引入文件
1import './utils/rem.js';
设置规则(更改 postcss.config.js,该文件为使用 vue-cli3 自动创建的文件)
123 ...
QQ互联避坑指南
QQ 互联避坑指南申请 APPID在 QQ 互联官网 h【ttp://connect.qq.com/】申请,根据项目需要,申请相应的接入。
按照官网指示操作注册成为开发者
注册成功后就可以创建自己的应用
审核成功后就可以得到自己的 APPID 与 APP KEY 这两个都会在后续接入中用到
放置 QQ 登录按钮网站需要下载“QQ 登录”按钮图片,并按照 UI 规范将按钮放置在页面合适的位置。
获取 Authorization Code打开浏览器,访问如下地址(请将 client_id,redirect_uri,scope 等参数值替换为你自己的):1https://graph.qq.com/oauth2.0/authorize?response_type=code&client_id=[YOUR_APPID]&redirect_uri=[YOUR_REDIRECT_URI]&scope=[THE_SCOPE]
如果用户已经有登录态,会弹出提示一个确认页。如果还没有登录,会弹出登录页成功登录后,弹出授权框引导用户授权(仅在第一次成功 ...
node发送邮件
node 发送邮件准备工作为了实现这个功能,你首先要有一个邮箱;由于需要使用 SMTP 方式发送,你还需要开启相关功能。你可以登录你的邮箱,然后开启这个设置,以 QQ 邮箱为例(其他邮箱也差不多,主要开启服务获取到授权码就可以了):
2.安装模块 nodemailer(当然也有其他的邮件模块,可以自行选择)
1npm install nodemailer --save
引入模块1const nodemailer = require('nodemailer');
简单配置(这里只是一些简单的配置项,更多配置请查看官网,其实都是大同小异,需要什么添加什么就可以了)12345678910111213let config = { service: 'qq', // host: "smtp.qq.com", //邮箱服务的主机,如smtp.qq.com port: '465', //对应的端口号 secureConnection: true, //secureConnection:false ...
ES6 异步解决方案 async 函数
ES6 异步解决方案 async 函数Generator 函数要说到 async 函数就得从 Generator 函数说起,Generator 函数是 ES6 提供的一种异步编程解决方案,语法行为与传统函数完全不同。Generator 函数有多种理解角度。从语法上,首先可以把它理解成,Generator 函数是一个状态机,封装了多个内部状态。执行 Generator 函数会返回一个遍历器对象,也就是说,Generator 函数除了状态机,还是一个遍历器对象生成函数。返回的遍历器对象,可以依次遍历 Generator 函数内部的每一个状态。
形式上,Generator 函数是一个普通函数,但是有两个特征。一是,function 关键字与函数名之间有一个星号;二是,函数体内部使用 yield 语句,定义不同的内部状态(yield 语句在英语里的意思就是“产出”)。
1234567function* ImGenerator() { yield 'hello'; yield 'world'; return 'ending ...
ES6异步解决方案async函数
ES6 异步解决方案 async 函数Generator 函数要说到 async 函数就得从 Generator 函数说起,Generator 函数是 ES6 提供的一种异步编程解决方案,语法行为与传统函数完全不同。Generator 函数有多种理解角度。从语法上,首先可以把它理解成,Generator 函数是一个状态机,封装了多个内部状态。执行 Generator 函数会返回一个遍历器对象,也就是说,Generator 函数除了状态机,还是一个遍历器对象生成函数。返回的遍历器对象,可以依次遍历 Generator 函数内部的每一个状态。
形式上,Generator 函数是一个普通函数,但是有两个特征。一是,function 关键字与函数名之间有一个星号;二是,函数体内部使用 yield 语句,定义不同的内部状态(yield 语句在英语里的意思就是“产出”)。
1234567function* ImGenerator() { yield 'hello'; yield 'world'; return 'ending ...
ES6异步解决方案Promise
ES6 异步解决方案 PromiseParmisePromise 是异步编程的一种解决方案,比传统的解决方案——回调函数和事件——更合理和更强大。
Promise 对象有以下两个特点。
(1)对象的状态不受外界影响。Promise 对象代表一个异步操作,有三种状态:Pending(进行中)、Resolved(已完成,又称 Fulfilled)和 Rejected(已失败)。只有异步操作的结果,可以决定当前是哪一种状态,任何其他操作都无法改变这个状态。这也是 Promise 这个名字的由来,它的英语意思就是“承诺”,表示其他手段无法改变。
(2)一旦状态改变,就不会再变,任何时候都可以得到这个结果。Promise 对象的状态改变,只有两种可能:从 Pending 变为 Resolved 和从 Pending 变为 Rejected。只要这两种情况发生,状态就凝固了,不会再变了,会一直保持这个结果。就算改变已经发生了,你再对 Promise 对象添加回调函数,也会立即得到这个结果。这与事件(Event)完全不同,事件的特点是,如果你错过了它,再去监听,是得不到结果的。
有了 Promise ...
ES6之对象方法
ES6 之对象方法Object.is()与严格比较运算符(===)的行为基本一致。
1234Object.is('obj', 'obj')// trueObject.is({}, {})// false
不同之处只有两个:一是+0 不等于-0,二是 NaN 等于自身。
12345+0 === -0 //trueNaN === NaN // falseObject.is(+0, -0) // falseObject.is(NaN, NaN) // true
当然我们也可以用 ES5 的方法来实现该方法,原理还是利用严格运算符(===),只是特殊的情况进行特殊处理。
12345678910111213Object.defineProperty(Object, 'is', { value: function(x, y) { if (x === y) { // 针对+0 不等于 -0的 ...