<a> <span> <i> <strong> <img> <input>
複製代碼
<div> <p> <ul> <li> <ol> <h1~h6> <table>
複製代碼
定位類型javascript
absolutecss
絕對定位,相對於最近的除static定位之外的元素定位,若沒有,則相對於html定位;html
脫離了文檔流,不佔據文檔空間;vue
若設置absolute,但沒有設置top、left等值,其位置不變,會影響未定義寬度的塊級元素,使其變爲包裹元素內容的寬度。html5
fixedjava
固定定位 相對於瀏覽器窗口定位,脫離文檔流,不會隨頁面滾動而變化。ios
relativecss3
相對定位,相對自身位置定位,可經過設置left、top、right、bottom的值來設置位置;es6
而且它本來所佔的空間不變,即不會影響其餘元素佈局;web
常常被用來做絕對元素的容器塊。
盒子模型
none
表示該元素不會顯示,而且該元素的空間也不存在,可理解爲已刪除
visibility:hidden只是將元素隱藏,但不會改變頁面佈局,但也不會觸發該元素已經綁定的事件
opacity:0,將元素隱藏,不會改變頁面佈局,但會觸發該元素綁定的事件
block
<div>、<p>、<h1>...<h6>、<ol>、<ul>、<dl>
複製代碼
inline-block
行內塊元素,便是內聯元素,又可設置寬高以及行高及頂和底邊距;
<img>、<input>
複製代碼
inline (默認)
內聯元素,與其餘元素在一行
不可設置寬高
margin-top與margin-bottom無效,但margin-left與margin-right有效
padding-left與padding-right一樣有效,可是padding-top與padding-bottom不會影響元素高度,會影響背景高度
<a>、<span>、<br>、<i>、<em>、<strong>
複製代碼
元素浮動後會脫離⽂檔流 形成父元素塌陷
overflow:hidden
clear:both
.clearfix::after{
content:'';
display:block;
clear:both;
}
複製代碼
當兩個垂直外邊距相遇時,它們將造成一個外邊距。合併後的外邊距的高度等於兩個發生合併的外邊距的高度中的較大者。
解決辦法:
overflow:hidden
position:absolute
float:left
外邊距設置在一個元素上便可
String.prototype.functionname = function(){}
複製代碼
call( ) 方法 改變指針 第一個參數是一個要改變指針的對象,後面的參數是方法須要的參數
apply( ) 方法 改變指針 第一個參數是一個要改變指針的對象第二個參數時一個數組,數組裏是方法的參數
bind( ) 方法 改變指針 第一個參數是一個要改變指針的對象,後面的參數是方法須要的參數
f1.call(oDiv,22,33);
f1.apply(obj,[1,2]);
f1.bind(oDiv,22,33)();
複製代碼
事件傳播從外向裏
addEventListener('事件',function(){},false)
監聽事件
能夠給元素綁定多個相同事件,最後參數false事件冒泡,true事件捕獲
外部函數有內部函數
內部函數會使用外部函數裏的局部變量
優勢:
閉包內的變量不會被垃圾回收機制處理掉,一直存在內存中
能夠拿到索引值
<script>
var aLi = document.getElementsByTagName('li');
for(var i = 0 ; i<aLi.length ;i++){
(function(j){
aLi[j].onclick = function (){
console.log(j);
}
})(i)
}
複製代碼
var xmlhttp;
if (window.XMLHttpRequest){//code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
}
else{//code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
複製代碼
方法 | 描述 |
---|---|
open(method,url,async) | 規定請求的類型、URL 以及是否異步處理請求。 method:請求的類型GET 或 POST url:文件在服務器上的位置 async:true(異步)或 false(同步) |
send(string) | 將請求發送到服務器。 string:僅用於 POST 請求 |
xmlhttp.open("GET","test1.txt",true);
xmlhttp.send();
複製代碼
屬性 | 描述 |
---|---|
onreadystatechange | 存儲函數(或函數名),每當 readyState 屬性改變時,就會調用該函數。 |
readyState | 存有 XMLHttpRequest 的狀態。 0: 請求未初始化 1: 服務器鏈接已創建 2: 請求已接收 3: 請求處理中 4: 請求已完成,且響應已就緒 |
status | 200: "OK" 400:請求出現語法錯誤 404: 未找到頁面 500:服務器錯誤 505:HTTP版本不受支持」,當服務器不支持請求中所使用的HTTP協議版本 304:客戶端有緩衝的文檔併發出了一個條件性的請求(通常是提供If-Modified-Since頭表示客戶只想比指定日期更新的文檔)。 |
xmlhttp.onreadystatechange=function(){
if (xmlhttp.readyState==4 && xmlhttp.status==200){
document.getElementById("myDiv").innerHTML=xmlhttp.responseText;
}
}
複製代碼
div{
width:100px;
height:100px;
background:red;
animation:myfirst 5s;
-moz-animation:myfirst 5s; /* Firefox */
-webkit-animation:myfirst 5s; /* Safari and Chrome */
-o-animation:myfirst 5s; /* Opera */
}
@keyframes myfirst{
from {background:red;}
to {background:yellow;}
}
複製代碼
width=content
width=content+padding+border
這三個部分的寬度box-sizing
控制元素是 標準、怪異盒模型content-box
(標準盒模型)border-box
(怪異盒模型)border-box
爲元素指定的任何內邊距和邊框都將在已設定的寬度和高度內進行繪製button
自己是怪異盒模型.item{
position: absolute;
margin:auto;
left:0;
top:0;
right:0;
bottom:0;
}
複製代碼
.item{
position: absolute;
top: 50%;
left: 50%;
margin-top: -75px; /* 設置margin-left / margin-top 爲自身高度的一半 */
margin-left: -75px;
}
複製代碼
.item{
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%); /* 使用css3的transform來實現 */
}
複製代碼
.parent{
display: flex;
justify-content:center;
align-items: center;
/* 注意這裏須要設置高度來查看垂直居中效果 */
height: 300px;
background: #AAA;
}
複製代碼
.left {
position: absolute;
height: 100px;
width: 300px;
background-color: blue;
}
.right {
height: 200px;
margin-left: 300px;
background-color: red;
}
複製代碼
.left {
float: left;
height: 100px;
width: 300px;
background-color: blue;
}
.right {
overflow: auto;
height: 200px;
background-color: red;
}
複製代碼
3.calc
.container{
height:200px;
}
.left{
width:100px;
height:50px;
background-color:blue;
}
.right{
width: calc(100% - 100px);
height:100px;
background-color:yellow;
}
複製代碼
<header> <footer> <nav> <section> <aside> <article> <video> <audio> <canvas>
複製代碼
可存數據大小爲5M 會永久的存儲在瀏覽器中 除非手動刪除
設置
localStorage.key = value
localStorage.setItem(key, value)
獲取
localStorage.key
localStorage.getItem(key)
localStorage.name = 'zs';
localStorage.setItem('age', 18)
console.log(localStorage.name)
console.log(localStorage.getItem('name'));
複製代碼
可存儲的大小爲5M 瀏覽器窗口關閉以後就沒了,sessionStorage 返回一個對象
sessionStorage.weight = '123kg';
sessionStorage.setItem('height', '170cm');
複製代碼
console.log(sessionStorage);
console.log(sessionStorage.weight);
console.log(sessionStorage.getItem('height'))
複製代碼
if(getCookie(isNew)){
} else {
setCookie('isNew', 'true', '300');
}
複製代碼
cookie 存儲大小爲4K 能夠設置過時時間,若是不設置關閉瀏覽器窗口就沒了,cookie設置是一個字符
document.cookie = 'name=wxc';
var date = new Date();
date.setDate(date.getDate()+ 1);
//toUTCString 日期對象轉字符串
//expires 過時時間
document.cookie = 'text=111;expires=' + date.toUTCString();
複製代碼
// 設置cookie
function setCookie(key, value, expires ) {
var date = new Date();
date.setDate(date.getDate() + expires*1);
document.cookie = key + '=' + value + ';expires=' + date.toUTCString();
}
複製代碼
// 獲取cookie
function getCookie(key) {
var tmp = document.cookie; //'name=wxc; text=111'
tmp = tmp.split(';'); // ["name=wxc", " text=111"]
for(var i=0; i<tmp.length; i++) {
var arr = tmp[i].split('=') // [' name','wxc']
// trim() 刪除字符串前面或後面的空格
if (arr[0].trim() == key ) {
return arr[1];
}
}
}
複製代碼
// 刪除cookie
function deleteCookie(key){
var date = new Date();
//過時日期爲前一天
date.setDate(date.getDate() - 1);
document.cookie = key + '=null;expires=' + date.toUTCString();
}
setCookie('text2', 'aaa', '3');
deleteCookie('text2');
複製代碼
<!--css-->
<style> *{ padding: 0; margin: 0; } div{ width: 2rem; height: 2rem; position: relative; } button{ width: .5rem; height: .3rem; position: absolute; z-index: 2; } div::before{ content: ''; display: block; width: 200%; height: 200%; top: 0; left: 0; border: 1px solid #eeeeee; -webkit-transform: scale(0.5); transform: scale(0.5); transform-origin: 0,0 position: absolute; z-index: 1; } </style>
<!--html-->
<body>
<div>
<button>點擊</button>
</div>
</body>
<!--js-->
<script> var Obtn = document.getElementsByTagName("button")[0]; Obtn.onclick = function(){ alert("hello world"); } </script>
複製代碼
background-color:#ff7e33;
background-image:linear-gradient(45deg,#ff5303,#ff9143);
複製代碼
vconsole會報錯script error ,但沒法查出具體錯誤 須要加墊片babel-polyfill
(安卓手機會出現) 從新獲取⻚⾯高度並賦值
ios系統⼀般會出現拍照和相冊兩個選項,安卓手機拍照、相冊選擇有時只出現⼀ 項,有時根據系統不一樣會展現其餘項,12306的webview不⽀持input file 會出現閃退的狀況
須要阻止頁面的默認動做
-webkit-appearance: none;
複製代碼
能夠設置input高度小⼀點 而後上下加padding
網上的解決方式line-height:normal
px 像素
rem
相對於根元素
html{
/* 1 rem */
font-size: 16px;
}
div{
/* 20*16px */
width: 20rem;
/* 20*16px */
height: 20rem;
}
複製代碼
em
字體相對於根元素計算,其餘元素相對於當前元素
html{
/* 1 rem */
font-size: 16px;
}
div{
font-size: 18px;
/* 20*18px */
width: 20em;
/* 20*18px */
height: 20em;
}
複製代碼
//至關於聲明提高
//var a;
console.log(a);
var a = 1;
複製代碼
無變量提高
不可從新定義
塊做用域
做用於{ }內部
for(let i = 0 ;i < aLi.length ; i++){
console.log(i);
//輸出0 1 2
}
console.log(i);
//報錯
複製代碼
for(let i = 0 ;i <= aLi.length ;i++){
//一級做用域
aLi[i].onclick = function(){
//二級做用域
console.log(i);
}
}
複製代碼
const obj = {
name:'xiaoming';
age:'2';
}
obj.age = '3';
console.log(obj);//修改爲功
obj = {
name:'xiaoming';
age:'4';
}
console.log(obj);//報錯
複製代碼
arguments
獲取參數,可使用rest
獲取參數// 箭頭函數中不可使用arguments獲取參數,可使用rest獲取參數
var fun3 = (...rest) => {
console.log(rest);
rest[0];
}
fun3(1,2,3)
複製代碼
解構 :從數組和對象中提取值,對變量進行賦值
var [a,b,c] = [1,2,3];
複製代碼
let {name,age} = {name:'xm',age:4};
console.log(name,age);
//取別名
let {name:x,age} = {name:'xm',age:4};
console.log(x,age);
複製代碼
const [a,b,c,d,e] = 'hello';
console.log(a); //h
console.log(b); //e
console.log(c); //l
console.log(d); //l
console.log(e); //o
let { length : len} = 'yahooa';
console.log(len); //5
複製代碼
let x = 2;
let y = 3;
[y,x]=[x,y];
console.log(x);//3
console.log(y);//2
複製代碼
Promise.prototype.then()
Promise.prototype.catch()
const promise = new Promise(function(resolve, reject) {
if (/* 異步操做成功 */){
resolve(value);
} else {
reject(error);
}
});
複製代碼
//方法一
const promise = new Promise(function(resolve, reject) {
setTimeout(function(){
reject();
},2000)
}).then(function(){//成功
//code
}).catch(function(){//失敗
//code
});
//方法二
const promise = new Promise(function(resolve, reject) {
setTimeout(function(){
reject();
},2000)
}).then(function(){//成功
//code
},function(){//失敗
//code
});
複製代碼
Promise.prototype.finally()
Promise.all
// 生成一個Promise對象的數組
const promises = [2, 3, 5, 7, 11, 13].map(function (id) {
return getJSON('/post/' + id + ".json");
});
Promise.all(promises).then(function (posts) {
// ...
}).catch(function(reason){
// ...
});
複製代碼
Promise.race
const p = Promise.race([p1, p2, p3]);
複製代碼
function* fun() {
console.log("start");
yield request();//yield語句執行完成後中止
console.log("end");
}
function request() {
setTimeout(() => {
console.log("success");
}, 2000)
}
let _fun = fun();//指針對象
console.log(_fun.next());//{value: yield返回值, done: false}
_fun.next();
console.log(_fun.next());//next可傳值,是上一個表達式返回值
複製代碼
async(異步編程)
async function fun() {
console.log("start...");
let data = await request();
console.log(data);//14
let data1 = await request1(data);//拿到上次的返回結果
console.log(data1);//16
console.log("end...");
}
function request(){
return new Promise(function(resolve,reject){
setTimeout(() => {
let obj = {
name: 'jj',
age: 18
}
console.log("success");
resolve(obj);
}, 2000)
})
}
function request1(_tmp){
console.log(_tmp);//32
return new Promise(function (resolve, reject) {
setTimeout(() => {
let obj = {
name: 'ccc',
age: 1
}
console.log("success1");
resolve(obj);
}, 2000)
})
}
fun();
複製代碼
//打印結果
1.html:12 start...
1.html:26 success
1.html:14 {name: "jj", age: 18}
1.html:32 {name: "jj", age: 18}age: 18name: "jj"__proto__: Object
1.html:39 success1
1.html:16 {name: "ccc", age: 1}
1.html:17 end...
複製代碼
v-for
<div id="app">
<ul>
<li v-for="item in arr">{{item}}</li>
</ul>
<p v-for="(value,key) in list">{{key}}:{{value}}</p>
<p v-for="item in obj">{{item.name}}:{{item,age}}</p>
</div>
<script> let vm = new Vue({ el:'#app', data:{ arr:[1,2,3], list:{ name:'ccc', age:18, height:'180cm' }, obj:[ { name: 'ccc', age: 18, height: '180cm' }, { name: 'ccc', age: 16, height: '160cm' } ] } }) vm.arr.push(4)//添加 </script>
複製代碼
v-test
v-html
v-on
<div id="app">
<div>{{number}}</div>
<button v-on:click="add">點我</button>
</div>
<script> var app = new Vue({ el: '#app', data: { number: 0 }, methods: {//方法 add() { this.number++; } } }) </script>
複製代碼
<a @click="doSomething">...</a>
複製代碼
$event
綁定事件時傳參v-on:click="handle('ok', $event)"
<script>
var app = new Vue({
el: '#app',
data: {
number: 0
},
methods: {//方法
add($event) {
console.log($event);
this.number++;
}
}
})
</script>
複製代碼
v-model
<input>
<textarea>
<select>
-單選框<input type="radio" id="one" value="One" v-model="picked">
<input type="radio" id="two" value="Two" v-model="picked">
<script> new Vue({ el: '#example-4', data: { picked: '' } }) </script>
複製代碼
<div id='example'>
<input type="checkbox" id="jack" value="Jack" v-model="checkedNames">
<label for="jack">Jack</label>
<input type="checkbox" id="john" value="John" v-model="checkedNames">
<label for="john">John</label>
<input type="checkbox" id="mike" value="Mike" v-model="checkedNames">
<label for="mike">Mike</label>
<br>
<span>Checked names: {{ checkedNames }}</span>
</div>
<script> new Vue({ el: '#example', data: { checkedNames: [] } }) </script>
複製代碼
v-bind
<div v-bind:id="dynamicId"></div>
<!--簡寫-->
<div :id="dynamicId"></div>
複製代碼
<div :class="A">
<div :class="['A','B']">
<div :class="['A',isA?'B':'']">
<div :class="{ classB: isB, classC: isC }">
<div :class="{ 'list': isA? 'active':''}">//isA==true 綁定active類名
<script> new Vue({ el: '#example', data: { isA:true, isB:false, isC:true } }) </script>
複製代碼
v-if
v-if
v-else-if
v-else
必須緊接着寫<div v-if="Math.random() > 0.5">
Now you see me
</div>
<div v-else>
Now you don't
</div>
複製代碼
v-show
v-show
的元素始終會被渲染並保留在 DOM 中v-if
不知足條件 不生成html解構v-show
改變元素的 CSS 屬性 display
。<h1 v-show="ok">Hello!</h1>
複製代碼
<div id="app">
<popcommon :title="logtitle" v-show="loginStatus" @hide="close"></popcommon>//父組件綁定close方法
</div>
<template id="common">
<div id="content">
<span @click="$emit('hide')">X</span>//觸發父組件的自定義
</div>
</template>
<script> new Vue({ el: '#app', components:{ 'popcommon':{ template:'#common', props:['title'] } }, methods:{ close(){ this.reinStatus = false, this.loginStatus = false } } }) </script>
複製代碼
<div id="app">
<popcommon :title="logtitle" v-show="loginStatus" :closefun="close"></popcommon>
<!--父組件綁定屬性-->
</div>
<template id="common">
<div id="content">
<button @click="closefun()">{{title}}</button>
<!--子組件綁定事件-->
</div>
</template>
<script> new Vue({ el: '#app', components:{ 'popcommon':{ template:'#common', props:['title','closefun']//父組件接收 } }, methods:{ close(){ this.reinStatus = false, this.loginStatus = false } } }) 複製代碼
//父級
new Vue({
el:"#app",
data:{
aaa:111,
bbb:222
},
methods:{
dosometing:function(msg){
console.log(msg)
}
}
})
//組件:
Vue.component('child',{
props:['aaa'],
template:'<input type='text'>',
childfun:function(){
this.change1(1111)
}
});
//調用子組件
<child :change="dosometing" :aaa='111' :bbb='222'></child>
複製代碼
var vm = new Vue({
data: { a: 1 },
computed: {
// 僅讀取
aDouble: function () {
return this.a * 2
},
// 讀取和設置
aPlus: {
get: function () {
return this.a + 1
},
set: function (v) {
this.a = v - 1
}
}
}
})
複製代碼
var vm = new Vue({
data: { a: 1 },
methods: {
plus: function () {
this.a++
}
}
})
vm.plus()
vm.a // 2
複製代碼
var vm = new Vue({
data: {
a: 1,
},
watch: {
a: function (newVal, oldVal) {
console.log('new: %s, old: %s', newVal, oldVal)
}
})
vm.a = 2 // => new: 2, old: 1
複製代碼