目前市場上基本有4大內核javascript
Trident 典型表明IE瀏覽器,網頁的標準兼容性很差css
Gecko 典型表明火狐瀏覽器 功能強大html
Webkit 典型表明谷歌瀏覽器,基本安卓和蘋果手機上都是這個前端
Presto Opera瀏覽器,這個在市場上份額不多,可是linux系統上很完美vue
!important 這個最高級html5
color:blue !important;java
style 優先級第二react
style="color:red"jquery
id 優先級第三linux
#color{color:red}
:nth-child(3)選擇符 優先級第四
p:nth-child(3)
類選擇符 優先級第五
.color{color:red}
標籤選擇符 優先級第六
div{color:red}
通配符選擇符 優先級第七
*{margin:0;padding:0}
html5新增長的標籤,很語義化
重要的標籤
新增長的表單新屬性
placehplder 提示
required 必填
tel 電話
date 日期
number 數字
color 顏色
樣式
border-radius 圓角
box-shadow 陰影
background-size 北京圖片尺寸
text-shadow 文本陰影
linear-gradient 線性漸變
動畫
單位deg
rotate(x) 旋轉
scale 縮放
單位是數字
元素x和y方向均縮放a倍
transform: scale(a);
元素x方向縮放a倍,y方向不變
transform: scaleX(a);
-x方向不變,元素y方向縮放b倍
translate 平移
單位px
元素x方向位移a,y方向位移b
transform: translate(a, b);
元素x方向位移a,y方向不變
transform: translateX(a);
元素y方向位移b,x方向不變
transform: translateY(b);
skew() 傾斜
單位 deg
####transition 過渡
transition-property
transition-duration
transition-delay
animation-name
動畫名字
animation-duration
動畫運行總時間
animation-delay
動畫延遲多長時間
animation-iteration-count
動畫執行次數,也能夠循環執行 infinite
定義一個動畫 ,最後動畫完成必定要100%
@-webkit-keyframes 動畫名字{0%{}50%{}100%{}}
display: flex;
flex
flex-direction 項目的排列方向
flex-wrap 決定換不換行
justify-content 對齊方式
align-items 對齊方式
var a=10; function fe(){ var a=666; //私有變量 console.log(a); } a=10000; //全局 fe() //666 私有的變量受保護,沒有被全局影響 console.log(a) //10000
es5 繼承就是修改原型鏈
es6 a繼承b的一些屬性和方法
class a extends b{ constructor(props){ //調用實現父類的構造函數 super(props); } }
onclick
點擊事件
onmouseover
鼠標滑進
onmouseoute
鼠標劃出
onload
頁面加載完成
onkeydown
鍵盤按下
onkeyup
鍵盤彈起
onfocus
獲取焦點
onblur
失去焦點
onchange
用戶改變input輸入或者select下拉框改變
oninput
文本框中輸入就執行
ondblclick
雙擊
onscroll
滾動
onresize
瀏覽器的窗口重置大小就發生
onselect
文本被選中
onclick(event)
觸發事件的元素節點
event.target
阻止當前事件 e.cancelBubble=true;
event.stopPropagation()
阻止默認行爲
e.preventDefault()
RegExp
匹配三個數字
new RegExp("/\d{3}$/")
search()
檢索字符串開始的位置
-match()
value值.match(正則表達式)
test()
正則表達式.test(value值)
json格式
{},{'':[{},{}]},[{},{}]等
將字符串轉爲json對象
JSON.parse()
將json對象轉爲字符串
JSON.stringify()
建立一個標籤
document.createElement('div')
獲取元素 -根據id或者class獲取元素
獲取父元素
ele.parentNode
獲取子元素
ele.children
兼容寫法
var ele.firstElementChild||ele.children[0];
獲取當前元素的第一個子元素
ele.firstChild
獲取當前元素的最後一個子元素
頭部添加子元素
刪除子元素
屬性操做
判斷有沒有這個類
ele.hasAttribute('class')
移除屬性
ele.removeAttribte('class')
-獲取屬性
-設置屬性
ele.setAttribute('class','值')
設置值
innerHTML 內部html
innerText 內部文本
outerHTML 外部HTML
outerText 外部文本
window.history.go(-1) 返回上一個窗口頁面
setInterval 循環執行計時器
clearInterval 暫停執行
setTimeout 定時執行一次
clearTimeout 暫停執行
location.href 跳轉頁面
同源策略
域名
協議
端口
違法上面的一個不一樣,就叫跨域
jsonp
動態建立script請求,src寫連接
jquery的$ajax
fetch ,跨域和不跨域都不用設置
let myHeaders = new Headers({ 'Access-Control-Allow-Origin': '*', 'Content-Type': 'text/plain' }); fetch(url, { method: 'GET', headers: myHeaders, mode: 'cors' }) .then((res) => { // TODO })
動態建立標籤,而後插到body結束標籤後
(function() { var s = document.createElement('script'); s.type = 'text/javascript'; s.async = true; s.src = 'http://yourdomain.com/script.js'; var x = document.getElementsByTagName('script')[0]; x.parentNode.insertBefore(s, x); })();
學習職業生涯不是天天重複你絕不費力的事情,
學會溝通,明確描述本身的問題,並大膽說出本身解決的思路, 調試現象,溝通和請教的時候態度謙虛點不是錯,這是基本禮貌,學會 聆聽別人的見解。
學會梳理本身技術結構,前端不止頁面,後端也屬於前端的一種技術,說 這句話不過度,前端愈來愈複雜,如今應該是全端了,後端不在侷限於後端人員 學會接受市場變化,多學習對你職業發展有利的技術
學習應該是一種習慣,自主不討厭的進行,這不該該是一種 逼迫,應該是一種習慣,不該該有任何埋怨,由於學習是提升你更多了一種認知 ,工做不是應付完成就行,多思考性能優化問題,多重方案的優缺點
.content{ display: flex; height: 20px; border:1px solid #eeeeee; } .left{ width: 100px; height: 20px; flex-grow: 0; flex-shrink: 0; flex-basis: 100px; background: red; } .center{ flex: 1; } .right{ width: 100px; height: 20px; flex-grow: 0; flex-shrink: 0; flex-basis: 100px; background: red; }
.content{ width: 100%; height: 20px; border:1px solid #eeeeee; } .content:after{ display: block; height: 0; clear: both; } .left{ width: 100px; height: 20px; float: left; background: red; } .center{ width:-webkit-calc(100% - 200px); width:-moz-calc(100% - 200px); width:calc(100% - 200px); height: 20px; float: left; } .right{ width: 100px; height: 20px; float: left; background: red; }
<div style="width:100%; margin:0 auto;"> <div style="width:200px; float:right; background-color:#960">這是右側的內容 固定寬度</div> <div style="width:150px; float:left; background:#6FF">這是左側的內容 固定寬度</div> <div style="margin-left:150px;margin-right:200px; background-color:#9F3">中間內容,自適應寬度</div> </div>
.left,.right{ position: absolute; top:0; width: 200px; height: 20px; background: red; } .left{ left: 0; } .center{ margin: 0 200px; width: 100%; } .right{ right: 0; }
.content{ width: 100%; height: 20px; border:1px solid #eeeeee; display: flex; } .left{ width:100px; height: 20px; flex: 0 0 100px; background: red; } .right{ flex:1; }
id選擇器 (#myid)
類選擇器 (.className)
標籤選擇器 (div)
相鄰選擇器 (h1+p)
子選擇器 (ul>li)
後代選擇器 (li a)
通配符選擇器 (*)
屬性選擇器 (input[type="text"])
僞類選擇器 (a:hover,li:nth-child())
僞類
:active
鼠標點擊,增長特效,鼠標鬆開,特效消失,多用在按鈕上
:hover
鼠標劃入標籤,增長特效,鼠標鬆開,特效消失
:focus
咱們點擊元素後想一直擁有某些樣式,多用於input標籤有焦點時候
:first-child
對元素第一個子元素添加樣式
:nth-child(index)
對元素第幾個添加樣式
:before和after
多用於消除元素浮動
clear:both
結尾處加空div標籤設置clear:both
父級標籤訂義僞類:after給樣式來消除
.clearfloat:after{ display:block; clear:both; content:""; visibility:hidden; height:0; } //針對IE .clearfloat{ zoom:1 }
父級div設置overflow:hidden
父級div定義display:table
div{ width:100%; height:100%: position: fixed; display:table-cell; vertical-align:center; } img{ width:100px; height:100px }
div { width:100%; height:500px; position:relative; } img{ width:100px; height:100px; position:absolute; top:50%; left:50%; margin-top:-50px; margin-left:-50%; }
.div{ width:100%; height:100%; border:1px solid black; position: fixed; background-color: rgba(0,0,0,0.5); } img{ position:absolute; width:50px; height:50px; top:50%; left:50%; -webkit-transform: translate(-50%,-50%); -ms-transform: translate(-50%,-50%); -o-transform: translate(-50%,-50%); transform: translate(-50%,-50%); background:#22B14C; }
##DOM事件捕獲和冒泡的具體流程
事件捕獲階段
事件冒泡階段
阻止冒泡
IE下設置cancelBubble = true;
event.stopPropagation()
通常也就點擊事件冒泡多一點
一個完整的事件系統,通常存在3個角色
event.target 當前事件目標元素
preventDefault() 不要執行與事件關聯的默認動做
stopPropagation() 阻止事件冒泡
獲取event對象兼容寫法
event || (event = window.event);
獲取target兼容寫法
event.target || event.srcElement
阻止瀏覽器默認行爲兼容寫法
event.preventDefault ? event.preventDefault() : (event.returnValue = false);
阻止冒泡寫法
event.stopPropagation ? event.stopPropagation() : (event.cancelBubble = true);
// 利用事件委託 比一個一個綁定事件 性能提升多倍 var oUl = document.getElementById('oUl'); var list = oUl.getElementsByTagName('li'); // 利用事件委託 比一個一個綁定事件 性能提升多倍 oUl.onclick = function (e) { e = e || window.event; var tar = e.target || e.srcElement; //tar 當前節點 <li></li> //tar.tagName當前標籤名字li //toUpperCase()轉爲大寫 if(tar.tagName.toUpperCase() === 'LI'){ console.log(tar.innerHTML); } }
網頁可見區域寬和高
document.body.clientWidth||document.docuemntElement.clientWidth;
document.body.clientHeight||document.docuemntElement.clientHeight;
event事件對象
document.onclick=function(ev){//兼容寫法; var e=ev||window.event; var mouseX=e.clientX;//鼠標X軸的座標 var mouseY=e.clientY;//鼠標Y軸的座標 }
document.onmouseover=function(e){ var e=e||window.event; var Target=e.target||e.srcElement;//獲取target的兼容寫法,後面的爲IE var from=e.relatedTarget||e.formElement;//鼠標來的地方,一樣後面的爲IE... var to=e.relatedTarget||e.toElement;//鼠標去的地方 }
function Parent(name) { this.name = name } Parent.prototype.home = '北京'; function Child() { this.age = 8; } //將父類的實例綁定在子類的原型上 Child.prototype = new Parent('aa'); //實例化子類 let child = new Child(); //這時候繼承父類的公有私有屬性 console.log(child.home+child.name); // 結果 北京 + aa
function Parent(name) { this.name = name } //父類的公有屬性 Parent.prototype.home = '北京'; function Child(name) { this.age = 8; Parent.call(this,...arguments); } let child = new Child('hello'); console.log(child.home+child.name); //結果是 undefined +hello
function Parent(name) { this.name = name } Parent.prototype.home = '北京'; function Child() { this.age = 8; } Child.prototype = Object.create(Parent.prototype); let child = new Child(); //這時候繼承只繼承父類的公有屬性 父類的私有屬性沒有繼承 console.log(child.home+child.name); // 結果 北京 + indefined
class Person { //控制器 constructor(name,age){ this.name=name; this.age=age; } eat(){ console.log("吃飯"); } } //關鍵字 extends 公私有都會繼承 class Girl extends Person{ constructor(name,age){ super(name,age); //默認調用父類,而且this就是girl實例 } } let g=new Girl('aa',18); console.log(g.name,g.age); g.eat(); //結果aa 18 // 吃飯
var o1 = { a: 1 }; var o2 = { b: 2 }; var obj = Object.assign(o1, o2);
a = {'a': 1}; b = {'b': 1}; c = $.extend(a, b)
事件綁定和普通事件的區別
高性能動態向一個div中插入1000個div標籤
document.createdocumentfragment 文檔碎片
一次性拼接完字符串,最後一次插入節點,減小dom操做
//先建立文檔碎片 var oFragmeng = document.createDocumentFragment(); for(var i=0;i<1000;i++) { var op = document.createElement("div"); var oText = document.createTextNode(i); op.appendChild(oText); //先附加在文檔碎片中 oFragmeng.appendChild(op); } //最後一次性添加到document中 document.body.appendChild(oFragmeng);
bind() 是直接綁定在元素上,若是沒有設置阻止冒泡stopPropagatio 頗有可能他全部父元素,祖宗元素都會受影響
unbind() 解除綁定
live() 經過冒泡方式綁定到元素上
基本淘汰了,阻止冒泡都無論用
on() 這個最好
off() 解除綁定
ready比load先執行
ready事件在DOM結構繪製完成以後就繪執行。這樣能確保就算有大量的媒體文件沒加載出來,JS代碼同樣能夠執行
load事件必須等到網頁中全部內容所有加載完畢以後才被執行
若是一個網頁中有大量的圖片的話,則就會出現這種狀況:網頁文檔已經呈現出來,但因爲網頁數據尚未徹底加載完畢,致使load事件不可以即時被觸發。
$(function(){}) 匿名函數,你能夠當成$(document).ready(function(){})的簡寫
//向元素中附加數據greeting $("#btn1").click(function(){ $("div").data("greeting", "Hello World"); }); //從元素中獲取數據 $("#btn2").click(function(){ alert($("div").data("greeting")); });
function buypack(){ return new Promise((resolve,reject)=>{ setTimeout(()=>{ if(Math.random()>0.5){ resolve('買') }else{ reject('不買,被打死'); } },Math.random()*10*1000) }) }; buypack().then((data)=>{ console.log(data); },(err)=>{ console.log(err); })
async 和 await解決異步問題,基於primise
主要解決promise的then方法嵌套
async和await這兩個關鍵字一塊兒使用
await後面智能跟promise對象
Promise.all()併發讀取
//es7 let fs=require('fs'); function read(url) { //new Promise 須要傳入一個executor 執行器 //executor須要傳入兩個函數 resolve reject return new Promise((resolve,reject)=>{ //異步讀取文件 fs.readFile(url,'utf8',function (err,data) { if(err){ reject(err) }else{ resolve(data); } }) }) }; //async await 解決異步問題,基於promise //async await這兩個關鍵字一塊兒使用 //await 後面只能跟promise對象 async function getData(){ try{ //Promise.all()併發讀取 let result =await Promise.all([read('name.txt'),read('age.txt')]); console.log(result); }catch (e){ console.log(e); } } getData(); //Promise 解決多層嵌套,回調地獄 // 解決異步請求,同步結果的問題