我的程序員入門手冊

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-shrinkflex-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| 修改
|delete dict ['大學生']| 刪除
|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.確保在初始化根實例之前注冊了組件

  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.replacerouter.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ò)

文檔:MDN /w3school
教程:廖雪峰/寧皓網(wǎng)/慕課網(wǎng)


基礎(chǔ)教程:
計算機科學和Python編程導(dǎo)論
計算機科學cs50
計算機程序設(shè)計
算法導(dǎo)論
編程語言
英語學習

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末浊服,一起剝皮案震驚了整個濱河市统屈,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌牙躺,老刑警劉巖鸿吆,帶你破解...
    沈念sama閱讀 212,718評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異述呐,居然都是意外死亡,警方通過查閱死者的電腦和手機蕉毯,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,683評論 3 385
  • 文/潘曉璐 我一進店門乓搬,熙熙樓的掌柜王于貴愁眉苦臉地迎上來思犁,“玉大人,你說我怎么就攤上這事进肯〖ざ祝” “怎么了?”我有些...
    開封第一講書人閱讀 158,207評論 0 348
  • 文/不壞的土叔 我叫張陵江掩,是天一觀的道長学辱。 經(jīng)常有香客問我,道長环形,這世上最難降的妖魔是什么策泣? 我笑而不...
    開封第一講書人閱讀 56,755評論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮抬吟,結(jié)果婚禮上萨咕,老公的妹妹穿的比我還像新娘。我一直安慰自己火本,他們只是感情好危队,可當我...
    茶點故事閱讀 65,862評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著钙畔,像睡著了一般茫陆。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上擎析,一...
    開封第一講書人閱讀 50,050評論 1 291
  • 那天簿盅,我揣著相機與錄音,去河邊找鬼叔锐。 笑死挪鹏,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的愉烙。 我是一名探鬼主播讨盒,決...
    沈念sama閱讀 39,136評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼步责!你這毒婦竟也來了返顺?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,882評論 0 268
  • 序言:老撾萬榮一對情侶失蹤蔓肯,失蹤者是張志新(化名)和其女友劉穎遂鹊,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蔗包,經(jīng)...
    沈念sama閱讀 44,330評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡秉扑,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,651評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片舟陆。...
    茶點故事閱讀 38,789評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡误澳,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出秦躯,到底是詐尸還是另有隱情忆谓,我是刑警寧澤,帶...
    沈念sama閱讀 34,477評論 4 333
  • 正文 年R本政府宣布踱承,位于F島的核電站倡缠,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏茎活。R本人自食惡果不足惜昙沦,卻給世界環(huán)境...
    茶點故事閱讀 40,135評論 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望妙色。 院中可真熱鬧桅滋,春花似錦、人聲如沸身辨。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,864評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽煌珊。三九已至号俐,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間定庵,已是汗流浹背吏饿。 一陣腳步聲響...
    開封第一講書人閱讀 32,099評論 1 267
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留蔬浙,地道東北人猪落。 一個月前我還...
    沈念sama閱讀 46,598評論 2 362
  • 正文 我出身青樓,卻偏偏與公主長得像畴博,于是被迫代替她去往敵國和親笨忌。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,697評論 2 351

推薦閱讀更多精彩內(nèi)容

  • 一:什么是閉包俱病?閉包的用處官疲? (1)閉包就是能夠讀取其他函數(shù)內(nèi)部變量的函數(shù)。在本質(zhì)上亮隙,閉包就 是將函數(shù)內(nèi)部和函數(shù)外...
    xuguibin閱讀 9,556評論 1 52
  • 1.幾種基本數(shù)據(jù)類型?復(fù)雜數(shù)據(jù)類型?值類型和引用數(shù)據(jù)類型?堆棧數(shù)據(jù)結(jié)構(gòu)? 基本數(shù)據(jù)類型:Undefined途凫、Nul...
    伯納烏的追風少年閱讀 25,801評論 2 46
  • 哪個專業(yè)的不學數(shù)學维费? 來,你過來,我保證不打你 數(shù)學這個磨人的小妖精 自打十幾年前與她相遇犀盟,就一直沒能把她甩掉 這...
    一起求職閱讀 25,371評論 0 0
  • 01 幾天前且蓬,有個96年的師妹跟我微信語音。她說题翰,自己很迷茫恶阴,很害怕。馬上就要畢業(yè)了豹障,可是她卻一點都不開心冯事。 大四...
    怒怒同學閱讀 678評論 1 8
  • 1976年春昵仅。 不知從什么時候開始,我身上開始癢癢起來累魔。從最初的小范圍部位摔笤,到后來的雙手, 雙腳,...
    陳玉生閱讀 1,072評論 0 1