## 前端面試題
1、簡述以下常見标簽的語義以及預設的display值:p, li, ul, form, b,img,這幾個dispaly值的差別是什麼?
p 段落 display: block;
li 清單 display: block;
ul 清單 display: block;
form 表單 display: block;
b 粗體 display: inline;
img 圖檔 display: inline-block;
差別:
block元素
1、如果沒有設定寬度會自動填滿父容器
2、可以應用margin/padding
3、如果沒有設定高度會拓展高度,包含正常流子元素
4、處于正常流前後元素獨占水準空間
5、忽略vertical-align
inline元素
1、水準方向從左到右依次布局
2、margin/padding 在垂直方向無效,在水準方向有效
3、不會再元素前後換行
4、浮動或絕對定位自動轉換成 block
5、vertical-align屬性無效
6、元素寬度由元素内容決定
inline-block 元素
1、可以設定寬高
2、其他基本同 inline元素屬性
2、寫一個布局:要求:整體尺寸等于浏覽器視窗的尺寸,設定最小高度和最小寬度,
頂欄高度固定50px, 側欄寬度固定200px, 内容部分占據剩餘的空間,
如圖:
![](http://text-learn.qiniudn.com/螢幕快照 2017-02-27 下午2.44.47.png)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>index</title>
</head>
<style type="text/css">
* {
margin: 0;
padding: 0;
font: normal 14px "Microsoft YaHei";
}
html,body {
height: 100%;
overflow: hidden;
border: none;
}
.layout {
position: relative;
z-index: 0;
min- 1260px;
min-height: 600px;
}
.layout-top {
height: 50px;
100%;
border:1px solid #000;
}
.layout-sider {
position: absolute;
left: 0;
top: 50px;
bottom: 0;
200px;
float: left;
border-right: 1px solid #000;
}
.accordion {
position: absolute;
left: 0;
top: 0;
bottom: 0;
200px;
height: auto;
overflow-y: auto;
overflow-x: hidden;
}
.accordion .accordion-menus {
text-align: center;
font-size: 1em;
}
.accordion .accordion-menus li {
height: 40px;
line-height: 36px;
transition: border-left 220ms ease-in;
}
.layout-right {
position: absolute;
left: 200px;
top: 50px;
right: 0;
bottom: 0;
}
</style>
<body class="layout">
<div class="layout-top"></div>
<div class="layout-sider">
<div class="accordion">
<ul class="accordion-menus">
<li>caidan1</li>
<li>caidan2</li>
</ul>
</div>
</div>
<div class="layout-right">
<iframe id="rightMain" scrolling="auto" frameborder="0" src="" style="100%;height:100%;"></iframe>
</div>
</body>
</html>
3、有哪些方法可以隐藏元素?
1、display:none;
2、visibility: hidden;
3、opacity: 0;
4、什麼是跨域?都有哪些方式可以進行跨域?
跨域就是不同域名下的通信來往。
跨域方式:
1、jsonp 請求
2、 HTML5新規範的CORS功能,隻要目标伺服器傳回請求頭部**Access-Control-Allow-Origin: *** 即可
3、通過内部伺服器代理,實作跨域
4、<img>,<script>,<link>,<iframe>,通過src,href屬性設定為目标url,實作跨域請求
5、簡述jsonp的原理
通過<script>标簽沒有跨域限制來進行資料互動。
就是提供一個回調函數接受json資料,在浏覽器中執行并處理穿過來的資料。
6、如何設計一個輪播插件,用僞代碼簡述思路
初始化讓所有的圖檔樣式
z-index:0,display:none
預設第一個圖檔顯示 z-index:4,display:block
t = setInterval(move, 5000);
function move() {
num++;
if (num == imglen) {
num = 0;
};
show(num);
};
function show(index) {
給index目前元素添加活動類顯示隐藏
}
滑鼠放在容器時,清除t,離開繼續執行 t = setInterval(move, 5000);
7、如何實作一個移動端"tap"事件
function tap(d,callback) {
var startTime = 0,
delayTime = 200,
isMove = false;
d.addEventListener("touchstart",function(){
startTime = Date.now();
},false)
d.addEventListener("touchmove",function(){
isMove = true;
},false)
d.addEventListener("touchend",function(){
if(isMove) return;
if(Date.now()-startTime>delayTime) return;
callback();
},false)
}
8、前端有哪幾種本地存儲方式,簡述各自的特點
localStorage、 sessionStorage、 cookie、web sql
localStorage:
1、有效期永久
2、同源可以讀取并修改localStorage資料
sessionStorage:
1、有效期頂層視窗關閉前
2、值允許同一視窗通路
cookie:
1、有效期可以設定
2、cookie作用域通過文檔源和文檔路徑來确定
3、儲存資料量小
web sql:
1、可以儲存大量結構化資料
9、寫一個js函數,實作對一個數字每3位加一個逗号,如輸入100000, 輸出100,000
function farmat(mun) {
if (mun === null) return;
var m = parseInt(mun).toString();
var len = m.length;
if (len <= 3) return m;
var n = len % 3;
if (n > 0) {
return m.slice(0,n)+","+m.slice(n,len).match(/d{3}/g).join(",")
} else {
return m.slice(n,len).match(/d{3}/g).join(",")
}
}
var a =farmat(100000)
console.log(a);
10、簡述常見的http狀态碼
200 請求成功
404 Not Found
500 服務端錯誤
11、什麼是事件代理,它的實作原理是什麼?
通過事件冒泡,指定一個事件處理程式,就可以管理某一類型事件。
原理就是事件從最深節點開始逐漸向上傳播事件。