lt;canvas id="" width="" height=""></canvas>
<canvas>只是一个图像的容器,相当于画布。本身没有绘图能力。所有的绘制工作必须在JS中完成。
<script>
// 找到定义的canvas元素。
var c=document.getElementById("ID");
//创建 context对象
//getContext("2d") 对象是内建的
//HTML5对象
//拥有多种绘制路径。
var ctx=c.getContext("2d");
// fillStyle 属性可以是css颜色,渐变
//或图案。 默认值为黑色。
ctx.fillStyle="#FF0000";
// 定义填充方式
//fillRect( x , y , width , height)
ctx.fillRect(0,0,150,75);
</script>
画线:
moveTo( x ,y ) --定义线条开始坐标。
lineTo( x ,y ) -- 定义线条结束坐标。
var c=document.getElementById("ID");
var ctx=c.getContext("2d");
ctx.moveTo(0,0);
ctx.lineTo(200,100);
ctx.stroke();
画圆:
arc(x, y, r, start, stop)
var c=document.getElementById("ID");
var ctx=c.getContext("2d");
ctx.beginPath();
ctx.arc(95,50,40,0,2*Math.PI);
ctx.stroke();
文本:
font - 定义字体
fillText(text,x,y) - 在 canvas 上绘制实心的文本
strokeText(text,x,y) - 在 canvas 上绘制空心的文本
var c=document.getElementById("ID");
var ctx=c.getContext("2d");
ctx.font="30px Arial";
ctx.fillText("Hello World",10,50);
createLinearGradient(x,y,x1,y1) - 创建线条渐变
x渐变开始点的x坐标
y渐变开始点的y坐标
x1渐变结束点的x坐标
y1渐变结束点的y坐标
createRadialGradient(x,y,r,x1,y1,r1) - 创建一个径向/圆渐变
x、y渐变的开始圆x、y坐标
r开始圆半径
x1、y1渐变的结束圆x、y坐标
r1结束圆半径
addColorStop()方法指定颜色停止,参数使用坐标来描述,可以是0-1;中间值采用0-1之间的小数可以实现添加多种颜色
使用渐变,设置fillStyle或是strokeStyle的值为渐变,然后绘制形状。
线性渐变
var c=document.getElementById("ID");
var ctx=c.getContext("2d");
// Create gradient
var grd=ctx.createLinearGradient(0,0,200,0);
grd.addColorStop(0,"red");
grd.addColorStop(1,"white");
// Fill with gradient
ctx.fillStyle=grd;
ctx.fillRect(10,10,150,80);
线性渐变
径向渐变
尽量确保文档和模板只包含 HTML 结构,样式都放到样式表里,行为都放到脚本里。
统一两个空格缩进(总之缩进统一即可),不要使用 Tab 或者 Tab、空格混搭。
使用不带 BOM 的 UTF-8 编码。
在 HTML中指定编码 <meta charset="utf-8"> ;
无需使用 @charset 指定样式表的编码,它默认为 UTF-8 (参考 @charset);
省略外链资源(图片及其它媒体资源)URL 中的 http / https 协议,使 URL 成为相对地址,避免Mixed Content 问题,减小文件字节数。
其它协议(ftp 等)的 URL 不省略。
通过配置编辑器,可以提供快捷键来输出一致认可的注释模式。
HTML 属性应该按照特定的顺序出现以保证易读性。
属性的定义,统一使用双引号。
a 不允许嵌套 div这种约束属于语义嵌套约束,与之区别的约束还有严格嵌套约束,比如a 不允许嵌套 a。
严格嵌套约束在所有的浏览器下都不被允许;而语义嵌套约束,浏览器大多会容错处理,生成的文档树可能相互不太一样。
语义嵌套约束
<li> 用于 <ul> 或 <ol> 下;
<dd>, <dt> 用于 <dl> 下;
<thead>, <tbody>, <tfoot>, <tr>, <td> 用于 <table> 下;
严格嵌套约束
inline-Level 元素,仅可以包含文本或其它 inline-Level 元素;
<a>里不可以嵌套交互式元素<a>、<button>、<select>等;
<p>里不可以嵌套块级元素<div>、<h1>~<h6>、<p>、<ul>/<ol>/<li>、<dl>/<dt>/<dd>、<form>等。
更多详情,参考WEB标准系列-HTML元素嵌套
HTML5 规范中 disabled、checked、selected 等属性不用设置值。
没有 CSS 的 HTML 是一个语义系统而不是 UI 系统。
通常情况下,每个标签都是有语义的,所谓语义就是你的衣服分为外套, 裤子,裙子,内裤等,各自有对应的功能和含义。所以你总不能把内裤套在脖子上吧。– 一丝
此外语义化的 HTML 结构,有助于机器(搜索引擎)理解,另一方面多人协作时,能迅速了解开发者意图。
文档类型
为每个 HTML 页面的第一行添加标准模式(standard mode)的声明, 这样能够确保在每个浏览器中拥有一致的表现。
lang属性的取值应该遵循 BCP 47 - Tags for Identifying Languages。
以无 BOM 的 utf-8 编码作为文件格式;
指定字符编码的 meta 必须是 head 的第一个直接子元素;
优先使用最新版本的IE 和 Chrome 内核
viewport: 一般指的是浏览器窗口内容区的大小,不包含工具条、选项卡等内容;
width: 浏览器宽度,输出设备中的页面可见区域宽度;
device-width: 设备分辨率宽度,输出设备的屏幕可见宽度;
initial-scale: 初始缩放比例;
maximum-scale: 最大缩放比例;
apple-touch-icon 图片自动处理成圆角和高光等效果;
apple-touch-icon-precomposed 禁止系统自动添加效果,直接显示设计原图;
favicon
在未指定 favicon 时,大多数浏览器会请求 Web Server 根目录下的 favicon.ico 。为了保证 favicon 可访问,避免404,必须遵循以下两种方法之一:
使用自闭合标签的写法 小写加下划线
<template>
<my-owner-components />
</template>
为提高可读性 组件应用时换行 按照 ref、class、传入、传出 顺序书写
<template>
<my-components
ref="myComponents"
class="home-my-components"
:data="data"
@changeHandle="changeHandle"
/>
</template>
在模版中 简单情况使用表达式 复杂情况使用计算属性或函数
<template>
<!-- 简单情况 -->
<div v-show="data.type===1">
...
</div>
<!-- 复杂情况 -->
<div v-show="getTypeShow(data)">
...
</div>
</template>
<script>
export default {
methods: {
/**
* ***显示判断
* @param data **
*/
getTypeShow(data) {
return data.type===1 && ...
}
}
}
</script>
避免过多重复代码 果超过三行类似的代码 配置数据再循环遍历
根据元素嵌套规范 每个块状元素独立一行 内联元素可选
<template>
<!-- 情况1 -->
<div>
<h1></h1>
<p></p>
<p><span></span><span></span></p>
</div>
<!-- 情况2 -->
<div>
<h1></h1>
<p></p>
<p>
<span></span>
<span></span>
</p>
</div>
</template>
v-show 不会改变dom树 不会导致重新渲染 用于频繁的切换显示隐藏
v-if 会改变dom树 会导致重新渲染 用于只控制一次显示隐藏
<template>
<!-- 标签注释 -->
<div>
...
</div>
<!-- 组件注释 -->
<my-owner-components />
</template>
CSS 属性书写顺序 先决定定位宽高显示大小 再做局部细节修饰
定位属性(或显示属性 display)=> 宽高属性=> 边距属性(margin padding)=> 背景 颜色 字体等修饰属性的定义 这样定义为了更好的可读性 让别人只要看一眼就能在脑海中浮现最终显示的效果
.class-name {
position: fixed;
top: 100px;
left: 0;
right: 0;
bottom: 0;
display: block;
width: 100%;
height: 100%;
margin: 10px;
padding: 10px;
background-color: red;
border-radius: 2px;
font-size: 14px;
color: #000;
line-height: 1.42;
}
组件内部需要覆盖UI框架样式 必须在最外层组件加类名
<template>
<div class="input-container">
<el-input class="name-input"></el-input>
</div>
</template>
<style lang="scss">
.input-container {
.name-input {
.el-input__inner {
font-size: 16px;
}
}
}
</style>
以 / 注释内容 / 格式注释 前后空格 嵌套子类需要一个回车分割开
/* 注释内容 */
.class-name {
width: 20px;
/* 这里需要换行 */
.class-name-l {
color: blue
}
}
<script>
export default {
name: 'ExampleName', // 这个名字推荐:大写字母开头驼峰法命名
props: {}, // Props 定义
components: {}, // 组件定义
directives: {}, // 指令定义
mixins: [], // 混入 Mixin 定义。
data () { // Data 定义。
return {
dataProps: '' // Data 属性的每一个变量都需要在后面写注释说明用途,就像这样
}
},
computed: {}, // 计算属性定义。
watch: {}, // 属性变化监听器。
created () {}, // 生命钩子函数,按照他们调用的顺序。
mounted () {}, // 挂载到元素。
activated () {}, // 使用 keep-alive 包裹的组件激活触发的钩子函数。
deactivated () {}, // 使用 keep-alive 包裹的组件离开时触发的钩子函数
methods: { // 组件方法定义。
publicbFunction () {} // 公共方法的定义,可以提供外面使用
_privateFunction () {} // 私有方法,下划线定义,仅供组件内使用。多单词,注意与系统名字冲突!
}
}
</script>
函数/方法注释必须包含函数说明,有参数和返回值时必须使用注释标识,它的作者, 依赖关系和兼容性信息。
// 注释
const userID=24
const userID=12 // 注释
/*
* 针对下方代码的说明
* 第一行太长写第二行
*/
const aa=1
/**
* @Description 加入购物车
* @Author luochen_ya
* @Date 2024-03-13
* @param {Number} goodId 商品id
* @param {Array<Number>} specs sku规格
* @param {Number} amount 数量
* @param {String} remarks 备注
* @returns <Promise> 购物车信息
*/
apiProductAddCard=(goodId, specs, amount, remarks)=> {
return axios.post('***', { goodId, specs, amount, remarks })
}
/**
* @Description: 文件描述
* @Author: luochen_ya
* @Date: 2024-03-13
*/
按照小驼峰命名 首字母小写
图片就是img开头 图标就是icon开头
method 方法命名不同于文件命名,尽量完整英文命名,语义表达需完整清楚
<script>
export default {
methods: { // 组件方法定义
publicbFunction () {} // 公共方法的定义 可以提供外面使用
_privateFunction () {} // 私有方法 下划线定义 仅供组件内使用
}
}
</script>
import MyOwnerComponents from '@/components/MyOwnerComponents'
let userName='luochen_ya'
const userInfo={
name: 'luochen_ya',
age: 24
}
const Constant={
// 公用状态
COMMON_STATUS_ENABLE=1, // 启用
COMMON_STATUS_DISABLE=2, // 停用
}
class命名以小写字母开头 小写字母、中划线和数字组成 以下是一些常用到的 class的名字
├── api 所有api接口
├── assets 靜態資源
│ ├── fonts 全局公用字体
│ ├── icons 全局公用图标
│ ├── images 全局公用图片
│ └── styles 全局公用样式
├── components 公用組件
│ ├── base 基础组件
│ └── business 业务组件
├── constants 常量 统一管理
├── locales 多语言管理
├── plugins 插件 统一管理
├── router 路由 统一管理
│ └── index.js
├── store vuex 统一管理
│ ├── modules
│ ├── getters.js
│ └── index.js
├── utils 工具函数 统一管理
├── views 视图目录(所有业务逻辑的页面)
可以直接使用eslint 强制统一代码规范 还能规避一些语法错误 或者按照以下自己定义的去配置eslint来使用
以下是个人习惯 仅供参考
*请认真填写需求信息,我们会在24小时内与您取得联系。