Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537
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小時內與您取得聯系。