lt;canvas id="" width="" height=""></canvas>
<canvas>只是一個(gè)圖像的容器,相當(dāng)于畫布。本身沒(méi)有繪圖能力。所有的繪制工作必須在JS中完成。
<script>
// 找到定義的canvas元素。
var c=document.getElementById("ID");
//創(chuàng)建 context對(duì)象
//getContext("2d") 對(duì)象是內(nèi)建的
//HTML5對(duì)象
//擁有多種繪制路徑。
var ctx=c.getContext("2d");
// fillStyle 屬性可以是css顏色,漸變
//或圖案。 默認(rèn)值為黑色。
ctx.fillStyle="#FF0000";
// 定義填充方式
//fillRect( x , y , width , height)
ctx.fillRect(0,0,150,75);
</script>
畫線:
moveTo( x ,y ) --定義線條開始坐標(biāo)。
lineTo( x ,y ) -- 定義線條結(jié)束坐標(biāo)。
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 上繪制實(shí)心的文本
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) - 創(chuàng)建線條漸變
x漸變開始點(diǎn)的x坐標(biāo)
y漸變開始點(diǎn)的y坐標(biāo)
x1漸變結(jié)束點(diǎn)的x坐標(biāo)
y1漸變結(jié)束點(diǎn)的y坐標(biāo)
createRadialGradient(x,y,r,x1,y1,r1) - 創(chuàng)建一個(gè)徑向/圓漸變
x、y漸變的開始圓x、y坐標(biāo)
r開始圓半徑
x1、y1漸變的結(jié)束圓x、y坐標(biāo)
r1結(jié)束圓半徑
addColorStop()方法指定顏色停止,參數(shù)使用坐標(biāo)來(lái)描述,可以是0-1;中間值采用0-1之間的小數(shù)可以實(shí)現(xiàn)添加多種顏色
使用漸變,設(shè)置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 結(jié)構(gòu),樣式都放到樣式表里,行為都放到腳本里。
統(tǒng)一兩個(gè)空格縮進(jìn)(總之縮進(jìn)統(tǒng)一即可),不要使用 Tab 或者 Tab、空格混搭。
使用不帶 BOM 的 UTF-8 編碼。
在 HTML中指定編碼 <meta charset="utf-8"> ;
無(wú)需使用 @charset 指定樣式表的編碼,它默認(rèn)為 UTF-8 (參考 @charset);
省略外鏈資源(圖片及其它媒體資源)URL 中的 http / https 協(xié)議,使 URL 成為相對(duì)地址,避免Mixed Content 問(wèn)題,減小文件字節(jié)數(shù)。
其它協(xié)議(ftp 等)的 URL 不省略。
通過(guò)配置編輯器,可以提供快捷鍵來(lái)輸出一致認(rèn)可的注釋模式。
HTML 屬性應(yīng)該按照特定的順序出現(xiàn)以保證易讀性。
屬性的定義,統(tǒng)一使用雙引號(hào)。
a 不允許嵌套 div這種約束屬于語(yǔ)義嵌套約束,與之區(qū)別的約束還有嚴(yán)格嵌套約束,比如a 不允許嵌套 a。
嚴(yán)格嵌套約束在所有的瀏覽器下都不被允許;而語(yǔ)義嵌套約束,瀏覽器大多會(huì)容錯(cuò)處理,生成的文檔樹可能相互不太一樣。
語(yǔ)義嵌套約束
<li> 用于 <ul> 或 <ol> 下;
<dd>, <dt> 用于 <dl> 下;
<thead>, <tbody>, <tfoot>, <tr>, <td> 用于 <table> 下;
嚴(yán)格嵌套約束
inline-Level 元素,僅可以包含文本或其它 inline-Level 元素;
<a>里不可以嵌套交互式元素<a>、<button>、<select>等;
<p>里不可以嵌套塊級(jí)元素<div>、<h1>~<h6>、<p>、<ul>/<ol>/<li>、<dl>/<dt>/<dd>、<form>等。
更多詳情,參考WEB標(biāo)準(zhǔn)系列-HTML元素嵌套
HTML5 規(guī)范中 disabled、checked、selected 等屬性不用設(shè)置值。
沒(méi)有 CSS 的 HTML 是一個(gè)語(yǔ)義系統(tǒng)而不是 UI 系統(tǒng)。
通常情況下,每個(gè)標(biāo)簽都是有語(yǔ)義的,所謂語(yǔ)義就是你的衣服分為外套, 褲子,裙子,內(nèi)褲等,各自有對(duì)應(yīng)的功能和含義。所以你總不能把內(nèi)褲套在脖子上吧。– 一絲
此外語(yǔ)義化的 HTML 結(jié)構(gòu),有助于機(jī)器(搜索引擎)理解,另一方面多人協(xié)作時(shí),能迅速了解開發(fā)者意圖。
文檔類型
為每個(gè) HTML 頁(yè)面的第一行添加標(biāo)準(zhǔn)模式(standard mode)的聲明, 這樣能夠確保在每個(gè)瀏覽器中擁有一致的表現(xiàn)。
lang屬性的取值應(yīng)該遵循 BCP 47 - Tags for Identifying Languages。
以無(wú) BOM 的 utf-8 編碼作為文件格式;
指定字符編碼的 meta 必須是 head 的第一個(gè)直接子元素;
優(yōu)先使用最新版本的IE 和 Chrome 內(nèi)核
viewport: 一般指的是瀏覽器窗口內(nèi)容區(qū)的大小,不包含工具條、選項(xiàng)卡等內(nèi)容;
width: 瀏覽器寬度,輸出設(shè)備中的頁(yè)面可見區(qū)域?qū)挾龋?/p>
device-width: 設(shè)備分辨率寬度,輸出設(shè)備的屏幕可見寬度;
initial-scale: 初始縮放比例;
maximum-scale: 最大縮放比例;
apple-touch-icon 圖片自動(dòng)處理成圓角和高光等效果;
apple-touch-icon-precomposed 禁止系統(tǒng)自動(dòng)添加效果,直接顯示設(shè)計(jì)原圖;
favicon
在未指定 favicon 時(shí),大多數(shù)瀏覽器會(huì)請(qǐng)求 Web Server 根目錄下的 favicon.ico 。為了保證 favicon 可訪問(wèn),避免404,必須遵循以下兩種方法之一:
使用自閉合標(biāo)簽的寫法 小寫加下劃線
<template>
<my-owner-components />
</template>
為提高可讀性 組件應(yīng)用時(shí)換行 按照 ref、class、傳入、傳出 順序書寫
<template>
<my-components
ref="myComponents"
class="home-my-components"
:data="data"
@changeHandle="changeHandle"
/>
</template>
在模版中 簡(jiǎn)單情況使用表達(dá)式 復(fù)雜情況使用計(jì)算屬性或函數(shù)
<template>
<!-- 簡(jiǎn)單情況 -->
<div v-show="data.type===1">
...
</div>
<!-- 復(fù)雜情況 -->
<div v-show="getTypeShow(data)">
...
</div>
</template>
<script>
export default {
methods: {
/**
* ***顯示判斷
* @param data **
*/
getTypeShow(data) {
return data.type===1 && ...
}
}
}
</script>
避免過(guò)多重復(fù)代碼 果超過(guò)三行類似的代碼 配置數(shù)據(jù)再循環(huán)遍歷
根據(jù)元素嵌套規(guī)范 每個(gè)塊狀元素獨(dú)立一行 內(nèi)聯(lián)元素可選
<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 不會(huì)改變dom樹 不會(huì)導(dǎo)致重新渲染 用于頻繁的切換顯示隱藏
v-if 會(huì)改變dom樹 會(huì)導(dǎo)致重新渲染 用于只控制一次顯示隱藏
<template>
<!-- 標(biāo)簽注釋 -->
<div>
...
</div>
<!-- 組件注釋 -->
<my-owner-components />
</template>
CSS 屬性書寫順序 先決定定位寬高顯示大小 再做局部細(xì)節(jié)修飾
定位屬性(或顯示屬性 display)=> 寬高屬性=> 邊距屬性(margin padding)=> 背景 顏色 字體等修飾屬性的定義 這樣定義為了更好的可讀性 讓別人只要看一眼就能在腦海中浮現(xiàn)最終顯示的效果
.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;
}
組件內(nèi)部需要覆蓋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>
以 / 注釋內(nèi)容 / 格式注釋 前后空格 嵌套子類需要一個(gè)回車分割開
/* 注釋內(nèi)容 */
.class-name {
width: 20px;
/* 這里需要換行 */
.class-name-l {
color: blue
}
}
<script>
export default {
name: 'ExampleName', // 這個(gè)名字推薦:大寫字母開頭駝峰法命名
props: {}, // Props 定義
components: {}, // 組件定義
directives: {}, // 指令定義
mixins: [], // 混入 Mixin 定義。
data () { // Data 定義。
return {
dataProps: '' // Data 屬性的每一個(gè)變量都需要在后面寫注釋說(shuō)明用途,就像這樣
}
},
computed: {}, // 計(jì)算屬性定義。
watch: {}, // 屬性變化監(jiān)聽器。
created () {}, // 生命鉤子函數(shù),按照他們調(diào)用的順序。
mounted () {}, // 掛載到元素。
activated () {}, // 使用 keep-alive 包裹的組件激活觸發(fā)的鉤子函數(shù)。
deactivated () {}, // 使用 keep-alive 包裹的組件離開時(shí)觸發(fā)的鉤子函數(shù)
methods: { // 組件方法定義。
publicbFunction () {} // 公共方法的定義,可以提供外面使用
_privateFunction () {} // 私有方法,下劃線定義,僅供組件內(nèi)使用。多單詞,注意與系統(tǒng)名字沖突!
}
}
</script>
函數(shù)/方法注釋必須包含函數(shù)說(shuō)明,有參數(shù)和返回值時(shí)必須使用注釋標(biāo)識(shí),它的作者, 依賴關(guān)系和兼容性信息。
// 注釋
const userID=24
const userID=12 // 注釋
/*
* 針對(duì)下方代碼的說(shuō)明
* 第一行太長(zhǎng)寫第二行
*/
const aa=1
/**
* @Description 加入購(gòu)物車
* @Author luochen_ya
* @Date 2024-03-13
* @param {Number} goodId 商品id
* @param {Array<Number>} specs sku規(guī)格
* @param {Number} amount 數(shù)量
* @param {String} remarks 備注
* @returns <Promise> 購(gòu)物車信息
*/
apiProductAddCard=(goodId, specs, amount, remarks)=> {
return axios.post('***', { goodId, specs, amount, remarks })
}
/**
* @Description: 文件描述
* @Author: luochen_ya
* @Date: 2024-03-13
*/
按照小駝峰命名 首字母小寫
圖片就是img開頭 圖標(biāo)就是icon開頭
method 方法命名不同于文件命名,盡量完整英文命名,語(yǔ)義表達(dá)需完整清楚
<script>
export default {
methods: { // 組件方法定義
publicbFunction () {} // 公共方法的定義 可以提供外面使用
_privateFunction () {} // 私有方法 下劃線定義 僅供組件內(nèi)使用
}
}
</script>
import MyOwnerComponents from '@/components/MyOwnerComponents'
let userName='luochen_ya'
const userInfo={
name: 'luochen_ya',
age: 24
}
const Constant={
// 公用狀態(tài)
COMMON_STATUS_ENABLE=1, // 啟用
COMMON_STATUS_DISABLE=2, // 停用
}
class命名以小寫字母開頭 小寫字母、中劃線和數(shù)字組成 以下是一些常用到的 class的名字
├── api 所有api接口
├── assets 靜態(tài)資源
│ ├── fonts 全局公用字體
│ ├── icons 全局公用圖標(biāo)
│ ├── images 全局公用圖片
│ └── styles 全局公用樣式
├── components 公用組件
│ ├── base 基礎(chǔ)組件
│ └── business 業(yè)務(wù)組件
├── constants 常量 統(tǒng)一管理
├── locales 多語(yǔ)言管理
├── plugins 插件 統(tǒng)一管理
├── router 路由 統(tǒng)一管理
│ └── index.js
├── store vuex 統(tǒng)一管理
│ ├── modules
│ ├── getters.js
│ └── index.js
├── utils 工具函數(shù) 統(tǒng)一管理
├── views 視圖目錄(所有業(yè)務(wù)邏輯的頁(yè)面)
可以直接使用eslint 強(qiáng)制統(tǒng)一代碼規(guī)范 還能規(guī)避一些語(yǔ)法錯(cuò)誤 或者按照以下自己定義的去配置eslint來(lái)使用
以下是個(gè)人習(xí)慣 僅供參考
*請(qǐng)認(rèn)真填寫需求信息,我們會(huì)在24小時(shí)內(nèi)與您取得聯(lián)系。