blossom html css JavaScript
程序員入門的時候整理的一份學習筆記,見證了我的成長
備份
標簽:前端學習
HTML
視頻音頻標簽
帶控制器的視頻標簽, 不同瀏覽器有不同的文件格式要求
所以用 2 個 source 標簽指定不同的視頻格式
<video width="300" height="200" controls="controls">
<source src="movie.mp4">
<source src="movie.ogv">
</video>
帶控制器的音頻標簽, 不同瀏覽器有不同的文件格式要求
所以用 2 個 source 標簽指定不同的音頻格式
<audio id='id-audio-player' controls="controls">
<source src="audio.ogg">
<source src="audio.mp3">
</audio >
audio 基本操作如下
var a = document.querySelector('#id-audio-player')
a.play() //播放
a.pause() //暫停
a.autoplay //自動播放 (設(shè)為true)
a.src //鏈接音頻文件
a.volume //音量(0-1之間的數(shù))
a.duration //音頻時間長度
a.currentTime = 1 //現(xiàn)在播放第幾s(設(shè)置)
a.playbackRate // 播放速率, 默認是 1
移動端設(shè)置
設(shè)置 viewport
viewport 是 html 的父元素
在手機上需要用下面的語句設(shè)置它的尺寸
網(wǎng)易移動端模板
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
<script>
//設(shè)置rem
document.documentElement.style.fontSize = document.documentElement.clientWidth / 7.5(iPhone6相對寬度) + 'px';
//通過設(shè)計圖寬度 / 100 來得出相對寬度 rem
//比如iphone5 設(shè)計圖寬度640 相對寬度 6.4
</script>
屬性 | 說明 |
---|---|
width=device-width | 寬度等于設(shè)備寬度 |
height=device-height | 高度等于設(shè)備寬度 |
initial-scale | 初始縮放比例 |
minimum-scale | 允許用戶縮放的最小比例 |
maximum-scale | 允許用戶縮放的最大比例 |
user-scalable | 是否允許用戶縮放 |
媒體查詢-響應(yīng)式開發(fā)
響應(yīng)式設(shè)計就是一套 CSS 根據(jù)當前的分辨率選擇不同的樣式
媒體查詢主要用來:
- 檢測媒體的類型, 比如 screen, tv等
- 檢測布局視口的特性, 比如視口的寬高分辨率等
<style>
@media all and (min-width: 200px) and (max-width: 300px){
body {
background: red;
}
}
//網(wǎng)易移動端字體設(shè)置
@media screen and (max-width: 321px) {
body {
font-size:16px
}
}
@media screen and (min-width: 321px) and (max-width:400px) {
body {
font-size:17px
}
}
@media screen and (min-width: 400px) {
body {
font-size:19px
}
}
</style>
上面代碼中, all 是媒體類型, 代表任何設(shè)備
and 是邏輯操作
意思是, 對于任何設(shè)備, 在寬度在 200-300 的范圍內(nèi)應(yīng)用這個樣式
CSS
選擇器
舉例:<
h1
id="id-h1
" class="class-h1
"> 琉璃 < /h1 >
一切標簽都可被選擇包括html, style等
元素 選擇器 | 符號 | 優(yōu)先級 從高到低 |
---|---|---|
!important | ! | h1 { color: red !important ; } |
id | # |
#id-h1 { color: red; } |
class | . |
.class-h1 { color: red; } |
標簽 | 無 |
h1 { color: red; } |
定義 | 優(yōu)先級 從高到低 |
---|---|
! | !important |
內(nèi)聯(lián) | 禁止使用 < h1 ~~style="color: red;"~~ > Hello World < /h1 > |
中聯(lián) | < style > h1{ color: red; } < /style > |
外聯(lián) | < link rel="stylesheet" href="tag.css " > |
常用
body {
background: lightblue; /* 背景色 */
margin:0px; /* 外邊距 */
border:0px; /* 邊框 */
border-style: solid; /* 邊框樣式 */
padding:0px; /* 內(nèi)邊距 */
font-family: Microsoft YaHei; /* 字體 */
font-size: 22px; /* 字體大小 */
text-align: center; /* 對齊 */
}
.tanChuang {
z-index: 100; /* 頂層 */
position: fixed; /* 定位 */
top: 0px; /* 頂部 */
left: 0px; /* 左部 */
width: 100%;
height: 100%;
opacity: 0.96; /* 透明度 */
background: black;
color: white;
}
.tanCenter {
position:relative;
top: 50%;
transform: translateY(-61.8%); /* Y軸距離 */
}
.circle {
width: 50px;
height: 50px;
border-radius: 50%; /* 圓角 */
}
background 相關(guān)屬性和縮寫
background-color: #233;
background-image: url(bg.png);
background-repeat: no-repeat;
background-attachment: fixed; 背景圖片隨滾動軸移動方式
background: #233 url(bg.png) no-repeat;
三種縮寫, 分別對應(yīng)有 4 2 3 個值的時候的解釋, padding 同理
margin: top right bottom left
margin: (top/bottom) (right/left)
margin: top (right/left) bottom
overflow屬性
visible 默認
auto 需要的時候加滾動條
hidden 隱藏多余元素
scroll 就算用不著也會強制加滾動條
內(nèi)聯(lián)元素 居中 text-align: center
區(qū)塊元素 居中 margin: 0px auto;
偽類
:link | 未訪問 | :hover | 懸停 |
---|---|---|---|
:visited | 已訪問 | :active | 選定 |
a:link { color: white; text-decoration: none; } /*去下劃線*/
a:visited{ color: black; }
a:hover { color: red; cursor: pointer; } /*鼠標樣式*/
a:active { color: lightblue; }
a.class:visited {color: white;} /* 獨立偽類 */
定位 position
值 | 描述 |
---|---|
static | 默認 static
|
relative | 相對定位 可相對自身偏移 |
absolute | 完全絕對定位, 忽略其他所有東西, 往上浮動到 非 static 的元素 |
fixed | 基于 window 的絕對定位, 不隨頁面滾動改變 |
非 static 元素可以用 top left bottom right 屬性來設(shè)置坐標
非 static 元素可以用 z-index 屬性來設(shè)置顯示層次
e.pageX——相對整個頁面的坐標
e.clientX——相對可視區(qū)域的坐標
e.offsetX——相對當前坐標系的border左上角開始的坐標
布局 flex
容器的屬性 | 描述 |
---|---|
flex-direction :row |
屬性決定主軸的方向(即項目的排列方向 |
row,row-reverse | 主軸為水平方向光督,起點在左(右)端 |
column,column-reverse | 主軸為垂直方向痛倚,起點在上(下)沿 |
flex-wrap :nowrap |
定義如果一條軸線排不下如何換行,默認不換行 |
wrap,wrap-reverse | 換行兰粉,第一行在上(下)方 |
flex-flow |
flex-direction 屬性和flex-wrap 屬性的簡寫形式伴澄,默認值為row nowrap
|
justify-content |
屬性定義了項目在主軸上的對齊方式 |
flex-start,flex-end | 左對齊(默認),右對齊 |
center,space-between | 居中,兩端對齊,項目之間的間隔都相等 |
space-around | 每個項目兩側(cè)的間隔相等寸齐。所以仇穗,項目之間的間隔比項目與邊框的間隔大一倍 |
align-items |
屬性定義項目在交叉軸上如何對齊 |
stretch | (默認值)如果項目未設(shè)置高度或設(shè)為auto,將占滿整個容器的高度 |
flex-start,flex-end | 交叉軸的起(終)點對齊 |
center,baseline | 交叉軸的中點對齊,項目的第一行文字的基線對齊 |
align-content |
定義了多根軸線的對齊方式济赎。如果項目只有一根軸線,該屬性不起作用 |
flex-start,flex-end | 與交叉軸的起(終)點對齊 |
center | 與交叉軸的中點對齊 |
space-between | 與交叉軸兩端對齊记某,軸線之間的間隔平均分布 |
space-around | 每根軸線兩側(cè)的間隔都相等司训。所以,軸線之間的間隔比軸線與邊框的間隔大一倍 |
stretch(默認值) | 軸線占滿整個交叉軸 |
項目的屬性 | 描述 |
---|---|
order :0 |
定義項目的排列順序液南。數(shù)值越小排列越靠前豁遭,默認為0 |
flex-grow :0 |
定義項目的放大比例,默認0即如果存在剩余空間贺拣,也不放大 |
flex-grow :1 |
屬性都為1,則它們將等分剩余空間(如果有的話) |
flex-grow :2 |
如果一個項目的flex-grow屬性為2捂蕴,其他項目都為1譬涡,則前者占據(jù)的剩余空間將比其他項多一倍 |
flex-shrink :1 |
定義了項目的縮小比例,默認為1啥辨,即如果空間不足涡匀,該項目將縮小 |
flex-shrink :0 |
如果一個項目的屬性為0,其他項目都為1溉知,則空間不足時陨瘩,前者不縮小,負值無效 |
flex-basis :auto |
定義了在分配多余空間之前腕够,項目占據(jù)的主軸空間(main size)。瀏覽器根據(jù)這個屬性舌劳,計算主軸是否有多余空間帚湘。它的默認值為auto,即項目的本來大小 |
flex-basis :350px |
可以設(shè)為跟width或height屬性一樣的值(比如350px)甚淡,則項目將占據(jù)固定空間 |
flex |
是flex-grow , flex-shrink 和 flex-basis 的簡寫大诸,默認值為0 1 auto 。后兩個屬性可選贯卦。 |
flex :auto,none |
默認值分別是(1 1 auto) 和 (0 0 auto) |
align-self :auto |
允許單個項目有與其他項目不一樣的對齊方式资柔,可覆蓋align-items 屬性。默認值為auto 撵割,表示繼承父元素的align-items 屬性贿堰,如果沒有父元素,則等同于stretch .該屬性可能取6個值啡彬,除了auto羹与,其他都與align-items屬性完全一致 |
顯示 display
值 | 描述 |
---|---|
none | 不顯示 |
block | 獨占一行(默認有div p ul ol li h1 h2 h3 h4 h5 h6 ) |
inline | 內(nèi)聯(lián)元素 無法設(shè)置寬高 |
inline-block | 內(nèi)聯(lián)元素 可以設(shè)置寬高 |
盒模型
BOX | 單位 | 描述 |
---|---|---|
margin: | 0px; | 外邊距 |
border: | 0px; | 邊框 |
padding: | 0px; | 內(nèi)邊距 |
width: | 80% or 0px; | 寬 |
height: | 100% or 0px; | 高 |
動畫
動畫 | 功能 |
---|---|
transform | 2D 變形 |
transition | css動畫(運動時間,運動對象,運動速度,等待時間) |
animation | 多過程動畫效果(具體看鏈接) |
JavaScript
定義 | 插入 < /body > 之前 順序執(zhí)行 |
---|---|
中聯(lián) | < script >log('Hello World!') < /script > |
外聯(lián) | < script src="Echo.js " charset="utf-8">< /script > |
Array 數(shù)組
屬性 | 秒懂釋義 | 相當于 |
---|---|---|
slice( ) | 復(fù)制 切片并返回 | 支持負索引 |
splice(開始,長度,元素) | 刪除插入并返回 | 開始的地方插入 |
concat( array ) | 連接 數(shù)組 | |
includes( str[ ] ) | 檢查 是否包含 str[ ] 返回 bool | |
indexOf() | 返回元素第一次在數(shù)組中出現(xiàn)的位置,無返回-1 | |
length | 返回長度 | 長度可設(shè)置以清空 |
push( ) | 末尾 添加元素 | push(1,2,[1,2]) |
unshift( ) | 頭部 添加元素 | |
pop( ) | 尾部 刪除一個元素 | |
shift( ) | 頭部 刪除一個元素 | |
join( str ) | 返回 字符串 str 分隔 | |
reverse( ) | 翻轉(zhuǎn) 所有元素 | |
sort( ) | 排序函數(shù)(需提供排序方式函數(shù)) | |
map() | 參數(shù)是函數(shù),返回一個新數(shù)組 | |
filter() | 參數(shù)是一個過濾函數(shù),返回符合條件的新數(shù)組 | |
toString() | 返回數(shù)組的字符串形式 |
Str 字符串
屬性 | 說明 |
---|---|
slice( ) | 返回 切片 |
if( == ) |
判斷相等需要雙等號 |
includes( str ) | 檢查 是否包含 str 返回 bool |
split( str ) | 以 str 分割字符串 返回 array |
toLowerCase() | 字母轉(zhuǎn)小寫 |
toUpperCase() | 字母轉(zhuǎn)大寫 |
indexOf( str ) | 查找 是否包含 str 返回 下標 |
match( str ) | 整個匹配結(jié)果以及任何括號捕獲的匹配結(jié)果的 Array,沒有就返回null |
replace( pattern, str ) | 替換 pattern 為 str ;/pattern/g全部替換 |
search( pattern ) | 查找 pattern 返回下標 否則返回 -1 |
Object 字典
dict
= { '初中生':6, '高中生':7, '大學生':8 }
|屬性|說明
|:-|:-|
|dict
= { key : 'value', }|創(chuàng)建
|dict.(key)
|點語法讀取|
|dict
['小學生'] = 4| 添加
|dict
['小學生'] = 5| 修改
|deletedict
['大學生']| 刪除
|Object.keys(dict
)| 返回 keys
類
var Student = function(name, height) {
// 用 this.變量名 來創(chuàng)造一個只有類的實例才能訪問的變量
this.name = name
this.height = height
}
// 用 new 函數(shù)名(參數(shù)) 初始化一個類的實例
var s1 = new Student('gua', 169)
// 可以改變 s1 的屬性
s1.name = 'xiaogua'
s1.height = 1.69
// 可以創(chuàng)建多個互相獨立的實例
var s2 = new Student()
var s3 = new Student()
//可以給類增加一些方法(函數(shù))
Student.prototype.greeting = function() {
console.log(`hello, I'm ${this.name}`)
}
// 可以調(diào)用實例的方法
s1.greeting()
ES6類的表示方法
class Student {
// 初始化的套路
constructor(name, height) {
this.name = name
this.height = height
}
// 方法沒有 var
greeting() {
console.log(`hello, I'm ${this.name}`)
}
update(name, age) {
this.name = name
this.age = age
}
}
class Teacher extends Student {
//繼承類的用法
}
this
apply call bind //是用來給函數(shù)指定 this 用的
apply 接受兩個參數(shù)
第一個參數(shù)是函數(shù)里面的 this
第二個參數(shù)是要傳給函數(shù)的參數(shù)列表, 類型是 數(shù)組(暫定), apply 會把數(shù)組拆成一個個的參數(shù)傳給函數(shù)
console.log.apply(console, arguments) //直接用
call 和 apply 類似, 但是小有區(qū)別, 如下
第一個參數(shù)和 apply 一樣
第 2, 3, 4, 5, ... 個參數(shù)會依次作為參數(shù)傳給函數(shù)
console.log.call(console, 1, 2, 3, 4, 5, 6, 7) //直接用
bind 函數(shù)/*不直接調(diào)用*/, 而是返回一個函數(shù)讓你來調(diào)用
第一個參數(shù)是用來指定函數(shù)里面的 this, 和 apply call 一樣
var log = console.log.bind(console) //不直接用
log() //才可調(diào)用
ES6
屬性 | 說明 |
---|---|
let | 就是限制作用域在 {} 內(nèi)的 var |
const | 用來聲明一個不可賦值的變量 ,也是限制作用域在 {} 內(nèi)的 var |
Set | 和 Array 相似的數(shù)據(jù)結(jié)構(gòu)不同之處在于 Set 中的元素都是不重復(fù)的
|
Set |
var s = new Set() add 方法添加元素s.add(1)
|
Set | has 方法檢查元素是否在 set 中 s.has(1) => true
|
Set | size 屬性相當于 length s.size => 2
|
Set | delete 方法刪除一個元素s.delete(1)
|
Map |
Object 相似 var m = new Map()
|
Map | set 方法增加一個值m.set('name', 'gua')
|
Map | get 屬性得到一個值m.get('name')
|
... | 叫擴展符號, 作用是把數(shù)組解開成單獨的元素 |
... |
var a1 = [1, 2, 3] var a2 = [...a1, 4] => [1, 2, 3, 4]
|
... | 也可以傳參var a1 = [1, 2, 3] log(...a1) => '1,2,3'
|
... | 語法可以實現(xiàn)可變長度的參數(shù), 多余的參數(shù)會被放進 args 數(shù)組中 |
... |
var foo = function(a, ...args) {log(a, args.length)} foo(1, 2, 3, 4)
|
解包 |
var [a, b] = [1, 2] [a, b] = [b, a]
|
箭頭 |
(參數(shù)1, 參數(shù)2) => 語句 function(參數(shù)1, 參數(shù)2) {return 語句}
|
Json 格式
var x = JSON.stringify( [1,2,3] ) //編譯
var y = JSON.parse( x ) //讀取
Promise 處理回調(diào)的方法
// 將 fs.readFile 的操作封裝成 promise外遇,這樣就可以使用 promise 的 api 了
const readFile = function(filename) {
// 一般前端的寫法
// return new Promise(function(resolve, reject) {})
const p = new Promise(function(resolve, reject) {
const fs = require('fs')
const options = {
encoding: 'utf8'
}
fs.readFile(filename, options, function(error, content) {
if (error !== null) {
reject(error)
} else {
resolve(content)
}
})
})
return p
}
// 使用 promise 讀取文件就不用寫成回調(diào)的形式了
// 直接按照同步的寫法就好了
// 可以無限 then, 只要你保證上一個 then 返回了東西即可
let promise = readFile('foo.txt')
promise.then(function(content) {
console.log('debug file content', content)
const c = content + ' suffix1'
return c
}, function(error) {
console.log('debug error message', error)
}).then(function(c1) {
console.log('second then', c1)
const c = c1 + ' suffix2'
return c
}).then(function(c) {
console.log('third then', c)
})
console.log('GUA ****** line 46')
// 上面的寫法也可以寫成下面這樣
// 把 reject 的操作放在 catch 里面
promise.then(function(content) {
console.log('debug file content', content)
}).catch(function(error) {
console.log('debug error message', error)
})
// 有時候會碰到批量執(zhí)行異步操作注簿,如果直接用循環(huán) + 調(diào)用函數(shù)的形式會比較麻煩
// 使用 Promise.all 就很方便了
// all 方法是直接掛在 Promise 類上的跳仿,而 then catch 這些方法是掛在原型上
// Promise.all 會把數(shù)組里面所有的 promise 對象都執(zhí)行完
// 再往下調(diào)用
Promise.all(list).then(function(content) {
console.log('Promise.all, content', content)
})
重命名文件的方法
var file = app.$('videoInput').files[0];
// 重命名
var aafile = new File([file], "aa.mp4");
BOM API
屬性 | 說明 |
---|---|
location | 管理 URL(改變 href 屬性就可以跳轉(zhuǎn)頁面) |
navigator | 對象是用來查詢?yōu)g覽器的信息的 例如navigator.userAgent |
history | 對象是用來處理歷史紀錄的 |
screen | 管理屏幕 |
window | 管理瀏覽器所有的東西 |
open(‘url’诡渴,‘_self/_blank’) | 打開一個新窗口 打開自身或另打開 |
close() | 關(guān)閉窗口 |
document.body.scrollTop | 滾輪離頂部距離 |
history.length // 歷史列表中的 url 數(shù)量
history.back() // 相當于點擊后退按鈕
history.forward() // 相當于點前進
history.go(-2) // 相當于點擊兩次后退按鈕
//H5新函數(shù)
var state = {
page: "settings"
}
history.pushState(state, "settings", "/settings")
/*三個參數(shù)分別是
1.自定義對象
2.新頁面的標題, 但是現(xiàn)在還沒有瀏覽器實現(xiàn)這個功能
3.新頁面的地址(/...)
用戶點擊 前進 后退 按鈕的時候, 會觸發(fā) window 的 popstate事件
于是可以在這里操作*/
window.addEventListener("popstate", function(event) {
var state = event.state;
// state 就是 pushState 的第一個參數(shù) 被儲存
console.log('pop state', state)
})
/*還有一個 replaceState 函數(shù), 它的作用和 pushState 一樣, 只是不生成一條歷史紀錄
只能在相同域名下使用*/
DOM API
- DOM 是 HTML 文件
- DOM API 是瀏覽器提供給 JavaScript 操作 html 頁面的交互方式
常用
<input id="id" type="text" value="Gua">
屬性 (元素 .class #id) | 說明 | |
---|---|---|
var omg = document.querySelector( '#id' ) |
獲取 DOM對象 | |
var omgs = document.querySelectorAll('.classname' ) |
獲取DOM對象組 | |
var omgValue = omg .getAttribute( 'value' ) |
獲取 屬性值 | |
omg .setAttribute( 'value' , 'Gua' ) |
修改 屬性值 | |
omg .hasAttribute( 'value' ) |
查詢 是否存在 | |
omg .removeAttribute( 'type' ) |
刪除 某個屬性 | |
var allProperty = omg .attributes |
查找 所有屬性 | |
omg .remove( ) |
整個刪除 元素 | |
omg .dataset.() |
獲取data-()值 | |
var button = document.createElement('button') | 創(chuàng)建 元素 | |
button.innerHTML = '注冊用戶' | 設(shè)置屬性 | |
omg .appendChild(button) |
給一個元素添加子元素 | |
omg .insertAdjacentHTML( 'beforeend' , html ) |
插入 HTML |
insertAdjacentHTML | 標簽 描述 |
---|---|
beforebegin | 開始標記 前 |
afterbegin | 開始標記 后 |
beforeend | 結(jié)束標記 前 |
afterend | 結(jié)束標記 后 |
本地存儲
貯藏:localStorage[
'name'
] = '饅頭'
取出:localStorage['name'
]
電腦本地儲存 5MB Object,只能存字符串,可使用 Json 轉(zhuǎn)字符串
localStorage 沒有過期時間, 要用 clear remove 主動刪除數(shù)據(jù)
貯藏:sessionStorage[
'name'
] = '饅頭'
取出:sessionStorage['name'
]
sessionStorage 的數(shù)據(jù)在用戶關(guān)閉瀏覽器后將被刪除
事件
事件綁定:
區(qū)分元素 > 綁定元素 > 觸發(fā)Event > 操作元素
說明 |
---|
var button = document.querySelector( "#id-div-cont" ) |
// 獲取 元素 |
button .addEventListener( 'click' , callback) |
// 事件 綁定 或 委托 |
常用事件 | 說明 |
---|---|
'focus' | 獲得 焦點 |
'blur' | 失去 焦點 |
'click' | 單擊 |
'dblclick' | 雙擊 |
'mousedown' | 鼠標點下 |
'mousemove' | 鼠標移動 |
'mouseup' | 鼠標抬起 |
'mouseover' | 鼠標懸停 |
'mouseout' | 鼠標移開 |
'keydown' | 按下 某鍵 |
'ended' | 播放結(jié)束 |
submit | 當<form> 提交時觸發(fā) |
change | 當<input><select><textarea> 的內(nèi)容改變時觸發(fā) |
'animationend' | 動畫結(jié)束之后 |
onload | 事件頁面加載時發(fā)生 |
onscroll | 頁面滾動時發(fā)生 |
onresize | 頁面改變大小時發(fā)生 |
事件 event 參數(shù) | 描述 |
---|---|
event.target.parentElement | 父元素 |
event.target | 元素 |
event.target.children | 子元素 |
event.target.parentElement.children | 父子元素 |
Ajax
- 阿賈克斯中 event 事件本身菲语,包含觸發(fā)事件所有內(nèi)容
GET
var ajaxGet = function( ku ) {
var r = new XMLHttpRequest() // 創(chuàng)建 AJAX 對象
r.open( 'GET', ku.url, true ) // 設(shè)置 請求方法 地址
r.onreadystatechange = function() {
if (r.readyState === 4) { // 如果 完成
ku.callback(r.response) // 注冊 響應(yīng)函數(shù) 結(jié)果
}
}
r.send() // 發(fā)送 請求
}
// readyState有4種狀態(tài) 0. 未初始化 1.載入 2.載入完成 3.交互 4.交互完成
var ku = {
url: '/login' , // 地址
callback: function(response) { // 響應(yīng)函數(shù)
console.log(response)
}
}
ajaxGet( ku )
POST
var ajax = function( ku ) {
var r = new XMLHttpRequest( ) // 創(chuàng)建 AJAX 對象
r.open( ku.method, ku.url, true ) // 設(shè)置 請求方法 地址
r.setRequestHeader('Content-Type', ku.ContentType)
r.onreadystatechange = function() {
if (r.readyState === 4) { // 完成
ku.callback(r.response) // 注冊 響應(yīng)函數(shù) 結(jié)果
}
}
r.send( ku.data ) // 發(fā)送 請求
}
var ku = {
method: 'POST', // 請求方法
url: '/login', // 地址
ContentType: 'application/json',// 數(shù)據(jù)格式
data: JSON.stringify({ // 發(fā)送內(nèi)容
username: 'abc',
password: '123',
}),
callback: function(response) { // 響應(yīng)函數(shù)
console.log('result:', response )
}
}
ajax( ku )
http協(xié)議
請求和返回是一樣的數(shù)據(jù)格式妄辩,分為4部分:
1,請求行或者響應(yīng)行
2山上,HTTP Header(請求的 Header 中 Host 字段是必須的眼耀,其他都是可選)
3,\r\n\r\n(連續(xù)兩個換行回車符佩憾,用來分隔Header和Body)
4哮伟,HTTP Body(可選)
請求的格式,注意大小寫(這是一個不包含Body的請求):
原始數(shù)據(jù)如下
'GET / HTTP/1.1\r\nhost:g.cn\r\n\r\n'
打印出來如下
GET / HTTP/1.1
Host: g.cn
r\n(空一行)
jQuery
常用
選擇器 | |
---|---|
$( '.class' ) |
匹配所有 符合元素 返回 數(shù)組 |
$( ' #id, .class ,div ' ) |
組選擇 |
.find( '#id' ) |
向下查找子元素 |
.closest( '.class' ) |
查找 父元素(一直向上 找到為止) |
.parent() | 查找 父元素 |
.next() | 下一個元素 |
.prev() | 上一個元素 |
.children() | 查找 子元素 |
.parent().children() | 查找 父子元素 |
.siblings() | 查找 父子元素(除過 自己) |
.first() | 第一個元素 |
.last() | 最后一個元素 |
.slice( , ) | 同數(shù)組slice()方法一致 |
$('ul.lang li'); // 選出JavaScript妄帘、Python和Lua 3個節(jié)點
$('ul.lang li:first-child'); // 僅選出JavaScript
$('ul.lang li:last-child'); // 僅選出Lua
$('ul.lang li:nth-child(2)'); // 選出第N個元素楞黄,N從1開始
$('ul.lang li:nth-child(even)'); // 選出序號為偶數(shù)的元素
$('ul.lang li:nth-child(odd)'); // 選出序號為奇數(shù)的元素
jQuery對象DOM操作
dom操作修改 | |
---|---|
.text( ) | 取值文本(有參數(shù)則為賦值) |
.html( ) | 取值字符串(有參數(shù)則為賦值) |
.show() | 顯示 |
.hide() | 隱藏 |
.toggle() | 開關(guān) |
.hasClass( ) | 查詢class 返回 ture 或 false |
.addClass('className') | 添加class |
.removeClass( ) | 刪除class |
.removeClass( ) | 刪除class |
.data( ) | 獲取data屬性 |
.width()//.height() | 查詢寬高,填寫參數(shù)是設(shè)置寬高 |
.attr( , ) | 第一個參數(shù)屬性名,查詢(有第二個參數(shù)賦值) |
.removeAttr( ) | 填入?yún)?shù)移除屬性 |
.prop() | 與attr類似,但是處理checked等bool屬性 |
.val() | 表單元素專屬獲取和設(shè)置(填參數(shù))對應(yīng)的value屬性 |
.append( ) | 最末尾 |
.prepend( ) | 最開頭 |
.before( ) | 同級節(jié)點 之前 |
.after( ) | 同級節(jié)點 之后 |
.remove() | 刪除 |
.empty() | 刪除(除過 自己) |
jQuery對象css操作
//jQuery對象有“批量操作”的特點可調(diào)用css對象方便修改對象的CSS
$('#test').css('background-color', 'black').css('color', 'red');
var div = $('#test-div');
div.css('color'); // '#000033', 獲取CSS屬性
div.css('color', '#336699'); // 設(shè)置CSS屬性
div.css('color', ''); // 清除CSS屬性
//css()方法將作用于DOM節(jié)點的style屬性,具有最高優(yōu)先級
jQ 動畫
動畫操作 | |
---|---|
.show('slow') | 顯示(參數(shù)時間1000或者時間描述) |
.hide(3000) | 同上 |
.toggle() | 開關(guān) |
.slideUp() | 窗簾效果的關(guān)(參數(shù)同上) |
.slideDown() | ....開 |
.slideToggle() | 開關(guān) |
.fadeOut() | 淡入(參數(shù)同上) |
.fadeIn() | 淡出 |
.fadeToggle() | 淡入淡出 |
.animate({opacity: 0.25,width: '256px'},3000,callback) | 自定義動畫,三個參數(shù),1變化對象,2時間,3動畫結(jié)束回調(diào)函數(shù) |
.delay(1000) | 暫停動畫 |
.data('id') |
<div data-id='101'> 取data值 |
jQ 事件綁定
function hello() {
alert('hello!');
}
a.click(hello); // 綁定事件
// 10秒鐘后解除綁定:
setTimeout(function () {
a.off('click', hello);
}, 10000);
使用off('click')一次性移除已綁定的click事件的所有處理函數(shù)
無參數(shù)調(diào)用off()一次性移除已綁定的所有類型的事件處理函數(shù)
a.on('click', function () {
alert('Hello!');
})
// 兩者等價(常用下一種)
a.click(function () {
alert('Hello!');
})
//事件委托用法
$( '#id-div-cont' ).on( 'click', '.del', Event )
// 綁定 父元素 #id-div-cont 監(jiān)聽.del(如果點擊的是.del則發(fā)生)
jQ 函數(shù)
each 遍歷
var eve = function(i, eve) {
console.log(i, eve)
}
$('.notePad_one').each( eve )
map 遍歷 返回值
var a = [1, 2, 3, 4, 5]
var eve = function( i ) {
return i * i
}
var b = $.map( a, eve )
// 結(jié)果 b = [1, 4, 9, 16, 25]
//map與each最大區(qū)別是返回值
filter 過濾器
var a = [1, 2, 3, 4, 5]
var eve = function( i ) {
return i % 2 == 1
}
var b = $.grep( a, eve )
// 結(jié)果 b = [1, 3, 5]
jQ Ajax
var request = {
url: '/uploads/tags.json',
type: 'get',
success: function(r) {
console.log(r)
},
error: function() {
console.log(arguments)
}
}
$.ajax(request)
//基礎(chǔ)的jq ajax方法
$.ajax({name:value, name:value, ... })
// jq get方法
$.get("test.php", function(data){
console.log(data);
})
//jq post 方法
$.post(URL,{name:'小明'},function(data,status,xhr),dataType)
Bootstrap
Bootstrap設(shè)置響應(yīng)式的CSS布局
<!--配置bootstrap需要加入以下設(shè)置-->
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
<script src=' jQuery'>` bootstrap 必須引用 jq</script>
布局col
col-(xs,sm,md,lg)每一個div可以加入多個col-?類 叫做混合布局,會根據(jù)屏幕自適應(yīng)布局.
每一橫行都是新的12格,如果父元素8格,子元素還是新的12格
ClassName | 類效果 |
---|---|
col-(xs,sm,md,lg)-(0-12) | 布局:一個屏幕分成12欄網(wǎng)格效果 |
row | 設(shè)置新的一排的布局 |
container | 內(nèi)容居中 |
page-header | 標題下面加一條灰色的線 |
col-(xs,sm,md,lg)-push-(0-12) | 在col-?尺寸上把主體內(nèi)容向右推?個網(wǎng)格寬度 |
col-(xs,sm,md,lg)-pull-(0-12) | 在col-?尺寸上把主體內(nèi)容向左拉?個網(wǎng)格寬度 |
clearfix | 修復(fù)元素浮動的問題 |
col-(xs,sm,md,lg)-offset-(0-12) | 在col-?尺寸把主體內(nèi)容向右偏移?個網(wǎng)格寬度 |
visible-(xs,sm,md,lg) | 在特定尺寸上顯示內(nèi)容 |
hidden-(xs,sm,md,lg) | 在特定尺寸上隱藏內(nèi)容 |
pull-right(left) | 靠右顯示與靠左顯示 |
導(dǎo)航欄navbar
ClassName | 類效果 |
---|---|
navbar | 灰色邊框的條 |
navbar-light(dark) | 亮色背景與暗色背景 |
navbar-default | 條是灰色背景 |
navbar-inverse | 條是暗色背景 |
navbar-fixed-top(bottom) | 導(dǎo)航欄固定在頁面頂部(不滾動) |
navbar-static-top(bottom) | 導(dǎo)航欄固定在頁面頂部(隨頁面滾動) |
navbar-brand | 給標簽添加樣式 |
nav navbar-nav | 給ul添加樣式 |
nav-item | 表示這是導(dǎo)航欄里的一個項目 |
active | 添加灰色的背景 |
glyphicon | 使用小圖標(用span標簽使用) |
glyphicon glyphicon-search | 搜索小圖標 |
form-control | input添加樣式 |
navbar-from | form樣式 |
navbar-left | 向左浮動 |
btn | 按鈕基本樣式 |
btn-primary | 按鈕的一個樣式 |
btn-sm | 按鈕大小 |
navbar-btn | 按鈕邊距 |
navbar-left(right) | 元素靠左(靠右) |
collapse navbar-collaps | 響應(yīng)式導(dǎo)航欄類(div包圍要折疊的導(dǎo)航界面) |
navbar-toggle | 切換顯示隱藏的界面按鈕類 |
data-toggle='collapse' data-target='#(div包圍元素的id)'
|
切換按鈕指定2個data屬性 |
navbar-header | 隱藏后顯示的界面類 |
對話框modal
ClassName | 類效果 |
---|---|
modal-backdrop in | 添加一層暗色半透明的背景 |
data-toggle='modal' data-target='#(對話框id)'
|
給一個按鈕綁定開關(guān)id對話框功能 |
modal fade | 過渡的效果 |
data-dismiss='modal' | 設(shè)置關(guān)閉對話框功能 |
tabindex='-1' | 點擊tab鍵優(yōu)先跳轉(zhuǎn)這個位置 |
data-backdrop='false' | 關(guān)閉自動暗色背景功能 |
'show.bs.modal' | 事件名,對話框顯示時發(fā)生 |
'hide.bs.moda' | 事件名,對話框隱藏時發(fā)生 |
旋轉(zhuǎn)木馬carousel
ClassName | 類效果 |
---|---|
carousel | 旋轉(zhuǎn)木馬組件大類 |
data-ride='carousel' data-interval='?000'
|
自動播放與?s一次 |
data-pause='false' | 默認值hover 鼠標懸浮暫停播放 |
data-wrap='false' | 默認為true 播放結(jié)束循環(huán)播放 |
slide | 過度效果 |
carousel-inner | 放置旋轉(zhuǎn)東西的小類 |
item | 每一個幻燈片項目都放到一組帶item類的容器里 |
item active | 幻燈片開始播放的那個項目的上添加 |
<a href='#(carousel)的id'... |
為幻燈片添加下一張功能 |
left(right) carousel-control | 為a標簽添加向左(右)轉(zhuǎn)換功能的類 |
data-slide='prev(next)' | 為a標簽添加向左(右)轉(zhuǎn)換功能的設(shè)置 |
glyphicon glyphicon-chevron-left(right)
|
左右的小圖標 |
<ol class='carousel-indicators' |
添加幻燈片對應(yīng)小圓點 |
<li data-target='#(id)' data-slide-to='(0)' |
0對應(yīng)第一個項目 |
active | 默認從添加這個類的項目開始旋轉(zhuǎn) |
'slide.bs.carousel' | 事件,播放時觸發(fā) |
'slid.bs.carousel' | 事件,播放完成觸發(fā) |
lodash
lodash 是一個非常實用的 js 工具庫 _是表達符號
lodash 函數(shù)
each
_.each(list(數(shù)組或?qū)ο?, (v, k) => {
// each 方法的兩個參數(shù)
// 如果 list 是 列表抡驼,那么 v 和 k 分別是指 list 的 element/index
// 如果 list 是 對象(字典)鬼廓,那么 v 和 k 分別是指 object 的 value/key
console.log('element and index', v, k)
})
map (舊數(shù)組/對象生成一個新數(shù)組)
const list2(新數(shù)組) = _.map(list1(舊數(shù)組), (v, k) => {
const r = v * v
return r
})
console.log('list2', list2)
filter (遍歷數(shù)組/對象,返回符合判斷函數(shù)中的元素)
var u(符合條件的新數(shù)組) =
_.filter(us(數(shù)組可包含對象), (e) => {
var b = e.score > 70(bool值)
return b
})
console.log('filter u', u)
orderBy (按照條件排序,先按score升序,如果有score一樣的,再按 name降序)
var users = _.orderBy(us, ['score', 'name'], ['asc'(升序), 'desc'(降序)])
console.log('order by users', users)
flatten (減少一層嵌套數(shù)組(只減少一層),也就是可以將二維數(shù)組拍成一維數(shù)組)
var l = [
1,
[2],
[3, [4]],
[5, [6], [7]],
]
var f = _.flatten(l)
console.log('flatten result', f)
compact 剔除數(shù)組中的假值元素(js 中假值元素分別為false null 0 NaN '' undefined
)
var result = _.compact(l(包含假值元素的數(shù)組))
console.log('compact result', result)
**isEqual** isEqual比較兩個對象或者數(shù)組是否相等
var o1 = {
'key': 1,
}
var o2 = {
'key': 1,
}
var result = _.isEqual(o1, o2)
console.log('isEqual result', result)
result (獲取嵌套對象的值)
var o = {
'k1': {
'k2': {
'k3': {
'k4': 'value in nested dict'
}
}
}
}
var path = 'k1.k2.k3.k4'
var result = _.result(o, path)
console.log('result nested result', result)
cloneDeep 深拷貝(改變賦值不影響原函數(shù)的拷貝)
var o = {
'a': [1],
'b': [2],
}
var deep = _.cloneDeep(o)
console.log('deep', deep)
random (返回給定范圍的隨機值)
var a = 10 var b = 20
// 返回 a 和 b 之間的一個整數(shù)
var r1 = _.random(a, b)
console.log('random r1', r1)
//如果指定第三個參數(shù)為 true致盟,這個參數(shù)的意思是指 floating ,那么返回的就是一個浮點數(shù)
var r2 = _.random(a, b, true)
console.log('random r2', r2(浮點數(shù)))
shuffle (返回打亂順序后的數(shù)組)
var l = [1, 2, 3, 4,]
const s = _.shuffle(l)
console.log('shuffle l', s)
vue.js
注意事項
1.確保在初始化根實例之前注冊了組件
- 內(nèi)部使用vue屬性需要使用this
3.要在內(nèi)聯(lián)語句處理器中訪問原生 DOM 事件碎税∮任浚可以用特殊變量$event
把它傳入方法
4.在數(shù)據(jù)變化之后立即使用 Vue.nextTick(callback) == this.$nextTick(callback)
Vue屬性 | 說明 |
---|---|
el | 綁定的id |
data | 儲存的一些屬性 |
methods | 儲存的一些方法(函數(shù)) |
filters | 儲存一些過濾函數(shù) |
computed | 儲存一些計算屬性函數(shù)(存在緩存,一般情況可以用methods替代) |
watch | 數(shù)據(jù)改變時觸發(fā),允許我們執(zhí)行異步操作 |
components | 局部注冊組件屬性 |
props | 子組件要顯式地用 props 選項聲明它期待獲得的數(shù)據(jù) |
template | 組件模板 |
data(組件) | 組件data必須是函數(shù)return出的對象 |
Vue.set(object, key, value) | 將響應(yīng)屬性添加到嵌套的對象上 |
directives | 注冊局部指令 |
beforeCreate | 在實例初始化之后數(shù)據(jù)觀測之前被調(diào)用 |
created | 實例被創(chuàng)建之后被調(diào)用 |
beforeMount | 在掛載開始之前被調(diào)用:相關(guān)的 render 函數(shù)首次被調(diào)用 |
mounted | el 被新創(chuàng)建的 vm.$el 替換,并掛載到實例上去之后調(diào)用該鉤子 |
beforeUpdate | 數(shù)據(jù)更新時調(diào)用雷蹂,發(fā)生在虛擬 DOM 重新渲染和打補丁之前 |
updated | 由于數(shù)據(jù)更改導(dǎo)致的虛擬 DOM 重新渲染和打補丁伟端,在這之后會調(diào)用該鉤子 |
activated | keep-alive 組件激活時調(diào)用 |
deactivated | keep-alive 組件停用時調(diào)用 |
beforeDestroy | 實例銷毀之前調(diào)用。在這一步萎河,實例仍然完全可用 |
destroyed | Vue 實例銷毀后調(diào)用 |
this.$on('事件名字',function(r){console.log(r)})
//監(jiān)聽自定義事件 第一個事件名字 第二個參數(shù)觸發(fā)函數(shù)
this.$emit('事件名字','輸入值')
//觸發(fā)自定義事件 第一個參數(shù)名字 第二個參數(shù)函數(shù)參數(shù)
常用vue指令
指令 | 說明 |
---|---|
v-if(show) | true顯示 false隱藏 |
v-else | 跟v-if并列的話,v-if隱藏它顯示 |
v-bind:() | 綁定某個屬性,v-bind可隱藏 :()
|
v-text | 純文本內(nèi)容顯示 |
v-html | 渲染顯示 |
v-on:click | 綁定點擊click事件也可以用@click
|
v-model | input默認值(復(fù)選單選按鈕,選擇列表) 修改后值隨之改變 |
v-once | 渲染的值不發(fā)生變化 |
v-for |
( ,index)in( ) 循環(huán)取值 index為序號,也可以是循環(huán)整數(shù) |
v-for |
(value,key,index)in(object) 也可以循環(huán)取值object |
key | 為vue指定唯一性key值,可以防止切換的重復(fù)組件被復(fù)用 |
is |
<tr is="my-row"></tr> 將tr替換為my-row模板 |
scope | 值對應(yīng)一個臨時變量名荔泳,此變量接收從子組件中傳遞的 props 對象 |
ref | 可以使用 ref 為子組件指定一個索引 IDnew Vue({ el: '#id' }).$refs.(ID)
|
inline-template | 組件將把它的內(nèi)容當作它的模板,而不是把它當作分發(fā)內(nèi)容 |
:duration="{ enter: 500, leave: 800 }" |
定義動畫持續(xù)時間 |
html代碼事例
<div id='app'>
<div v-if(show)='welcome' v-bind:title='title' v-once>
<!--1.顯示隱藏元素(if是添加show是改變display) 2.v-bind(可省略)綁定title屬性為'title' 3.message值不隨著改變-->
{{ loggedIN? message : '請先登錄 '}}
<!--loggedIN值為true hello false 請先登錄 -->
</div>
<div v-else> //v-else-if也可以使用
Now you don't
</div>
<!--if為false時顯示 -->
<div v-text='message'></div> <!--message純文本顯示 -->
<div v-html='message'></div> <!--渲染顯示 -->
<!--觸發(fā)的事件調(diào)用 event.preventDefault()-->
<form v-on:submit.prevent="onSubmit"></form>
<form v-on:submit.prevent></form>
<!-- 點擊事件將只會觸發(fā)一次 -->
<a v-on:click.once="doThis"></a>
<!-- 阻止單擊事件冒泡,可以串聯(lián)按照順序執(zhí)行 -->
<a v-on:click.stop.once="doThis"></a>
<!-- 只當事件在該元素本身(比如不是子元素)觸發(fā)時觸發(fā)回調(diào) -->
<div v-on:click.self="doThat">...</div>
<!-- 在 "change" 而不是 "input" 事件中更新 -->
<input v-model.lazy="msg" >
<!-- 自動轉(zhuǎn)換輸入的字符為數(shù)字 -->
<input v-model.number="age" type="number">
<!-- 自動過濾用戶輸入的首尾空格 -->
<input v-model.trim="msg">
<input v-model='message'>
<!--input框中默認為message 修改此值即修改data里message值 -->
<ol>
<li v-for='comment in comments //(value, key, index) in object)'>
{{ comment.content }}
</li>
<!--循環(huán)comments數(shù)組創(chuàng)建li 可通過app.comments.push({content:'lalala'})添加新的li元素-->
</ol>
<!--組件化演示 -->
<comment v-for='comment in comments' v-bind:comment='comment'></comment> <!--效果同上li -->
<div>
js代碼事例
//定義全局組件化
Vue.component('comment', { //聲明組件名字
template: '<li> {{ comment.content }} </li>', //組件模板
// '<slot> :) </slot>' 內(nèi)容分發(fā)
//包含slot標簽的div沒有內(nèi)容時顯示:) 有內(nèi)容時隱藏
props: ['comment'], //組件傳入的對象
/* prosp: {
comment: {
type:String,
default: 'button', 默認值
required: true, 必須有值
validator (value) {
return value.length > 3 值長度大于 3
} prosp的另一種對象形式
} 可以過濾傳入對象的屬性
}*/
methods: {
logMessage() {
console.log(this.message)
} //組件化中也可以直接定義data與methods
}
})
var vm = new Vue({
el: '#app', //選擇應(yīng)用vue的選擇器,等效于vm.$mout('#app')
methods: {
logMessage() {
console.log(this.message)
}
},
data: {
message: 'hello',
title: 'hello', //鼠標放上去顯示
welcome: true, //true顯示這個元素 false隱藏
loggedin: false,
comments: [
{content: 'yayaya1'},
{content: 'yayaya2'},
{content: 'yayaya3'},
]
},
created: function () {
// 實例被創(chuàng)建之后調(diào)用
console.log('hello word~')
}
})
vue-router.js
<div id="app">
<h1>Hello App!</h1>
<p>
<!-- 使用 router-link 組件來導(dǎo)航. -->
<!-- 通過傳入 `to` 屬性指定鏈接. -->
<!-- <router-link> 默認會被渲染成一個 `<a>` 標簽 -->
<router-link to="/foo">Go to Foo</router-link>
<router-link to="/bar">Go to Bar</router-link>
<!-- 渲染模板里面根據(jù)路由再次嵌套渲染-->
<router-link to="/user/foo/profile">/user/foo/profile</router-link>
</p>
<!-- 路由出口 -->
<!-- 路由匹配到的組件將渲染在這里 -->
<router-view></router-view>
</div>
const Foo = { template: '<div>foo</div>' }
const Bar = { template: '<div>bar</div>' }
const User = { //動態(tài)參數(shù)值會被設(shè)置到 this.$route.params
template: '<div>User {{ $route.params.id }}</div>'
}
const User = {
template: `
<div class="user">
<h2>User {{ $route.params.id }}</h2>
<router-view></router-view>
</div>
`
}
const router = new VueRouter({
routes: [
{ path: '/foo', component: Foo },
{ path: '/bar', component: Bar },
// 動態(tài)路徑參數(shù) 以冒號開頭
{ path: '/user/:id', component: User,
//自路由再次渲染
children: [ { path: 'profile', component: UserProfile },
{ path: 'posts', component: UserPosts } ]
}
]
})
const app = new Vue({
router
}).$mount('#app') //$mount('#app')相當于 el:'#app'
router.push
會向history
棧添加一個新的記錄點擊瀏覽器后退按鈕回到之前的 URL
router.replace
與router.push
很像虐杯,唯一的不同就是玛歌,它不會向history
添加新記錄
router.go
參數(shù)是一個整數(shù),意思是在 history 記錄中向前或者后退多少步
{ path: '/a', redirect: { name: 'foo' }}
重定向的意思是擎椰,當用戶訪問 /a時支子,URL 將會被替換成 /b,然后匹配路由為 /b
{ path: '/a', component: A, alias: '/b' }
/a 的別名是 /b达舒,意味著值朋,當用戶訪問 /b 時背蟆,URL 會保持為 /b难咕,但是路由匹配則為 /a窑业,就像用戶訪問 /a 一樣
router.beforeEach((to, from, next) => {
// 全局注冊的鉤子 3個參數(shù) 去哪 哪來 干嘛
})
beforeEnter: (to, from, next) => {
//組件內(nèi)部的鉤子 效果一樣
}
beforeRouteEnter (to, from, next) //渲染該組件的對應(yīng)路由被 confirm 前調(diào)用 無this
beforeRouteUpdate (to, from, next) //在當前路由改變恋沃,但是該組件被復(fù)用時調(diào)用
beforeRouteLeave (to, from, next) //導(dǎo)航離開該組件的對應(yīng)路由時調(diào)用
scrollBehavior (to, from, savedPosition) {
// return 期望滾動到哪個的位置
}
node.js
node(fs)專屬配置環(huán)境工具
var fs = require('fs') //加載fs庫賦值于fs
fs.readdir('.', (err,files) => { // .當前目錄..上一級
if(err != null) {
console.log(err)
} else {
console.log('files', files)
}
}) // 讀取當前目錄下的文件(readdirSync同步版本)
fs.rmdir('目錄名',(err) => { })
//刪除目錄文件(目錄必須為空)
fs.unlink(file, (err) => { })
// 刪除file文件
fs.mkdir('目錄名字',(err) => { })
//創(chuàng)建目錄
fs.readdir('目錄',(err, files) => {})
//讀取目錄內(nèi)容
fs.writeFile('file', '你好 Node.js', (err) => {})
// 創(chuàng)建file文件
fs.appendFile('file', '你好 python', (err) => {})
//添加文件內(nèi)容
fs.readFile('message.txt', 'utf8', (err, data) => {
console.log('讀取了文件', data)
}) // 讀取文件
fs.rename('原名字','新名字',(err) => {})
//重命名文件
var fileReadStream = fs.createReadStream('文件名')
var fileWriteStream = fs.createWriteStream('文件名')
//讀取文件流 寫入文件流
fileReadStream.pipe(fileWriteStream)
//pipe好像管道,可以把讀取流接入寫入流 效果類似write
//pipe可以鏈式使用
fileReadStream.pipe(fileWriteStream).pipe(...)
var i = 0
fileReadStream.on('data',(chunk) => {
console.log(`${i++}接受到:${chunk.length}`)
fileWriteStream.write(chunk) //寫入每次內(nèi)容
}) //讀取次數(shù),每次長度
fileReadStream.on('end',() => {})
//讀取結(jié)束事件
fileReadStream.on('error',(err) => {})
//發(fā)生錯誤事件
express庫用于后端開發(fā)
// 引入 express 并且創(chuàng)建一個 express 實例賦值給 app
var express = require('express')
var app = express()
app.use(express.static('static'))
//封裝一個函數(shù)
var sendHtml = function(path, response) {
var fs = require('fs') // path是讀取文件
var options = { // options解碼環(huán)境
encoding: 'utf-8'
}
fs.readFile(path, options, function(err, data){
console.log(`讀取的html文件 ${path} 內(nèi)容是`, data)
response.send(data)
})
}
// 用 get 定義一個給用戶訪問的網(wǎng)址
// request 是瀏覽器發(fā)送的請求
// response 是我們要發(fā)給瀏覽器的響應(yīng)
app.get('/', function(request, response) {
var path = 'index.html'
sendHtml(path, response)
})
app.get('/todo/all', function(request, response) {
var todos = [
{
id: 1,
task: '吃飯',
}
]
var r = JSON.stringify(todos)
response.send(r)
})
app.post('/todo/add', function(request, response) {
// request.body 這個函數(shù)可以獲取前端post的數(shù)據(jù)
})
//打開端口服務(wù)器
// listen 函數(shù)的第一個參數(shù)是我們要監(jiān)聽的端口
// 這個端口是要瀏覽器輸入的
// 默認的端口是 80
// 所以如果你監(jiān)聽 80 端口的話,瀏覽器就不需要輸入端口了
// 但是 1024 以下的端口是系統(tǒng)保留端口休建,需要管理員權(quán)限才能使用
var server = app.listen(8081, function () {
var host = server.address().address
var port = server.address().port
console.log("應(yīng)用實例盛杰,訪問地址為 http://%s:%s", host, port)
})
node的一些庫
//sync-request 用于下載網(wǎng)頁
var request = require('sync-request')
//cheerio 用于解析網(wǎng)頁數(shù)據(jù)
var cheerio = require('cheerio')
//模塊中函數(shù)輸出
module.exports = 函數(shù)名
git
git init //創(chuàng)建git倉庫
git add (文件名) //添加文件
git commit -m "改動說明" //上傳改動
git status //查詢倉庫狀態(tài)
git diff () //查詢文件變動
git log //查詢版本改動
git log --pretty=oneline //格式化顯示版本改動狀態(tài)
git reset --hard HEAD^ //HEAD當前版本 ^上個版本 ^^上2個版本 HEAD-100 上100個版本
git reset --hard (版本號(可只寫幾個開頭)) //回滾到指定版本
git reflog //記錄每次操作
git checkout -- () //文件回滾到最后一次add或commit狀態(tài)
git reset HEAD () //撤銷最后一次的git add
git rm () //刪除文件
git checkout -b dev //創(chuàng)建并切換為dev分支
git branch //查看所有分支
git checkout master //切換分支到master
git merge dev //合并指定分支(dev)到當前分支
git branch -d(D) dev //刪除(強制刪除)dev分支
git stash git stash pop //儲存目前工作現(xiàn)場翼闽,讀取禽捆。笙什。。
git remote -v //顯示遠程倉庫信息
git push (origin branch-name) //本地推送分支到遠程倉庫
git branch --set-upstream (branch-name origin/branch-name)
// 建立本地分支和遠程分支的關(guān)聯(lián)
git tag (name) //打標簽
git tag //查看所有標簽
git tag (v1.0) (提交id) //打歷史標簽
git show (name) //顯示對應(yīng)標簽說明
git tag -a <tagname> -m "blablabla..." //添加標簽說明
git tag -d (name) //刪除本地標簽
git push origin :refs/tags/<tagname> //刪除一個遠程標簽
git push origin <tagname> //推送一個本地標簽
git push origin --tags //推送全部未推送過的本地標簽
//忽略某些文件時胚想,需要編寫.gitignore
git config --global alias.(co) checkout //配置簡化git命令checkout為co
gulp
創(chuàng)建gulpfile.js文件
var gulp = require('gulp') //引入gulp
gulp.task('images', function () {
return gulp.src('images/*.png').pipe(gulp.dest('dist/images'))
})
//創(chuàng)建images函數(shù)琐凭,將images下所有png格式圖片復(fù)制到dist/images文件下
var sass = require('gulp-sass') //編譯sass為css
var connect = require('gulp-connect')
gulp.task('server', function() {
connect.server({
root: 'dist'
})
})
//創(chuàng)建本地服務(wù)器監(jiān)視dist文件下內(nèi)容
var concat = require('gulp-concat'); //合并
var uglify = require('gulp-uglify'); //壓縮js文件
var rename = require('gulp-rename'); //重命名文件
gulp.task('scripts', function () {
return gulp.src(['javascripts/**/*.js',''])
.pipe(concat('vendor.js'))
.pipe(uglify())
.pipe(gulp.dest('dist/js'));
});
//合并文件,取名vendor.js壓縮后放在dist/js下
var minifyCSS = require('gulp-minify-css');
// 壓縮css文件 minifyCSS()
var imagemin = require('gulp-imagemin');
//壓縮圖片體積 imagemin()
var browserSync = require('browser-sync').create();
// 游覽器同步
// 靜態(tài)服務(wù)器
gulp.task('browser-sync', function() {
browserSync.init({
server: {
baseDir: "./"
}
});
});
// 代理
gulp.task('browser-sync', function() {
browserSync.init({
proxy: "你的域名或IP"
});
});
npm install browser-sync --save-dev
//安裝browser-sync
browser-sync start --server forest --files "forest/index.html, forest/css/*.css"
//監(jiān)視forest文件夾下文件
--tunnel
//使外網(wǎng)也可以訪問
browser-sync start --proxy localhost:9090
//監(jiān)視指定代理服務(wù)器
// 直接使用browser-sync
browser-sync start --server --files "css/*.css, *.html"
webpack
webpack (原.js) (處理后.js)
module.exports = 'zh is boss!' //name.js
var name = require('./name') //引入name.js
npm install css-loader // 處理css文件
npm install style-loader // 應(yīng)用css文件
require('style!css!./css/*.css') //引入css文件
webpack --devtool source-map //生成可source調(diào)試的js
npm install webpack-dev-serve //生成開發(fā)用服務(wù)器
webpack-dev-server --inline --hot //模塊熱更新監(jiān)控
//配置webpack文件
新建一個名為webpack.config.js的文件
module.exports = {
devtool: 'eval-source-map',//配置生成Source Maps
entry: __dirname + "/app/main.js",//已多次提及的唯一入口文件
output: {
path: __dirname + "/public",//打包后的文件存放的地方
filename: "bundle.js"http://打包后輸出文件的文件名
}
devServer: {
contentBase: "./public",//本地服務(wù)器所加載的頁面所在的目錄
colors: true,//終端中輸出結(jié)果為彩色
historyApiFallback: true,//不跳轉(zhuǎn)
inline: true//實時刷新
}
}
一些常用函數(shù)/數(shù)據(jù)
循環(huán)
for (var i = 0; i < iterable.length; i++) {
iterable[i]
}
var i = 0
while(i<iterable.length) {
function語句
i += 1
}
arr.forEach(function(iteam, index, array)
for (i of iterable) { i } // i = 值
for (i in iterable) ( iterable[i] } // i = 下標
break 結(jié)束單次循環(huán)
continue 語句可以跳過單次循環(huán)
常用函數(shù)
var log = function() {
console.log.apply(console, arguments)
//alert( )
}
//測試函數(shù)情況
var ensure = function( def, result, message ) {
if( JSON.stringify( def ) !== JSON.stringify( result ) ) {
log('錯誤', message)
}
}
//測試函數(shù)正確
var e = function(selector) {
return document.querySelector(selector)
}
// 綁定元素
var appendHtml = function(element, html) {
element.insertAdjacentHTML('beforeend', html)
}
//加入html字符串
var toggleClass = function(element, className) {
if (element.classList.contains(className)) {
element.classList.remove(className)
} else {
element.classList.add(className)
}
}
// 開關(guān)(className)
var removeClassAll = function(className) {
var selector = '.' + className
var elements = document.querySelectorAll(selector)
for (var i = 0; i < elements.length; i++) {
var e = elements[i]
e.classList.remove(className)
}
}
//批量刪除className
var bindEvent = function(element, eventName, callback) {
element.addEventListener(eventName, callback)
}
//綁定事件
var bindAll = function(selector, eventName, callback) {
var elements = document.querySelectorAll(selector)
for(var i = 0; i < elements.length; i++) {
var e = elements[i]
bindEvent(e, eventName, callback)
}
}
//批量綁定事件
var time = function( z ) {
if (z === undefined) { z = new Date() }
var han = '日一二三四五六'
var Year = z.getFullYear()
var Month = z.getMonth() + 1
var Day = z.getDate()
var Hour = z.getHours()
var Minute = z.getMinutes()
var Second = z.getSeconds()
var Week = han[z.getDay()]
if ( String(Month).length === 1) {
Month = '0' + Month
}
return `${Year}年${Month}月${Day}日 ${Hour}時${Minute}分${Second}秒 星期${Week}`
}
time( )
//時間函數(shù) 括號里輸入時間對象 否則為當前時間
// (new Date()).getTime()把時間轉(zhuǎn)換為當前毫秒計算事件 常用于倒計時
//可通過new Date('2017/6/10,10:30:30')的格式來設(shè)置時間
參數(shù)說明
名稱 | 秒懂釋義 |
---|---|
iterable | 可迭代對象 |
path | 路徑 |
url | 網(wǎng)址 |
src | 需暫停加載(比如script img) 引用的意思 |
href | 不需暫停加載(比如link a ) 跳轉(zhuǎn)的意思 |
pattern | 正則表達式 |
property | 屬性 |
arguments | 參數(shù) |
event | 事件 event.target |
clientX clientY | 鼠標 |
Math 數(shù)學
屬性 | 說明 | 舉栗 |
---|---|---|
floor( x ) | 返回 <= x 整數(shù) 向下取整 | ( -2.1 ) = -3 |
ceil( x ) | 返回 >= x 整數(shù) 向上取整 | ( -2.1 ) = -2 |
round( x ) | 返回 x 四舍五入 | ( 5.4 ) = 5 |
abs( x ) | 返回 x 絕對值 | |
random( ) | 生成 0 - 1 隨機小數(shù) | 隨機取數(shù)主要操作 |
parseInt( ) | 取整數(shù) |
邏輯符號
與 | 或 | 非 |
---|---|---|
&& | | | !! |
and | or | not |
定時器
a是執(zhí)行函數(shù) b是時間(例如1000)
名稱 | 作用 | 例子 |
---|---|---|
setInterval | 間隔型 | b秒執(zhí)行一次setInterval(a,b) |
setTimeout | 延時型 | 只執(zhí)行一次 |
clearInterval | 關(guān)閉間隔型 | |
clearTimeout | 關(guān)閉延時型 |
offsetLeft 距離左邊的距離 用于做無縫滾動
類型
屬性 | 說明 |
---|---|
typeof( object ) | 判斷 類型 |
String( number ) | 數(shù)字 轉(zhuǎn) 字符串 |
Number( string ) | 字符串 轉(zhuǎn) 數(shù)字 |
RegExp 正則表達式
- 語法:/
Pattern
/Property
|Property|說明|
|:-:|:-:|
|/i|無視大小寫|
|/g|全局匹配|
|/m|多行匹配 |
|/img|組合使用|
- 常用
正則表達式 | 說明 |
---|---|
/[A-Z]|[a-z]/img | 所有字母 |
/[0-9]/img | 所有數(shù)字 |
- 編譯:new RegExp(
Pattern
,Property
)
var name = '饅頭'
var re = new RegExp( `${name}`, 'img' ) //加變量
轉(zhuǎn)義符
轉(zhuǎn)義符 | 說明 |
---|---|
\n |
換行 |
\t |
TAB |
\\ |
反斜杠 |
\' |
單引號 |
\" |
雙引號 |
注釋
注釋 | 快捷鍵 CTRL + / | 單行 |
---|---|---|
JavaScript |
// JS |
|
CSS |
/* CSS */
|
|
HTML |
<!-- HTML -->
|
|
Python |
``` Python ```
|
# Python |
編碼
ASCII:2進制8字節(jié)表示 Base64:2進制6字節(jié)
|ASCII - Unicode 編碼|說明|
|:-: |:-: |
|'Aa'
.charCodeAt(0
) === 65|0
下標|
|String.fromCharCode(65
) === "A"|65
ASCII碼|
|(10
).toString(2
) === "1010"|進制轉(zhuǎn)換|
參考資料:
書籍
《Head First HTML 與 CSS》第2版 ;
《JavaScript 語言精粹》;
《JavaScript 高級程序設(shè)計》;
《編碼》;《計算機程序的構(gòu)造和解釋》;SICP 解題集
《深入理解計算機系統(tǒng)》;
《算法導(dǎo)論》;《編程珠璣》;《程序設(shè)計語言》;《代碼大全》;
網(wǎng)絡(luò)
基礎(chǔ)教程:
計算機科學和Python編程導(dǎo)論
計算機科學cs50
計算機程序設(shè)計
算法導(dǎo)論
編程語言
英語學習