<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
复制代码