前端面試問題 —— html

1、 阻止冒泡

w3c的方法是e.stopPropagation()IE則是使用e.cancelBubble = true

// 設置的時候設爲捕獲
element.addEventListener(event, function, useCapture)
useCapture默認是false,冒泡階段。

2、如何改變默認行爲

preventDefault它是事件對象(Event)的一個方法,作用是取消一個目標元素的默認行爲。
元素必須有默認行爲才能被取消,如果元素本身就沒有默認行爲,調用當然就無效了。

w3c的方法是e.preventDefault()IE則是使用e.returnValue = false;

e.preventDefault ? e.preventDefault() :   window.event.returnValue == false;

原生javascript的 return false只會阻止默認行爲.
a.onclick = function(){
    return false;
};
用jQuery的話則既阻止默認行爲又防止對象冒泡。
$("#testC").on('click',function(){
    return false;
});
什麼元素有默認行爲呢?

如鏈接<a>,總會跳到一個新頁面,有時只是要執行js代碼,並不用跳轉,這時就要阻止默認行爲。

提交按鈕<input type=”submit”> 默認行爲提交表單radio(checkBox點擊(選中)之後出現對勾,這是它的默認行爲)等表單元素的默認事件 。
當Event 對象的cancelable爲false時,表示沒有默認行爲,這時即使有默認行爲,調用preventDefault也是不會起作用的。

//原生js阻止瀏覽器的默認行爲 
function stopDefault( e ) { 
        //阻止默認瀏覽器動作(W3C) 
    if ( e && e.preventDefault ) {
         e.preventDefault(); 
    }else{
        //IE中阻止函數器默認動作的方式 
        window.event.returnValue = false;
    }
    return false; 
}
舉例

<a>消除默認事件的方法

<a href="http://www.baidu.com" onclick="clickEle(this)">使用stopPropagation!</a>
<a href=http://www.baidu.com" οnclick="alert(123);return false">使用return false</a>
<a href="javascript:void(0);">void(0)使地址不發生跳轉,不寫void(0)也可以使返回爲undefined!</a>
<a href="#">#會導致每次點擊頁面移到最頂部!</a>

function clickEle(e) {
    if (e && e.preventDefault) {
        console.log('阻止默認事件w3c');
        e.preventDefault();
    } else {
        //我用谷歌瀏覽器執行的是這個,e.preventDefault是undefined?
        console.log('阻止默認事件ie');
        window.event.returnValue = false;
    }
    return false;
}

3、說說行內元素和塊級元素

竟然是靠盒子模型來區分,就是設置上下margin,padding無效的就是行內元素。
塊級元素對應於display:block. 行內元素對應於display:inline.

4、repaint和reflow什麼時候發生

5、當瀏覽器頁面變小時,會發生repaint和reflow嗎?

如果寫死了寬高就不會變化,如果沒寫死,整個頁面就會發生repaint和reflow。

6、dom和bom區別

7、提高頁面加載速度的辦法

  1. 減小頁面大小
頁面的肥瘦是影響加載速度最重要的因素
- 去除不必要的空格、回車、註釋。
- 將內聯的 css 和 js 移到外部文件
- 頁面壓縮工具對頁面進行壓縮,比如:webpack集成的UglifyJS插件,uglifyJsPlugin會拖慢webpack的編譯速度,所有建議在開發階段將其關閉,部署的時候再將其打開。
  1. 減少文件數量
減少頁面上引用的文件數量可以減少HTTP連接數。
許多JavaScript、CSS 文件可以合併最好合併成一個js 或者 css。
  1. 減少域名查詢
DNS查詢和解析域名也是消耗時間的,所以要減少對第三方JavaScript、
CSS、圖片等資源的引用,不同域名的使用越少越好。

比如:
引用jqury的兩種方式
1 下載代碼文件至本地項目中,引入。
2 通過 CDN(內容分發網絡) 引用它
其他的包最好用1方式下載,這樣減少DNS解析域名的時間。
但jqury用使用CDN引用的一個好處:許多用戶在訪問其他站點時,已經從百度、又拍雲、新浪、谷歌或微軟加載過 jQuery。
所有結果是,當他們訪問您的站點時,會從緩存中加載 jQuery,這樣可以減少加載時間。
同時,大多數 CDN 都可以確保當用戶向其請求文件時,會從離用戶最近的服務器上返回響應,這樣也可以提高加載速度。
  1. 緩存重用數據
對重複使用的數據進行緩存。
  1. 優化頁面元素加載順序
首先加載頁面最初顯示的內容和與之相關的JavaScript和CSS,然後加載HTML相關的東西,
像什麼不是最初顯示相關的圖片、flash、視頻等很肥的資源就最後加載。

js放在body的最後面,減少減少inline JavaScript的數量,瀏覽器parser會假設
inline JavaScript會改變頁面結構,所以使用inline JavaScript開銷較大。

6、指定圖像和table的大小

a. 如果瀏覽器可以立即決定圖像或table的大小,那麼它就可以馬上顯示頁面而不要重新做一些佈局安排的工作。
b. 這不僅加快了頁面的顯示,也預防了頁面完成加載後佈局的一些不當的改變。
c. image使用height和width。

8、獲取鼠標位置

event.clientX / event.clientY
pc端使用mousedown,mousemove,mouseup監聽實現。
移動端的方法是touchstart,touchmove,touchend。
移動端獲取clientx:
event.changedTouches[0].clientX

獲取位置總結
clientX / clientY : 觸摸點相對於瀏覽器視口的位置,(不包含滾動距離)
pageX / pageY : 觸摸點相對於頁面的位置,(包含滾動距離)
screenX / screenY : 觸摸點相對於屏幕的位置

JS之clientX,clientY,screenX,screenY,offsetX,offsetY區別測試

event中的幾個屬性:
clientX,clientY:鼠標相對於瀏覽器視口的x,y軸的位置
pageX / pageY: 鼠標相對於頁面的x,y軸的位置,當頁面沒滾動時,pagexy和clientxy的值是相等的
screenX,screenY:鼠標相對於整個屏幕的x,y軸的位置
offsetX,offsetY:鼠標相對於事件源x軸的位置。
比如有個按鈕,當你點擊時,offsetX,offsetY獲取的就是鼠標相對這個按鈕的x座標和y座標

9、html分類

常用的塊狀元素有:

<div>、<p>、<h1>...<h6>、<br>、<ol>、<ul>、<dl>、<table>、<address>、<blockquote> 、<form>

常用的內聯元素有:

<a>、<span>、<i>、<em>、<strong>、<label>、<q>、<var>、<cite>、<code>

常用的內聯塊狀元素有:

<img>、<input>

按是否閉合分劃分:

閉合標籤:
閉合標籤是指由開始標籤和結束標籤組成的一對標籤,
這種標籤允許嵌套和承載內容,例如<html></html>、<p></p>等。
空標籤:
空標籤是指沒有內容的標籤,在開始標籤中自動閉合。
常見的空標籤有:<br>、<hr>、 <img>、 <input>、 <link> <meta>。

塊級元素和行內元素的區別?

1.inline元素設置width,height屬性無效
2.inline元素的padding和margin可以設置,
但是padding,margin-right,margin-left都產生了效果,
而垂直方向的margin-bottom,margin-top是沒有效果的
(親測padding-top和padding-bootom是有用的
inline-block:結合了塊級元素和行內元素的特性,塊級元素排在一行)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章