首頁

你真的了解盒模型么

seo達(dá)人

如果您想訂閱本博客內(nèi)容,每天自動發(fā)到您的郵箱中, 請點這里

說到前端, 大家第一反應(yīng)是不是都是vue、react、webpack等這些大大小小的框架或者工具, 但其實這些都是和js相關(guān)的, 真正的樣式會被大家忽略。其實真正呈現(xiàn)給大家看到華麗的頁面, 都是樣式才讓他們多了那份色彩。那么大家覺得簡單的css樣式, 真的簡單么? 讓我們一起來看下, 開啟css的入坑之旅, 今天一起跟大家簡單聊聊盒模型的相關(guān)問題......

盒模型

百度知道對此的解釋, 很有意思, 在此引用一下

CSS盒子模型, 內(nèi)容(CONTENT)就是盒子里裝的東西; 而填充(PADDING)就是怕盒子里裝的東西(貴重的)損壞而添加的泡沫或者其它抗震的輔料; 邊框(BORDER)就是盒子本身了; 至于邊界(MARGIN)則說明盒子擺放的時候的不能全部堆在一起,要留一定空隙保持通風(fēng),同時也為了方便取出。 —— 百度知道

640?wx_fmt=png&wxfrom=5&wx_lazy=1

這段描述很有趣, 很好的解釋margin、border、padding之間的關(guān)系, 不同模式下, 盒模型的width也是不同的, 那么好, 盒模型的第一個坑來了, width的范圍問題。

通常瀏覽器里, 盒模型的分為兩種模式, 兩種模式(怪異模式和標(biāo)準(zhǔn)模式)下width和height的值不同, 怪異模式的width和height包含border、padding和content, 而標(biāo)準(zhǔn)模式下的width和height只包含content, 這就是為啥有些瀏覽器渲染出來的dom標(biāo)簽排版會亂。解決也很簡單, 在標(biāo)簽的上面, 加上doctype的設(shè)置就好了, 讓瀏覽器統(tǒng)一用同一種標(biāo)準(zhǔn)去解析頁面。 怪異模式(左圖)和標(biāo)準(zhǔn)模式(右圖)的如下:

640?wx_fmt=png

當(dāng)然, 還有用來改變盒模型width范圍的一個css3的屬性, box-sizing:

當(dāng)設(shè)置為'border-box'時, width = border + padding + content;

當(dāng)設(shè)置為'content-box'時, width = content。

640?wx_fmt=png


    
  1.   <div class="wrapper z1"></div>

  2.   <div class="wrapper z2"></div>


    

   .wrapper{

  1.     width: 100px;

  2.     height: 50px;

  3.     padding: 10px;

  4.     background-color: #dedede;

   }

  1. .z1{

  2.     box-sizing: border-box;

  3. }

  4. .z2{

  5.     box-sizing: content-box;

     }

那么第一個div的實際寬度為100px, 第二個div的實際寬度為120px。

說完盒模型的padding和border, 那么再來吐槽下margin, 盒模型的margin的折疊(margin collapsing)問題, 有些也叫外邊距合并。

通常我們說的折疊, 都是垂直方向上的折疊, 水平方向是不存在的。標(biāo)準(zhǔn)模式下, 上下兩個兄弟的塊級元素, margin是會重疊的, 并且以最大的那個間距為準(zhǔn)(都為正數(shù))。

比如下面這段代碼:


    

   <div class="wrapper"></div>

   <div class="wrapper"></div>


    

   .wrapper{

  1.      width: 100px;

  2.      height: 50px;

  3.      margin: 10px;

  4.      background-color: #dedede;

  5.   }

640?wx_fmt=png

上圖灰色為重疊部分, 重疊10px的間距。

既然兄弟盒模型會有margin折疊, 那么父子呢? 答案是一定的, 父子也存在margin折疊的問題, 只不過條件稍微苛刻一點, 我們一起來看下。 父子組件的折疊觸發(fā), 要求不能有間隙, 就是父組件不能設(shè)置border或padding值, 不能有空余的內(nèi)容, 且同時有margin值, 比如下面這段代碼:


    
  1. <div class="outer">

  2.   <div class="inner"></div>

  3. </div>


    

   .outer{

  1.     width: 200px;

  2.     height: 100px;

  3.     margin: 10px;

  4.     background-color: #dedede;

   }

   .inner{

  1.      width: 100px;

  2.      height: 50px;

  3.      margin: 10px;

  4.      background-color: #bcbcbc;

   }

當(dāng)然, 折疊后的空余部分, 也是取較大值, 且折疊觸發(fā), 只存在于垂直方向。

640?wx_fmt=png

上圖灰色為重疊部分, 重疊10px的間距。

剛才提到一個詞"間隙", 如果有間隙的話是不會觸發(fā)折疊的, 比如父級元素設(shè)置了padding, 或者子元素都設(shè)置了相對定位和top值等等。如下圖:

640?wx_fmt=png

看到這里, 我想有些同學(xué)會問了, 對于這些 margin collapsing, 有沒有一個統(tǒng)一的整理, 對于大轉(zhuǎn)轉(zhuǎn)的FEer, 我們當(dāng)然想到了大家的前面, 請看下面:

  • Margins between a floated box and any other box do not collapse (not even between a float and its in-flow children).

  • Margins of elements that establish new block formatting contexts (such as floats and elements with 'overflow' other than 'visible') do not collapse with their in-flow children.

  • Margins of absolutely positioned boxes do not collapse (not even with their in-flow children).

  • Margins of inline-block boxes do not collapse (not even with their in-flow children).

  • The bottom margin of an in-flow block-level element always collapses with the top margin of its next in-flow block-level sibling, unless that sibling has clearance.

  • The top margin of an in-flow block element collapses with its first in-flow block-level child's top margin if the element has no top border, no top padding, and the child has no clearance.

  • The bottom margin of an in-flow block box with a 'height' of 'auto' and a 'min-height' of zero collapses with its last in-flow block-level child's bottom margin if the box has no bottom padding and no bottom border and the child's bottom margin does not collapse with a top margin that has clearance.

  • A box's own margins collapse if the 'min-height' property is zero, and it has neither top or bottom borders nor top or bottom padding, and it has a 'height' of either 0 or 'auto', and it does not contain a line box, and all of its in-flow children's margins (if any) collapse.

這是從W3C里引用的原文, 這8條規(guī)則是特殊的不折疊的情況, 簡單翻譯過來(僅供參考):

  • 浮動的盒模型不會margin折疊

  • 創(chuàng)建BFC與子不折疊

  • 設(shè)置定位的盒模型不會折疊

  • 行內(nèi)塊級元素的盒模型不折疊

  • 兄弟元素有間隙不折疊

  • 父子盒模型元素, 孩子元素有border、padding、有浮動就不折疊

  • height為auto、min-height為0的塊級盒模型, 和它的最后一個沒有border和padding的孩子盒模型底邊距折疊, 且孩子的底部外邊距和被清除浮動上邊距有間隙不折疊。

  • 如果min-height為0, 上下border、上下padding都為0, height為0或auto, 且沒有行內(nèi)盒模型, 他的孩子節(jié)點都會折疊

有點晦澀難懂, 大家不妨消化一下。說到這, 再補(bǔ)充一下, 盒模型margin折疊的計算問題, 總結(jié)了以下幾點:

  • 同為正值時, 取較大者為兩者為間距

  • 一正一負(fù)時, 正負(fù)相加為間距, 若結(jié)果為負(fù)值, 則兩者部分重合

  • 都為負(fù)值時, 兩者重合, 且重合部分為絕對值大者

舉個例子:


    
  1.    <div class="wrapper z-01"></div>

  2.    <div class="wrapper z-02"></div>


    
  1.    .wrapper{

  2.        width: 100px;

  3.        height: 50px;

  4.        background-color: #dedede;

  5.    }

  6.    .z-01{

  7.        margin: -10px;

  8.    }

  9.    .z-02{

  10.        margin: -15px;

  11.    }

兩者都為負(fù)值, 兩個div上下重合, 且重合間距為15px。

暫時就想到這么多, css的學(xué)習(xí)之路任重而道遠(yuǎn), 盒模型又是重中之重。上面有描述不對的地方也歡迎各位同學(xué)批評指正, 也歡迎大家來到大轉(zhuǎn)轉(zhuǎn)FE做客, 一起討論一起研究前端的技術(shù)問題。志同道合的同學(xué), 也歡迎加入我們轉(zhuǎn)轉(zhuǎn)FE團(tuán)隊, 咱們一起打拼。

藍(lán)藍(lán)設(shè)計www.yvirxh.cn )是一家專注而深入的界面設(shè)計公司,為期望卓越的國內(nèi)外企業(yè)提供卓越的UI界面設(shè)計、BS界面設(shè)計 、 cs界面設(shè)計 、 ipad界面設(shè)計 、 包裝設(shè)計 、 圖標(biāo)定制 、 用戶體驗 、交互設(shè)計、 網(wǎng)站建設(shè) 、平面設(shè)計服務(wù)

jQuery與Ajax的應(yīng)用

seo達(dá)人

如果您想訂閱本博客內(nèi)容,每天自動發(fā)到您的郵箱中, 請點這里


一、Ajax的XMLHttpRrequest對象

Ajax的核心是XMLHttpRequest對象(發(fā)送異步請求、接受響應(yīng)及執(zhí)行回調(diào)),它是ajax實現(xiàn)的關(guān)鍵

XMLHttpRequest對象的open()方法與send()方法

方法 描述
open(method,url,async)

規(guī)定請求的類型、URL 以及是否異步處理請求。

  • method:請求的類型;GET 或 POST
  • url:文件在服務(wù)器上的位置
  • async:true(異步)或 false(同步)
send(string)

將請求發(fā)送到服務(wù)器。

    • string:僅用于 POST 請求

請求類型,GET 還是 POST?

與 POST 相比,GET 更簡單也更快,并且在大部分情況下都能用。

然而,在以下情況中,請使用 POST 請求:

  • 無法使用緩存文件(更新服務(wù)器上的文件或數(shù)據(jù)庫)
  • 向服務(wù)器發(fā)送大量數(shù)據(jù)(POST 沒有數(shù)據(jù)量限制)
  • 發(fā)送包含未知字符的用戶輸入時,POST 比 GET 更穩(wěn)定也更可靠

(1). GET請求

[javascript] view plain copy
  1. //簡單的get請求,可能得到的是緩存的結(jié)果  
  2. xmlhttp.open("GET","demo_get.asp",true);  
  3. xmlhttp.send();  
  4. //為了避免上述情況,請向 URL 添加一個唯一的ID  
  5. xmlhttp.open("GET","demo_get.asp?t=" + Math.random(),true);  
  6. xmlhttp.send();  
  7. //若希望通過 GET 方法發(fā)送信息,請向 URL 添加信息  
  8. xmlhttp.open("GET","demo_get2.asp?fname=Bill&lname=Gates",true);  
  9. xmlhttp.send();  

(2). POST請求

[javascript] view plain copy
  1. //簡單的POST請求  
  2. xmlhttp.open("POST","demo_post.asp",true);  
  3. xmlhttp.send();  
  4. //如果需要像HTML表單那樣POST數(shù)據(jù),請使用 setRequestHeader()來添加HTTP頭。  
  5. //然后在send()方法中規(guī)定您希望發(fā)送的數(shù)據(jù)  
  6. xmlhttp.open("POST","ajax_test.asp",true);  
  7. xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");  
  8. xmlhttp.send("fname=Bill&lname=Gates");  
方法 描述
setRequestHeader(header,value)

向請求添加 HTTP 頭。

  • header: 規(guī)定頭的名稱
  • value: 規(guī)定頭的值


async參數(shù)設(shè)置

XMLHttpRequest對象如果要用于AJAX的話,其open()方法的async參數(shù)必須設(shè)置為true

通過 AJAX,JavaScript 無需等待服務(wù)器的響應(yīng),而是:

  • 在等待服務(wù)器響應(yīng)時執(zhí)行其他腳本
  • 當(dāng)響應(yīng)就緒后對響應(yīng)進(jìn)行處理

(1). 當(dāng)使用 async=true 時,請規(guī)定在響應(yīng)處于 onreadystatechange 事件中的就緒狀態(tài)時執(zhí)行的函數(shù):

[javascript] view plain copy
  1. xmlhttp.onreadystatechange=function()  
  2.   {  
  3.   if (xmlhttp.readyState==4 && xmlhttp.status==200)  
  4.     {    document.getElementById("myDiv").innerHTML=xmlhttp.responseText;  
  5.     }  
  6.   }  

(2). 當(dāng)您使用 async=false 時,請不要編寫 onreadystatechange 函數(shù) - 把代碼放到 send() 語句后面即可:

[javascript] view plain copy
  1. xmlhttp.open("GET","test1.txt",false);  
  2. xmlhttp.send();  
  3. document.getElementById("myDiv").innerHTML=xmlhttp.responseText;  

服務(wù)器響應(yīng)

使用 XMLHttpRequest 對象的 responseText 或 responseXML 屬性。

屬性 描述
responseText 獲得字符串形式的響應(yīng)數(shù)據(jù)。
responseXML 獲得 XML 形式的響應(yīng)數(shù)據(jù)。


(1). 如果來自服務(wù)器的響應(yīng)并非 XML,請使用 responseText 屬性。

responseText 屬性返回字符串形式的響應(yīng),因此您可以這樣使用:

document.getElementById("myDiv").innerHTML=xmlhttp.responseText;


(2). 如果來自服務(wù)器的響應(yīng)是 XML,而且需要作為 XML 對象進(jìn)行解析,請使用 responseXML 屬性

[javascript] view plain copy
  1. xmlDoc=xmlhttp.responseXML;  
  2. txt="";  
  3. x=xmlDoc.getElementsByTagName("ARTIST");  
  4. for (i=0;i<x.length;i++)  
  5.   {  
  6.   txt=txt + x[i].childNodes[0].nodeValue + "<br />";  
  7.   }  
  8. document.getElementById("myDiv").innerHTML=txt;  
onreadystatechange事件

當(dāng)請求被發(fā)送到服務(wù)器時,我們需要執(zhí)行一些基于響應(yīng)的任務(wù)。

每當(dāng) readyState 改變時,就會觸發(fā) onreadystatechange 事件。readyState 屬性存有 XMLHttpRequest 的狀態(tài)信息。

下面是 XMLHttpRequest 對象的三個重要的屬性:

屬性 描述
onreadystatechange 存儲函數(shù)(或函數(shù)名),每當(dāng) readyState 屬性改變時,就會調(diào)用該函數(shù)。
readyState

存有 XMLHttpRequest 的狀態(tài)。從 0 到 4 發(fā)生變化。

  • 0: 請求未初始化
  • 1: 服務(wù)器連接已建立
  • 2: 請求已接收
  • 3: 請求處理中
  • 4: 請求已完成,且響應(yīng)已就緒
status

200: "OK"

404: 未找到頁面

Ajax()函數(shù)示例:

  • 定義一個函數(shù),用于異步獲取信息
[javascript] view plain copy
  1. function Ajax(){  
  2.     //code  
  3. }  
  • 聲明一個空對象來裝入XMLHttpRequest對象
[javascript] view plain copy
  1. var xmlHttpReq = null;  
  • 給XMLHttpRequest對象賦值
[javascript] view plain copy
  1. if(window.ActiveXObject){  
  2.     xmlHttpReq = new ActiveXObject("Microsoft.XMLHTTP");  
  3. }else if(window.XMLHttpRequest){  
  4.     xmlHttpReq = new XMLHttpRequest();  
  5. }  

IE5、IE6是以ActiveXObject的方式引入XMLHttpRequest對象的,而其他瀏覽器的XMLHttpRequest對象是window的子對象。

    • 實例化后,使用open()方法初始化XMLHttpRequest對象,指定HTTP方法和要使用的服務(wù)器URL
[javascript] view plain copy
  1. xmlHttpReq.open("GET","test.php",true);  
  • 因為要做一個異步調(diào)用,所以需要注冊一個XMLHttpRequest對象將調(diào)用的回調(diào)事件處理器當(dāng)做它的readystate值改變時調(diào)用。當(dāng)readyState值改變時,會激發(fā)一個readystatechange事件,可以使用onreadystatechange屬性來注冊該回調(diào)事件處理器。
[javascript] view plain copy
  1. xmlHttpReq.onreadystatechange = RequestCallBack;  
  • 使用send()方法發(fā)送請求,因為這個請求使用的是HTTP的“GET”方式,所以可以在不指定參數(shù)或使用null參數(shù)的情況下調(diào)用send()方法
[javascript] view plain copy
  1. xmlHttpReq.send(null);  

當(dāng)請求改變時,XMLHttpRequest對象調(diào)用onreadystatechange屬性注冊的事件處理器,因此在處理該響應(yīng)前,事件處理器首先應(yīng)該檢查readyState的值和HTTP的狀態(tài)。當(dāng)請求完成加載時(readyState==4)并且已經(jīng)響應(yīng)成功(status==200)時,就可以調(diào)用JavaScript函數(shù)來處理該響應(yīng)內(nèi)容。

[javascript] view plain copy
  1. function RequestCallBack(){  
  2.     if (xmlHttpReq.readyState == 4) {  
  3.         if (xmlHttpReq.status == 200) {  
  4.             //將xmlHttpReq.responText的值賦予id為resText的元素  
  5.             document.getElementById('resText').innerHTML = xmlHttpReq.responText;  
  6.         }  
  7.     }  
  8. }  
二、jQuery中的Ajax

jQuery對Ajax操作進(jìn)行了封裝,在jQuery中$.ajax()方法屬于最底層的方法,第2層是load()、$.get()、$.post()方法,第3層是$.getScript()、$.getJSON()方法

1、load()方法    通常用來從WEB服務(wù)器上獲取靜態(tài)的數(shù)據(jù)文件

最常用的Ajax方法,能載入遠(yuǎn)程HTML代碼并插入DOM中

load(url[,data][,callback]);

  • url:String    請求HTML頁面的URL地址
  • data:Object    發(fā)送至服務(wù)器的key/value數(shù)據(jù)
  • callback:Function    請求完成時的回調(diào)函數(shù),無論請求成功或失敗
[javascript] view plain copy
  1. $(function(){  
  2.     $("#send").click(function(){  
  3.         $("#resText").load("test.html");  
  4.     })  
  5. })  
[javascript] view plain copy
  1. <button type="button" id="send">ajax加載</button>  
  2. <div class="comment">已有評論:</div>  
  3. <div id="resText">替換內(nèi)容</div>  

test.html代碼為:

[javascript] view plain copy
  1. <div class="comment">  
  2.     <h6>張三:</h6>  
  3.     <p class="para">沙發(fā)</p>  
  4. </div>  
  5. <div class="comment">  
  6.     <h6>李四:</h6>  
  7.     <p class="para">板凳</p>  
  8. </div>  
  9. <div class="comment">  
  10.     <h6>王五:</h6>  
  11.     <p class="para">地板</p>  
  12. </div>  

篩選載入的HTML文檔

load()方法的URL參數(shù)的語法結(jié)構(gòu)為:“url selector”

[javascript] view plain copy
  1. $("#resText").load("test.html .para");  

load()傳遞方式根據(jù)參數(shù)data自動指定,沒有參數(shù) --> GET,反之為POST   

[javascript] view plain copy
  1. // 無參數(shù)傳遞 GET  
  2. $("#resText").load("test.html",function(){  
  3.     //code  
  4. });  
  5. // 有參數(shù)傳遞 POST  
  6. $("#resText").load("test.html",{name:"rain",age:"22"},function(){  
  7.     //code  
  8. });  

回調(diào)函數(shù):有三個參數(shù),請求返回的內(nèi)容、請求狀態(tài)、XMLHttpRequest對象

[javascript] view plain copy
  1. // 回調(diào)函數(shù)  
  2. $("#resText").load("test.html",function(responseText,textStatus,XMLHttpRequest){  
  3.     //responseText  請求返回的內(nèi)容  
  4.     //textStatus    請求狀態(tài):success、error、notmodified、timeout  
  5.     //XMLHttpRequest    XMLHttpRequest對象  
  6. });  

2、$.get()和$.post()方法    jQuery中的全局函數(shù)

2.1 $.get()    使用GET方式來進(jìn)行異步請求

[javascript] view plain copy
  1. $.get(url[,data][,callback][,type]);  
  • url:String    請求HTML頁面的URL地址
  • data:Object    發(fā)送至服務(wù)器的key/value數(shù)據(jù)會作為QueryString附加到請求URL中
  • callback:Function    載入成功時回調(diào)函數(shù)(只有當(dāng)response的返回狀態(tài)是success才調(diào)用該函數(shù))自動將請求結(jié)果和狀態(tài)傳遞給該方法
  • type:服務(wù)器返回內(nèi)容的格式,包括html、xml、script、json、text、_default
[javascript] view plain copy
  1. $("#send").click(function(){  
  2.     $.get("get1.php",{  
  3.         username:$("#username").val(),  
  4.         content:$("#comment").val()  
  5.     },function(data,textStatus){  
  6.         // data:返回的內(nèi)容  
  7.         // textStatus:請求狀態(tài),success、error、notmodified、timeout  
  8.     })  
  9. })  

數(shù)據(jù)格式:服務(wù)器返回的數(shù)據(jù)格式

(1)HTML片段    較少工作量

[javascript] view plain copy
  1. $.get("get1.php",{  
  2.     username:$("#username").val(),  
  3.     content:$("#comment").val()  
  4. },function(data,textStatus){  
  5.     // data:返回的內(nèi)容  
  6.     // textStatus:請求狀態(tài),success、error、notmodified、timeout  
  7.     $("#resText").html(data);   //將返回的數(shù)據(jù)添加到頁面上  
  8. });  

(2) XML文檔    需要對返回的數(shù)據(jù)處理

方便使用

可以通過attr()、find()、filter()方法對數(shù)據(jù)進(jìn)行處理

[javascript] view plain copy
  1. $("#send").click(function(){  
  2.     $.get("get1.php", {   
  3.         username :  $("#username").val() ,   
  4.         content :  $("#content").val()    
  5.     }, function (data, textStatus){  
  6.         var username = $(data).find("comment").attr("username");  
  7.         var content = $(data).find("comment content").text();  
  8.         var txtHtml = "<div class='comment'><h6>"+username  
  9.                     +":</h6><p class='para'>"+content+"</p></div>";  
  10.         $("#resText").html(txtHtml); // 把返回的數(shù)據(jù)添加到頁面上  
  11.     });  
  12. })  
由于期待服務(wù)器返回的數(shù)據(jù)類型為XML文檔,因此需要在服務(wù)期端設(shè)置Content-Type類型
[javascript] view plain copy
  1. header("Content-Type:text/html; charset=utf-8");  

(3)JSON文件    需要對返回的數(shù)據(jù)處理

JSON相對于XML比較簡潔

[javascript] view plain copy
  1. $("#send").click(function(){  
  2.     $.get("get3.php", {   
  3.         username :  $("#username").val() ,   
  4.         content :  $("#content").val()    
  5.     }, function (data, textStatus){  
  6.         var username = data.username;  
  7.         var content = data.content;  
  8.         var txtHtml = "<div class='comment'><h6>"+username  
  9.                     +":</h6><p class='para'>"+content+"</p></div>";  
  10.         $("#resText").html(txtHtml); // 把返回的數(shù)據(jù)添加到頁面上  
  11.     },"json");  
  12. })  

以上三種方法對比:

HTML返回數(shù)據(jù)最簡單,如果數(shù)據(jù)需要重用使用JSON(性能與文件大小方面有優(yōu)勢),當(dāng)遠(yuǎn)程程序未知時使用XML。

2.2 $.post()    通過 HTTP POST 請求從服務(wù)器上請求數(shù)據(jù)

[javascript] view plain copy
  1. $.post(URL[,data][,callback]);  
  • url:String    請求的URL地址
  • data:Object    發(fā)送至服務(wù)器的key/value數(shù)據(jù)
  • callback:Function    載入成功時的回調(diào)函數(shù)

由于POST和GET方式提交的所有數(shù)據(jù)都可以通過$_REQUEST[]來獲取,因此只需要改變jQuery函數(shù),就可以將程序在GET請求和POST請求之間切換。

當(dāng)load()方法帶有參數(shù)傳遞時,會使用POST方式發(fā)送請求。因此也可以使用load()方法來完成同樣的功能。

$.post()與$.get()方法的區(qū)別:
  • GET請求會將參數(shù)跟在URL后進(jìn)行傳遞,而POST請求則是作為HTTP消息的實體內(nèi)容發(fā)送給Web服務(wù)器。當(dāng)然,在Ajax請求中,這種區(qū)別對用戶是不可見的。
  • GET方式對傳輸?shù)臄?shù)據(jù)有大小限制(通常不能大于2KB),而使用POST方式傳遞的數(shù)據(jù)量要比GET方式大得多(理論上不受限制)。
  • GET方式請求的數(shù)據(jù)會被瀏覽器緩存起來,因此其他人就可以從瀏覽器的歷史記錄中讀取到這些數(shù)據(jù),例如賬號和密碼等。在某種情況下,GET方式會帶來嚴(yán)重的安全性問題,而POST方式相對來說就可以避免這些問題。
  • GET方式和POST方式傳遞的數(shù)據(jù)在服務(wù)器端的獲取也不相同。在PHP中,GET方式的數(shù)據(jù)可以用$_GET[]獲取,而POST方式可以用$_POST[]獲取。兩種方式都可以用$_REQUEST[]來獲取。

      上面使用load()、$.get()和$.post()方法完成了一些常規(guī)的Ajax程序,如果還需要編寫一些復(fù)雜的Ajax程序,那么就要用到j(luò)Query中的$.ajax()方法。$.ajax()方法不僅能實現(xiàn)與load()、$.get()和$.post()方法同樣的功能,而且還可以設(shè)定beforeSend(提交前回調(diào)函數(shù))、error(請求失敗后處理)、success(請求成功后處理)以及complete(請求完成后處理)回調(diào)函數(shù),通過這些回調(diào)函數(shù),可以給用戶更多的Ajax提示信息。另外,還有一些參數(shù),可以設(shè)置Ajax請求的超時時間或者頁面的“最后更改”狀態(tài)等。

3、$.getScript()和$.getJSON()方法

3.1 $.getScript()

有時候,在頁面初次加載時就取得所需的全部JavaScript文件是完全沒有必要的。雖然可以在需要哪個JavaScript文件時,動態(tài)地創(chuàng)建<script>標(biāo)簽

[javascript] view plain copy
  1. $(document.createElement("script").attr("src","test.js")).appenChild("head");  
  2. //或  
  3. $("<script type='text/javscript' src='test.js'></script>").appendChild("head");  
上述方法不理想,jQuery又提供了$.getScript()方法
[javascript] view plain copy
  1. $(function(){  
  2.     $("#btn").click(function(){  
  3.         $.getScript("test.js");  
  4.     })  
  5. })  
有回調(diào)函數(shù)
[javascript] view plain copy
  1. $.getScript("test.js",function(){  
  2.     $(element).click(function(){  
  3.         $(element).animate({backgroundcolor:'pink'},1000)  
  4.         .animate({backgroundcolor:'coral'},1000);  
  5.     })  
  6. });  

3.2 $.getJSON()方法    用于加載JSON文件,用法同$.getScript()方法

[javascript] view plain copy
  1. $(function(){  
  2.     $("#btn").click(function(){  
  3.         $.getJSON("test.json");  
  4.     })  
  5. })  

上面函數(shù)雖然加載了JSON代碼,但是并沒有告訴JS對返回的數(shù)據(jù)如何處理,所以需要回調(diào)函數(shù)

[javascript] view plain copy
  1. $(function(){  
  2.     $("#btn").click(function(){  
  3.         $.getJSON("test.json",function(){  
  4.             //data:返回的數(shù)據(jù)  
  5.         });  
  6.     })  
  7. })  

jQuery遍歷方法  -->  $.each()方法    遍歷對象和數(shù)組

$.each(data,callback)    // 為全局函數(shù)   不同于each()方法

  • data:數(shù)組或?qū)ο?
  • callback:回調(diào)函數(shù),有兩個參數(shù)(對象的成員或數(shù)組的索引,對應(yīng)變量或內(nèi)容)

4、$.ajax()方法    jQuery最底層的Ajax實現(xiàn)

$.ajax(options);

參數(shù)名稱  類型  說明
url String (默認(rèn)為當(dāng)前頁地址)發(fā)送請求的地址
type String

 請求方式(POST/GET)默認(rèn)GE

注意其他HTTP請求方法,例如PUT和DELETE,僅部分瀏覽器支持

timeout Number

 設(shè)置請求超時時間(毫秒)

此設(shè)置將覆蓋$.ajaxSetup()方法的全局設(shè)置

data Object/String

 發(fā)送到服務(wù)器的數(shù)據(jù)。如果已經(jīng)不是字符串,將自動轉(zhuǎn)換為字符串格式。

GET請求中將附加在URL后。防止這種自動轉(zhuǎn)換,可以查看processData選項。

對象必須為key/value格式

    例如:{foo1:"bar1",foo2:"bar2"}轉(zhuǎn)換為&foo1=bar1&foo2=bar2。

如果是數(shù)組,jQuery將自動為不同的值對應(yīng)同一個名稱

    例如:{foo:["bar1","bar2"]}轉(zhuǎn)換為&foo=bar1&foo=bar2

dataType String

預(yù)期服務(wù)器返回的數(shù)據(jù)類型。

如果不指定,jQuery將自動根據(jù)HTTP包MIME信息返回responseXML或responseText,

并作為回調(diào)函數(shù)參數(shù)傳遞。

可用類型,

xml:返回XML文檔,可用jQuery處理

html:返回純文本HTML信息,包含的script標(biāo)簽會在插入DOM是執(zhí)行

script:返回純文本的JavaScript代碼,不會自動緩存結(jié)果。除非設(shè)置cache參數(shù)

            注意在遠(yuǎn)程請求時(不在同一個域下),所有POST請求都將轉(zhuǎn)換為GET請求

json:返回json數(shù)據(jù)

jsonp:jsonp格式,使用jsonp形式調(diào)用參數(shù)時,myurl?callback=?

jQuery:將自動替換后一個“?”為正確的函數(shù)名,以執(zhí)行回調(diào)函數(shù)

text:返回純文本字符串

beforeSend Function

發(fā)送請求前可以修改XMLHttpRequest對象的函數(shù)例如添加自定義HTTP頭。

在beforeSend中如果返回false可以取消本次Ajax請求。XMLHttpRequest對象是唯一的函數(shù)

function(XMLHttpRequest){

    this;//調(diào)用本次Ajax請求時傳遞的options參數(shù)

}

complete Function

 請求完成后調(diào)用的函數(shù)(請求成功或失敗時均調(diào)用)

參數(shù):XMLHttpRequest對象和一個描述成功請求類型的字符串

function(XMLHttpRequest,textStatus){

    this;//調(diào)用本次Ajax請求時傳遞的options參數(shù)

}

success Function

請求完成后調(diào)用的函數(shù)(請求成功或失敗時均調(diào)用)

參數(shù):(1) 由服務(wù)器返回,并根據(jù)datatype參數(shù)進(jìn)行設(shè)置

           (2) 描述狀態(tài)的字符串

function(XMLHttpRequest,textStatus){

    //data可能是XMLDoc、jsonObj、html、text等

    this;//調(diào)用本次Ajax請求時傳遞的options參數(shù)

}

error Function

 請求失敗時被調(diào)用的函數(shù)

參數(shù):(1) XMLHttpRequest對象

           (2) 錯誤信息

           (3) 捕獲的錯誤對象(可選)

function(XMLHttpRequest,textStatus,errorThrown){

    //通常情況下textStatus和errorThrown只有其中一個包含信息

    this;//調(diào)用本次Ajax請求時傳遞的options參數(shù)

}

global Boolean

 默認(rèn)為true。表示是否觸發(fā)全局Ajax事件。設(shè)置為false將不會觸發(fā)全局Ajax事件

AjaxStart或AjaxStop可用于控制各種Ajax事件

前面用到的$.load()、$.get()、$.post()、$.getScript()和$.getJSON()這些方法,都是基于$.ajax()方法構(gòu)建的,$.ajax()方法是jQuery最底層的Ajax實現(xiàn),因此可以用它來代替前面的所有方法。

[javascript] view plain copy
  1. $(function(){  
  2.     $("#btn").click(function(){  
  3.         $.getScript("test.js");  
  4.     })  
  5. })  

可被替換為

[javascript] view plain copy
  1. $(function(){  
  2.     $("#btn").click(function(){  
  3.         $.ajax({  
  4.             type:"GET",  
  5.             url:"test.js",  
  6.             dataType:"script"  
  7.         });  
  8.     });  
  9. })  
[javascript] view plain copy
  1. $(function(){  
  2.     $("#btn").click(function(){  
  3.         $.getJSON("test.json",function(data){  
  4.                 $("#resText").empty();  
  5.                 var html = " ";  
  6.                 $.each(data,function(commentIndex,comment){  
  7.                     html+='<div class="comment"><h6>'+comment['username']  
  8.                          +'</h6><p class="para">'+comment['content']  
  9.                          +'</p></div>'  
  10.                 })  
  11.                 $("resText").html(html);  
  12.             }  
  13.         });  
  14.     });  
  15. })  

可被替換為

[javascript] view plain copy
  1. $(function(){  
  2.     $("#btn").click(function(){  
  3.         $.ajax({  
  4.             type:"GET",  
  5.             url:"test.json",  
  6.             dataType:"json",  
  7.             success:function(data){  
  8.                 $("#resText").empty();  
  9.                 var html = " ";  
  10.                 $.each(data,function(commentIndex,comment){  
  11.                     html+='<div class="comment"><h6>'+comment['username']  
  12.                          +'</h6><p class="para">'+comment['content']  
  13.                          +'</p></div>'  
  14.                 })  
  15.                 $("resText").html(html);  
  1. })
} }); });
三、序列化元素

1.serialize()方法

異步提交表單,并將服務(wù)器返回的數(shù)據(jù)顯示到當(dāng)前頁面中

[javascript] view plain copy
  1. $.get("get1.php",{  
  2.     username:$("#username").val(),  
  3.     content:$("#comment").val()  
  4. },function(data,textStatus){  
  5.     // data:返回的內(nèi)容  
  6.     // textStatus:請求狀態(tài),success、error、notmodified、timeout  
  7.     $("#resText").html(data);   //將返回的數(shù)據(jù)添加到頁面上  
  8. });  

serialize()方法也是作用于一個jQuery對象,它能夠?qū)OM元素內(nèi)容序列化為字符串,用于Ajax請求??蓪⑸鲜龃a簡化為:

[javascript] view plain copy
  1. $.get("get1.php",$("#form1").serialize(),function(data,textStatus){  
  2.     // data:返回的內(nèi)容  
  3.     // textStatus:請求狀態(tài),success、error、notmodified、timeout  
  4.     $("#resText").html(data);   //將返回的數(shù)據(jù)添加到頁面上  
  5. });  

serialize()方法作用于jQuery對象,所以不光只有表單能使用它,其他選擇器選取的元素也都能使用它,如以下jQuery代碼:

[javascript] view plain copy
  1. $(":checkbox,:radio").serialize();  

把復(fù)選框和單選框的值序列化為字符串形式,只會將選中的值序列化。

2.serializeArray()方法

該方法不是返回字符串,而是將DOM元素序列化后,返回JSON格式的數(shù)據(jù)

3.$.param()方法

它是serialize()方法的核心,用來對一個數(shù)組或?qū)ο蟀凑誯ey/value進(jìn)行序列化。

比如將一個普通的對象序列化:

四、jQuery中的全局事件

jQuery簡化Ajax操作不僅體現(xiàn)在調(diào)用Ajax方法和處理響應(yīng)方面,而且還體現(xiàn)在對調(diào)用Ajax方法的過程中的HTTP請求的控制。通過jQuery提供的一些自定義全局函數(shù),能夠為各種與Ajax相關(guān)的事件注冊回調(diào)函數(shù)。例如當(dāng)Ajax請求開始時,會觸發(fā)ajaxStart()方法的回調(diào)函數(shù);當(dāng)Ajax請求結(jié)束時,會觸發(fā)ajaxStop()方法的回調(diào)函數(shù)。這些方法都是全局的方法,因此無論創(chuàng)建它們的代碼位于何處,只要有Ajax請求發(fā)生時,就會觸發(fā)它們。

有時,當(dāng)網(wǎng)頁加載過慢時,就需要為網(wǎng)頁添加一個提示信息,常用的提示信息是“加載中…”,代碼如下:

[javascript] view plain copy
  1. <div class="loading">加載中...</div>  
然后通過CSS控制元素隱藏,當(dāng)Ajax請求開始的時候,將此元素顯示,用來提示用戶Ajax請求正在進(jìn)行。當(dāng)Ajax請求結(jié)束后,將此元素隱藏。
[javascript] view plain copy
  1. $("$loading").ajaxStart(function(){  
  2.     $(this).show();  
  3. }).ajaxStop(function(){  
  4.     $(this).hide();  
  5. });  

jQuery的Ajax全局事件中還有幾個方法,也可以在使用Ajax方法的過程中為其帶來方便。


方法名稱  說明
ajaxComplete(callback) Ajax請求完成時執(zhí)行的函數(shù)
ajaxError(callback) Ajax請求發(fā)生錯誤時執(zhí)行的函數(shù),捕捉到的錯誤可以作為最后一個參數(shù)傳遞
ajaxSend(callback) Ajax請求發(fā)送前執(zhí)行的函數(shù)
ajaxSuccess(callback) Ajax請求成功時執(zhí)行的函數(shù)

注意:

1,如果想使某個Ajax請求不受全局方法的影響,那么可以在使用$.ajax(options)方法時,將參數(shù)中的global設(shè)置為false,jQuery代碼如下

[javascript] view plain copy
  1. $.ajax({  
  2.     url:"test.html",  
  3.     global:false  
  4. });  

2,在jQuery1.5版本之后,如果Ajax請求不觸發(fā)全局方法,那么可以設(shè)置:


[javascript] view plain copy
  1. $.ajaxPrefilter(function(options){  
  2.     options.global = true;  
  3. })  

藍(lán)藍(lán)設(shè)計www.yvirxh.cn )是一家專注而深入的界面設(shè)計公司,為期望卓越的國內(nèi)外企業(yè)提供卓越的UI界面設(shè)計、BS界面設(shè)計 、 cs界面設(shè)計 、 ipad界面設(shè)計 、 包裝設(shè)計 、 圖標(biāo)定制 、 用戶體驗 、交互設(shè)計、 網(wǎng)站建設(shè) 平面設(shè)計服務(wù)




獲取json數(shù)據(jù)后在 地圖上打點,根據(jù) json不斷移動點的位置

seo達(dá)人

如果您想訂閱本博客內(nèi)容,每天自動發(fā)到您的郵箱中, 請點這里

<?php echo <<<_END <!doctype html>
<html>
<head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="initial-scale=1.0, user-scalable=no, width=device-width">
    <title>點標(biāo)記</title>
    <link rel="stylesheet" />
    <style>
        .marker {
            color: #ff6600; padding: 4px 10px;
            border: 1px solid #fff; white-space: nowrap;
            font-size: 12px;
            font-family: "";
            background-color: #0066ff;  } </style>
    <script src="http://webapi.amap.com/maps?v=1.3&key=您申請的key值"></script>
    <script type="text/javascript" src="http://cache.amap.com/lbs/static/addToolbar.js"></script>
</head>
<body>
<div id="container"></div>
<script> var marker, map = new AMap.Map("container", {
        resizeEnable: true, center: [126.60580555556, 45.702363888889], zoom: 13 }); var getJSON = function(url) { return new Promise(function(resolve, reject) { var xhr = new XMLHttpRequest();
        xhr.open('get', url, true);
        xhr.responseType = 'json';
        xhr.onload = function() { var status = xhr.status; if (status == 200) {
            resolve(xhr.response);
          } else {
            reject(status);
          }
        };
        xhr.send();
      });
    };

    getJSON('http://web.cellpies.com/api/driving/getVehicleLocationPoints?vehicleDeviceId=0400000000030603&timeType=4&startTime=2017-03-17%2013:00:00&stopTime=2017-03-17%2014:00:00').then(function(jdata) { //alert('Your Json result is:  ' + jdata); //you can comment this, i used it to debug
        //alert(jdata.data[0].gpsx);
        //alert(jdata.data[0].gpsy); window.i=0; //addMarker(jdata.data[i].gpsx,jdata.data[i].gpsy); setInterval(function () { addMarker(jdata.data[window.i].gpsx,jdata.data[window.i].gpsy); },"1000");

    }, function(status) { //error detection.... alert('Something went wrong.');
    }); // 實例化點標(biāo)記 function addMarker(v1,v2) {

     window.i+=10;
        marker = new AMap.Marker({
            icon: "http://webapi.amap.com/theme/v1.3/markers/n/mark_b.png", position: [v1,v2]
        });
        marker.setMap(map);
    } </script>
</body>
</html>

</script>
</body>
</html> _END; ?>

效果圖

-----------------------------------------------------------------------更新---------------------------------------------------------

去掉連續(xù)顯示多個點,每次只顯示一個點

<?php echo<<<_END <!doctype html>
<html>
<head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="initial-scale=1.0, user-scalable=no, width=device-width">
    <title>點標(biāo)記</title>
    <link rel="stylesheet" />
    <style>
        .marker {
            color: #ff6600; padding: 4px 10px;
            border: 1px solid #fff; white-space: nowrap;
            font-size: 12px;
            font-family: "";
            background-color: #0066ff;  } </style>
    <script src="http://webapi.amap.com/maps?v=1.3&key=您申請的key值"></script>
    <script type="text/javascript" src="http://cache.amap.com/lbs/static/addToolbar.js"></script>
</head>
<body>
<div id="container"></div>
<script> var marker, map = new AMap.Map("container", {
        resizeEnable: true, center: [126.60580555556, 45.702363888889], zoom: 13 }); var getJSON = function(url) { return new Promise(function(resolve, reject) { var xhr = new XMLHttpRequest();
        xhr.open('get', url, true);
        xhr.responseType = 'json';
        xhr.onload = function() { var status = xhr.status; if (status == 200) {
            resolve(xhr.response);
          } else {
            reject(status);
          }
        };
        xhr.send();
      });
    };

    getJSON('http://web.cellpies.com/api/driving/getVehicleLocationPoints?vehicleDeviceId=0400000000030603&timeType=4&startTime=2017-03-17%2013:00:00&stopTime=2017-03-17%2014:00:00').then(function(jdata) {
        addMarker(jdata.data[0].gpsx,jdata.data[0].gpsy);
        window.i=1; //updateMarker(jdata.data[1].gpsx,jdata.data[1].gpsy); setInterval(function () { updateMarker(jdata.data[window.i].gpsx,jdata.data[window.i].gpsy); },"1000");

    }, function(status) { //error detection.... alert('Something went wrong.');
    }); // 實例化點標(biāo)記 function addMarker(v1,v2) {

        marker = new AMap.Marker({
            icon: "http://webapi.amap.com/theme/v1.3/markers/n/mark_b.png", position: [v1,v2]
        });
        marker.setMap(map);
    } function updateMarker(v1,v2) { //在地圖上更新標(biāo)記
        // 自定義點標(biāo)記內(nèi)容 window.i+=10; var markerContent = document.createElement("div"); // 點標(biāo)記中的圖標(biāo) var markerImg = document.createElement("img");
        markerImg.className = "markerlnglat";
        markerImg.src = "http://webapi.amap.com/theme/v1.3/markers/n/mark_r.png";
        markerContent.appendChild(markerImg); // 點標(biāo)記中的文本 var markerSpan = document.createElement("span");
        markerSpan.className = 'marker';
        markerSpan.innerHTML = "Hi,我換新裝備啦!";
        markerContent.appendChild(markerSpan);

        marker.setContent(markerContent); //更新點標(biāo)記內(nèi)容 marker.setPosition([v1,v2]); //更新點標(biāo)記位置  } </script>
</body>
</html>

</script>
</body>
</html> _END; ?>

 

涉及setInterval傳參的問題。

發(fā)現(xiàn)用addMarker(jdata.data[i].gpsx,jdata.data[i].gpsy);時程序可正常運(yùn)行,但是將該函數(shù) 放到setInterval中后卻出現(xiàn)了問題,可通過閉包解決。

藍(lán)藍(lán)設(shè)計www.yvirxh.cn )是一家專注而深入的界面設(shè)計公司,為期望卓越的國內(nèi)外企業(yè)提供卓越的UI界面設(shè)計、BS界面設(shè)計 、 cs界面設(shè)計 、 ipad界面設(shè)計 、 包裝設(shè)計 、 圖標(biāo)定制 、 用戶體驗 、交互設(shè)計、 網(wǎng)站建設(shè) 、平面設(shè)計服務(wù)

js瀏覽器兼容問題總結(jié)及解決辦法

seo達(dá)人

如果您想訂閱本博客內(nèi)容,每天自動發(fā)到您的郵箱中, 請點這里

javascript部分

  1. document.form.item 問題 
    問題: 
    代碼中存在 document.formName.item(“itemName”) 這樣的語句,不能在FF下運(yùn)行 
    解決方法: 
    改用 document.formName.elements[“elementName”]

  2. 集合類對象問題 
    問題: 
    代碼中許多集合類對象取用時使用(),IE能接受,F(xiàn)F不能 
    解決方法: 
    改用 [] 作為下標(biāo)運(yùn)算,例:

document.getElementsByName("inputName")(1) 改為 document.getElementsByName("inputName")[1]
    
  • 1
  1. window.event 
    問題: 
    使用 window.event 無法在FF上運(yùn)行 
    解決方法: 
    FF的 event 只能在事件發(fā)生的現(xiàn)場使用,此問題暫無法解決??梢园?event 傳到函數(shù)里變通解決:
onMouseMove = "functionName(event)" function functionName (e) { e = e || window.event;
    ......
}
    
  • 1
  • 2
  • 3
  • 4
  • 5
  1. HTML對象的 id 作為對象名的問題 
    問題: 
    在IE中,HTML對象的 ID 可以作為 document 的下屬對象變量名直接使用,在FF中不能 
    解決方法: 
    使用對象變量時全部用標(biāo)準(zhǔn)的 getElementById(“idName”)

  2. 用 idName 字符串取得對象的問題 
    問題: 
    在IE中,利用 eval(“idName”) 可以取得 id 為 idName 的HTML對象,在FF中不能 
    解決方法: 
    用 getElementById(“idName”) 代替 eval(“idName”)

  3. 變量名與某HTML對象 id 相同的問題 
    問題: 
    在FF中,因為對象 id 不作為HTML對象的名稱,所以可以使用與HTML對象 id 相同的變量名,IE中不能 
    解決方法: 
    在聲明變量時,一律加上 var ,以避免歧義,這樣在IE中亦可正常運(yùn)行 
    最好不要取與HTML對象 id 相同的變量名,以減少錯誤

  4. event.x 與 event.y 問題 
    問題: 
    在IE中,event 對象有x,y屬性,F(xiàn)F中沒有 
    解決方法: 
    在FF中,與 event.x 等效的是 event.pageX ,但event.pageX IE中沒有 
    故采用 event.clientX 代替 event.x ,在IE中也有這個變量 
    event.clientX 與 event.pageX 有微妙的差別,就是滾動條 
    要完全一樣,可以這樣: 
    mX = event.x ? event.x : event.pageX; 
    然后用 mX 代替 event.x

  5. 關(guān)于frame 
    問題: 
    在IE中可以用 window.testFrame 取得該frame,F(xiàn)F中不行 
    解決方法:

window.top.document.getElementById("testFrame").src = 'xx.htm' window.top.frameName.location = 'xx.htm'
    
  • 1
  • 2
  1. 取得元素的屬性 
    在FF中,自己定義的屬性必須 getAttribute() 取得

  2. 在FF中沒有 parentElement,parement.children 而用 parentNode,parentNode.childNodes 
    問題: 
    childNodes 的下標(biāo)的含義在IE和FF中不同,F(xiàn)F的 childNodes 中會插入空白文本節(jié)點 
    解決方法: 
    可以通過 node.getElementsByTagName() 來回避這個問題 
    問題: 
    當(dāng)html中節(jié)點缺失時,IE和FF對 parentNode 的解釋不同,例如:

<form> <table> <input/> </table> </form>
    
  • 1
  • 2
  • 3
  • 4
  • 5

FF中 input.parentNode 的值為form,而IE中 input.parentNode 的值為空節(jié)點 
問題: 
FF中節(jié)點自己沒有 removeNode 方法 
解決方法: 
必須使用如下方法 node.parentNode.removeChild(node)

  1. const 問題 
    問題: 
    在IE中不能使用 const 關(guān)鍵字 
    解決方法: 
    以 var 代替

  2. body 對象 
    FF的 body 在 body 標(biāo)簽沒有被瀏覽器完全讀入之前就存在,而IE則必須在 body 完全被讀入之后才存在 
    這會產(chǎn)生在IE下,文檔沒有載入完時,在body上appendChild會出現(xiàn)空白頁面的問題 
    解決方法: 
    一切在body上插入節(jié)點的動作,全部在onload后進(jìn)行

  3. url encoding 
    問題: 
    一般FF無法識別js中的& 
    解決方法: 
    在js中如果書寫url就直接寫&不要寫&

  4. nodeName 和 tagName 問題 
    問題: 
    在FF中,所有節(jié)點均有 nodeName 值,但 textNode 沒有 tagName 值,在IE中,nodeName 的使用有問題 
    解決方法: 
    使用 tagName,但應(yīng)檢測其是否為空

  5. 元素屬性 
    IE下 input.type 屬性為只讀,但是FF下可以修改

  6. document.getElementsByName() 和 document.all[name] 的問題 
    問題: 
    在IE中,getElementsByName()、document.all[name] 均不能用來取得 div 元素 
    是否還有其它不能取的元素還不知道(這個問題還有爭議,還在研究中)

  7. 調(diào)用子框架或者其它框架中的元素的問題 
    在IE中,可以用如下方法來取得子元素中的值

document.getElementById("frameName").(document.)elementName
window.frames["frameName"].elementName
    
  • 1
  • 2

在FF中則需要改成如下形式來執(zhí)行,與IE兼容:

window.frames["frameName"].contentWindow.document.elementName window.frames["frameName"].document.elementName
    
  • 1
  • 2
  1. 對象寬高賦值問題 
    問題: 
    FireFox中類似 obj.style.height = imgObj.height 的語句無效 
    解決方法: 
    統(tǒng)一使用 obj.style.height = imgObj.height + “px”;

  2. innerText的問題 
    問題: 
    innerText 在IE中能正常工作,但是 innerText 在FireFox中卻不行 
    解決方法: 
    在非IE瀏覽器中使用textContent代替innerText

  3. event.srcElement和event.toElement問題 
    問題: 
    IE下,even對象有srcElement屬性,但是沒有target屬性;Firefox下,even對象有target屬性,但是沒有srcElement屬性 
    解決方法:

var source = e.target || e.srcElement; var target = e.relatedTarget || e.toElement;
    
  • 1
  • 2
  1. 禁止選取網(wǎng)頁內(nèi)容 
    問題: 
    FF需要用CSS禁止,IE用JS禁止 
    解決方法:
IE: obj.onselectstart = function() {return false;}
FF: -moz-user-select:none;
    
  • 1
  • 2
  1. 捕獲事件 
    問題: 
    FF沒有setCapture()、releaseCapture()方法 
    解決方法:
IE: obj.setCapture(); obj.releaseCapture(); FF: window.captureEvents(Event.MOUSEMOVE|Event.MOUSEUP); window.releaseEvents(Event.MOUSEMOVE|Event.MOUSEUP); if (!window.captureEvents) {
           o.setCapture(); }else {
           window.captureEvents(Event.MOUSEMOVE|Event.MOUSEUP); }
    if (!window.captureEvents) {
           o.releaseCapture(); }else {
           window.releaseEvents(Event.MOUSEMOVE|Event.MOUSEUP); }
    
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

CSS部分

div類

  1. 居中問題 
    div里的內(nèi)容,IE默認(rèn)為居中,而FF默認(rèn)為左對齊 
    可以嘗試增加代碼margin:auto

  2. 高度問題 
    兩上下排列或嵌套的div,上面的div設(shè)置高度(height),如果div里的實際內(nèi)容大于所設(shè)高度,在FF中會出現(xiàn)兩個div重疊的現(xiàn)象;但在IE中,下面的div會自動給上面的div讓出空間 
    所以為避免出現(xiàn)層的重疊,高度一定要控制恰當(dāng),或者干脆不寫高度,讓他自動調(diào)節(jié),比較好的方法是 height:100%; 
    但當(dāng)這個div里面一級的元素都float了的時候,則需要在div塊的最后,閉和前加一個沉底的空div,對應(yīng)CSS是:

.float_bottom { clear:both; font-size:0px; margin:0; line-height:0px; }
    
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  1. clear:both; 
    不想受到float浮動的,就在div中寫入clear:both;

  2. IE浮動 margin 產(chǎn)生的雙倍距離

#box { float:left; width:100px; margin:0 0 0 100px; //這種情況之下IE會產(chǎn)生200px的距離 display:inline; //使浮動忽略 }
    
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  1. padding 問題 
    FF設(shè)置 padding 后,div會增加 height 和 width,但I(xiàn)E不會 (* 標(biāo)準(zhǔn)的 XHTML1.0 定義 dtd 好像一致了) 
    高度控制恰當(dāng),或嘗試使用 height:100%; 
    寬度減少使用 padding 
    但根據(jù)實際經(jīng)驗,一般FF和IE的 padding 不會有太大區(qū)別,div 的實際寬 = width + padding ,所以div寫全 width 和 padding,width 用實際想要的寬減去 padding 定義

  2. div嵌套時 y 軸上 padding 和 marign 的問題 
    FF里 y 軸上 子div 到 父div 的距離為 父padding + 子marign 
    IE里 y 軸上 子div 到 父div 的距離為 父padding 和 子marign 里大的一個 
    FF里 y 軸上 父padding=0 且 border=0 時,子div 到 父div 的距離為0,子marign 作用到 父div 外面

  3. padding,marign,height,width 的傻瓜式解決技巧 
    注意是技巧,不是方法: 
    寫好標(biāo)準(zhǔn)頭

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml">
    
  • 1
  • 2

高盡量用padding,慎用margin,height盡量補(bǔ)上100%,父級height有定值子級height不用100%,子級全為浮動時底部補(bǔ)個空clear:both的div 
寬盡量用margin,慎用padding,width算準(zhǔn)實際要的減去padding

列表類

  1. ul 標(biāo)簽在FF中默認(rèn)是有 padding 值的,而在IE中只有margin有值 
    先定義 ul {margin:0;padding:0;}

  2. ul和ol列表縮進(jìn)問題 
    消除ul、ol等列表的縮進(jìn)時,樣式應(yīng)寫成: {list-style:none;margin:0px;padding:0px;}

顯示類

  1. display:block,inline 兩個元素 
    display:block; //可以為內(nèi)嵌元素模擬為塊元素 
    display:inline; //實現(xiàn)同一行排列的的效果 
    display:table; //for FF,模擬table的效果 
    display:block 塊元素,元素的特點是: 
    總是在新行上開始; 
    高度,行高以及頂和底邊距都可控制; 
    寬度缺省是它的容器的100%,除非設(shè)定一個寬度

IE: filter: progid: DXImageTransform.Microsoft.Alpha(style=0,opacity=60); IE: filter: alpha(opacity=10); FF: opacity:0.6; FF: -moz-opacity:0.10;
    
  • 1
  • 2
  • 3
  • 4

最好兩個都寫,并將opacity屬性放在下面


css和js的瀏覽器兼容問題匯總2009-05-31 13:48首先談一下瀏覽器,雖然現(xiàn)在ie依然是瀏覽器市場的老大,大約占有67%的份額,但是由于其各方面的欠缺,用戶開始選擇其他瀏覽器作為自己瀏覽網(wǎng)頁的主要 工具,比如firefox、theworld、maxthon、chrome、opera等等,在用戶使用比較多的瀏覽器中,分為2大派系 - ie內(nèi)核和非ie內(nèi)核,像theworld、maxthon、greenbrower等等都屬于ie內(nèi)核,而firefox、chrome、opera則 為非ie內(nèi)核,眾多的瀏覽器使我們的web程序就出現(xiàn)了兼容問題,像ie就有ie 6、ie7、ie8之分,同樣的樣式控制和js腳本,在不同的ie版本中也會出現(xiàn)不同的效果,甚至bug,何況在非ie內(nèi)核的firefox、 chrome、opera了。從市場份額分析,目前ie依然是瀏覽器市場老大,并會在很長一段時間內(nèi)很難改變,不過我們不能忽略firefox以及其他瀏 覽器的快速成長,未來我們沒有辦法估計,很多初級用戶還沒有看到其他非ie內(nèi)核的優(yōu)勢,當(dāng)他們發(fā)現(xiàn)時,我們的在去滿足他們的需求是否已經(jīng)晚了呢,所以我們 必須做到多瀏覽器的兼容?,F(xiàn)在市場上大多web開發(fā)著選擇兼容ie7和firefox作為主要兼容對象,這兩款也是目前用戶使用最多的,那好我們就主要講 兼容這兩款瀏覽器。

眾多的瀏覽器使我們就要面臨多種瀏覽器測試的尷尬,比如ie在一臺機(jī)器上只能安裝一個版本,我們要測試程序在ie 3個版本中的顯示效果,就要在安裝3個版本的機(jī)器上分別測試將是一件非常繁瑣的事情,這里推薦一款工具,ietester可以同時測試3個版本的ie程 序,非常不錯。至于其他瀏覽器在同一臺機(jī)器上安裝是沒有問題的,所以我們準(zhǔn)備好了測試環(huán)境。

Firefox是一款有著豐富插件的瀏覽器,這里我推薦3款web開發(fā)人員必備的開發(fā)工具 - Firebug、web developer、ie tab。 
Firebug 是Firefox下的一款開發(fā)類插件,現(xiàn)屬于Firefox的五星級強(qiáng)力推薦插件之一。它集HTML查看和編輯、Javascript控制臺、網(wǎng)絡(luò)狀況監(jiān) 視器于一體,是開發(fā)JavaScript、CSS、HTML和 Ajax的得力助手。Firebug如同一把精巧的瑞士軍刀,從各個不同的角度剖析Web頁面內(nèi)部的細(xì)節(jié)層面,給Web開發(fā)者帶來很大的便利。 
Web Developer 插件以工具欄的形式對網(wǎng)頁的(X)HTML、腳本、多媒體、CSS、緩存、圖象等多方面的實用工具。使我們能輕易的獲得網(wǎng)頁的更多信息,使我們進(jìn)一步的了解當(dāng)前所瀏覽的網(wǎng)頁。 
ie tab是firefox下一款firefox和ie互相切換的插件,這樣開發(fā)人員可以很輕松的一鍵查看2中主流瀏覽器的兼容效果。 
以上3款工具具體使用方法到Google、baidu中搜索使用關(guān)鍵字即可。 
debugBar是在ie中類似firebug的工具,不過功能就差很遠(yuǎn)了,不過這里也推薦一下。

Firefox瀏覽器良好支持W3C標(biāo)準(zhǔn),是目前對CSS支持最好的瀏覽器,而ie是出現(xiàn)的比較早,在w3c支持方面做的一直不是很好,所以兩種瀏覽器在很多方面不盡相同。 
下面總結(jié)一下這兩種瀏覽器的兼容問題: 
1.集合類對象問題 
說明:IE下,可以使用()或[]獲取集合類對象; 
Firefox下,只能使用[]獲取集合類對象. 
解決方法:統(tǒng)一使用[]獲取集合類對象.

2.HTML對象獲取問題 
FireFox:document.getElementById(“idName”); 
ie:document.idname或者document.getElementById(“idName”). 
解決辦法:統(tǒng)一使用document.getElementById(“idName”);

3.const問題 
說明:Firefox下,可以使用const關(guān)鍵字或var關(guān)鍵字來定義常量; 
IE下,只能使用var關(guān)鍵字來定義常量. 
解決方法:統(tǒng)一使用var關(guān)鍵字來定義常量.

4.window.event問題 
說明:window.event只能在IE下運(yùn)行,而不能在Firefox下運(yùn)行,這是因為Firefox的event只能在事件發(fā)生的現(xiàn)場使用. Firefox必須從源處加入event作參數(shù)傳遞。Ie忽略該參數(shù),用window.event來讀取該event。 
解決方法: 
IE&Firefox: 
Submitted(event)”/> …

function Submitted(evt) { evt=evt?evt:(window.event?window.event:null); }

5.event.x與event.y問題 
說明:IE下,even對象有x,y屬性,但是沒有pageX,pageY屬性; 
Firefox下,even對象有pageX,pageY屬性,但是沒有x,y屬性. 
解決方法:使用mX(mX = event.x ? event.x : event.pageX;)來代替IE下的event.x或者Firefox下的event.pageX.

6.event.srcElement問題 
說明:IE下,event對象有srcElement屬性,但是沒有target屬性; 
Firefox下,even對象有target屬性,但是沒有srcElement屬性. 
解 決方法:使用obj(obj = event.srcElement ? event.srcElement : event.target;)來代替IE下的event.srcElement或者Firefox下的event.target. 請同時注意event的兼容性問題。

7.window.location.href問題 
說明:IE或者Firefox2.0.x下,可以使用window.location或window.location.href; 
Firefox1.5.x下,只能使用window.location. 
解決方法:使用window.location來代替window.location.href.

8.模態(tài)和非模態(tài)窗口問題 
說明:IE下,可以通過showModalDialog和showModelessDialog打開模態(tài)和非模態(tài)窗口;Firefox下則不能. 
解決方法:直接使用window.open(pageURL,name,parameters)方式打開新窗口。 
如果需要將子窗口中的參數(shù)傳遞回父窗口,可以在子窗口中使用window.opener來訪問父窗口. 
例如:var parWin = window.opener; parWin.document.getElementById(“Aqing”).value = “Aqing”;

9.frame問題 
以下面的frame為例: 

(1)訪問frame對象: 
IE:使用window.frameId或者window.frameName來訪問這個frame對象. frameId和frameName可以同名。 
Firefox:只能使用window.frameName來訪問這個frame對象. 
另外,在IE和Firefox中都可以使用window.document.getElementById(“frameId”)來訪問這個frame對象.

(2)切換frame內(nèi)容: 
在 IE和Firefox中都可以使用window.document.getElementById(“testFrame”).src = “xxx.html”或window.frameName.location = “xxx.html”來切換frame的內(nèi)容. 
如果需要將frame中的參數(shù)傳回父窗口(注意不是opener,而是parent frame),可以在frame中使用parent來訪問父窗口。例如:parent.document.form1.filename.value=”Aqing”;

10.body問題 
Firefox的body在body標(biāo)簽沒有被瀏覽器完全讀入之前就存在;而IE的body則必須在body標(biāo)簽被瀏覽器完全讀入之后才存在.

  1. 事件委托方法 
    IE:document.body.onload = inject; //Function inject()在這之前已被實現(xiàn) 
    Firefox:document.body.onload = inject();

  2. firefox與IE的父元素(parentElement)的區(qū)別 
    IE:obj.parentElement 
    firefox:obj.parentNode 
    解決方法: 因為firefox與IE都支持DOM,因此使用obj.parentNode是不錯選擇.

13.cursor:hand VS cursor:pointer 
firefox不支持hand,但ie支持pointer 
解決方法: 統(tǒng)一使用pointer

14.innerText在IE中能正常工作,但是innerText在FireFox中卻不行. 需用textContent。 
解決方法: 
if(navigator.appName.indexOf(“Explorer”) > -1){ 
document.getElementById(‘element’).innerText = “my text”; 
} else{ 
document.getElementById(‘element’).textContent = “my text”; 
}

  1. FireFox中設(shè)置HTML標(biāo)簽的style時,所有位置性和字體尺寸的值必須后跟px。這個ie也是支持的。

  2. ie,firefox以及其它瀏覽器對于 table 標(biāo)簽的操作都各不相同, 
    在ie中不允許對table和tr的innerHTML賦值,使用js增加一個tr時,使用appendChild方法也不管用。 
    解決方法:

//向table追加一個空行:
var   row   =   otable.insertRow(-1); var   cell   =   document.createElement("td"); cell.innerHTML = "   ";  cell.className = "XXXX";  row.appendChild(cell);
    
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  1. padding 問題 
    padding 5px 4px 3px 1px FireFox無法解釋簡寫, 
    必須改成 padding-top:5px; padding-right:4px; padding-bottom:3px; padding-left:1px;

  2. 消除ul、ol等列表的縮進(jìn)時 
    樣式應(yīng)寫成:list-style:none;margin:0px;padding:0px; 
    其中margin屬性對IE有效,padding屬性對FireFox有效

  3. CSS透明 
    IE:filter:progid:DXImageTransform.Microsoft.Alpha(style=0,opacity=60)。 
    FF:opacity:0.6。

  4. CSS圓角 
    IE:不支持圓角。

FF: -moz-border-radius:4px,或者-moz-border-radius-topleft:4px;-moz-border- radius-topright:4px;-moz-border-radius-bottomleft:4px;-moz-border-radius- bottomright:4px;。
    
  • 1
  1. CSS雙線凹凸邊框
IE:border:2px   outset;。 
FF: -moz-border-top-colors: #d4d0c8 white;-moz-border-left-colors: #d4d0c8 white;-moz-border-right-colors:#404040 #808080;-moz-border-bottom-colors:#404040 #808080;
    
  • 1
  • 2
  1. 對select的options集合操作 
    枚 舉元素除了[]外,SelectName.options.item()也是可以的, 另外SelectName.options.length, SelectName.options.add/remove都可以在兩種瀏覽器上使用。注意在add后賦值元素,否則會失敗。

  2. XMLHTTP的區(qū)別

//mf if (window.XMLHttpRequest)  //mf {
    xmlhttp=new XMLHttpRequest()
    xmlhttp.onreadystatechange=xmlhttpChange
    xmlhttp.open("GET",url,true)
    xmlhttp.send(null)
    } //ie else if (window.ActiveXObject)  //   code   for   IE {
    xmlhttp=new ActiveXObject("Microsoft.XMLHTTP") if (xmlhttp)
        {
        xmlhttp.onreadystatechange=xmlhttpChange
        xmlhttp.open("GET",url,true)
        xmlhttp.send()
        }
    }
} 
    
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21

24.css中的width和padding 
在IE7和FF中width寬度不包括padding,在Ie6中包括padding.

25.css hack 
根據(jù)不同瀏覽器對CSS樣式的支持程度,解析結(jié)果和識別CSS的優(yōu)先級不同,設(shè)計師們就可以根據(jù)這些不同瀏覽器 的特點來書寫不同的CSS樣式代碼。IE6能識別下劃線和星號*,IE7能識別星號*,不能識別下劃線,而firefox兩個都不能識別,如此,就可 以針對IE6.IE7和FF通過對這些特殊符號的使用寫不同的代碼了。

<style> div{ background:green; /* for FireFox */ *background:red; /* for IE7 */ _background:blue; /* for IE6 */ } </style>
    
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

該樣式顯示的效果是:在FireFox中背景色為green;在IE7中背景色為red;在IE6中背景色為blue。

此外,!important聲明也可以很好地提升指定樣式規(guī)則的應(yīng)用優(yōu)先權(quán)。在IE6和FF中用!important聲明可以提高優(yōu)先級別,但在 IE6中 的!important聲明會被之后的同名屬性定義替換。所以,通過*和!important聲明兩者的搭配也可以很好地解決IE6,IE7和FF三者之 間的兼容性問題。

區(qū)別FF,IE7,IE6:background:red; *background:green !important; *background:blue;

注:IE都能識別;FF不能識別;IE6能識別,但不能識別 !important;IE7能識別,也能識別!important;FF不能識別*,但能識別!important;

針對IE7/firefox 在css的前面加 [xmlns], 如下面的left屬性,如果我想要只針對IE7/firefox起作用,寫法如下: 
[xmlns] #left { 
float:left; 
border:4px solid #999; 
padding:5px; 
width:200px; 
height:200px; 

只針對IE6起作用,可以在css前面加* html,如: 
* html #left { 
clear:both; 
}

只針對IE7起作用,在css里前面加*+html,如: 
*+html #left { 
clear:both; 
}

書寫的順序都是FireFox的寫在前面,IE7的寫在中間,IE6的寫在最后面。

26.使用IE專用的條件注釋

<!--其他瀏覽器 --> <link rel="stylesheet" type="text/css" href="css.css" /> <!--[if IE 7]> 
<!-- 適合于IE7 --> <link rel="stylesheet" type="text/css" href="ie7.css" /> <![endif]--> <!--[if lte IE 6]> 
<!-- 適合于IE6及一下 --> <link rel="stylesheet" type="text/css" href="ie.css" /> <![endif]-->
    
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

27.div 的垂直居中問題: vertical-align:middle; 將行距增加到和整個DIV一樣高 line-height:200px; 然后插入文字,就垂直居中了。缺點是要控制內(nèi)容不要換行

28.cursor: pointer 可以同時在 IE FF 中顯示游標(biāo)手指狀, hand 僅 IE 可以

29.FF: 鏈接加邊框和背景色,需設(shè)置 display: block, 同時設(shè)置 float: left 保證不換行。參照 menubar, 給 a 和 menubar 設(shè)置高度是為了避免底邊顯示錯位, 若不設(shè) height, 可以在 menubar 中插入一個空格。

30.在mozilla firefox和IE中的BOX模型解釋不一致導(dǎo)致相差2px解決方法:div{margin:30px!important;margin:28px;} 
注意這兩個margin的順序一定不能寫反,據(jù)阿捷的說法!important這個屬性IE不能識別,但別的瀏覽器可以識別。所以在IE下其實解釋成這樣:div{maring:30px;margin:28px} 
重復(fù)定義的話按照最后一個來執(zhí)行,所以不可以只寫margin:XXpx!important;

31.IE5 和IE6的BOX解釋不一致 
IE5下div{width:300px;margin:0 10px 0 10px;} 
div 的寬度會被解釋為300px-10px(右填充)-10px(左填充)最終div的寬度為280px,而在IE6和其他瀏覽器上寬度則是以 300px+10px(右填充)+10px(左填充)=320px來計算的。這時我們可以做如下修改 div{width:300px!important;width /**/:340px;margin:0 10px 0 10px}

藍(lán)藍(lán)設(shè)計www.yvirxh.cn )是一家專注而深入的界面設(shè)計公司,為期望卓越的國內(nèi)外企業(yè)提供卓越的UI界面設(shè)計、BS界面設(shè)計 、 cs界面設(shè)計 、 ipad界面設(shè)計 、 包裝設(shè)計 、 圖標(biāo)定制 、 用戶體驗 、交互設(shè)計、 網(wǎng)站建設(shè) 、平面設(shè)計服務(wù)


網(wǎng)站內(nèi)部結(jié)構(gòu)優(yōu)化_如何優(yōu)化網(wǎng)站的內(nèi)部結(jié)構(gòu)

seo達(dá)人

如果您想訂閱本博客內(nèi)容,每天自動發(fā)到您的郵箱中, 請點這里

如何優(yōu)化網(wǎng)站的內(nèi)部結(jié)構(gòu)?網(wǎng)站內(nèi)部結(jié)構(gòu)優(yōu)化是網(wǎng)站SEO過程中不可缺少的環(huán)節(jié),在網(wǎng)站建設(shè)的初期就要做好設(shè)置工作。網(wǎng)站內(nèi)部結(jié)構(gòu)的優(yōu)化主要包括:網(wǎng)站結(jié)構(gòu)、頁面元素、后期優(yōu)化等,下面就從這幾個方面為大家講解,希望能給一些不了解的朋友提供實質(zhì)性的指導(dǎo)作用。

      1、結(jié)構(gòu)目錄

目錄的設(shè)計是網(wǎng)站建設(shè)中很關(guān)鍵的環(huán)節(jié),是一個網(wǎng)站的骨架,所以網(wǎng)站目錄直接關(guān)系到用戶的體驗。建議:目錄的組織結(jié)構(gòu)從首頁到內(nèi)容頁點擊不超過三次,也就是三級:首頁-欄目頁-內(nèi)容頁。目錄名可采用網(wǎng)站的一些核心產(chǎn)品詞。

2、鏈接

我們說一個網(wǎng)站的優(yōu)化最重要的兩點是什么?對,是鏈接和關(guān)鍵詞。如果說目錄是一個網(wǎng)站的骨架,那么鏈接就是網(wǎng)站的血液。建議:網(wǎng)站鏈接的設(shè)置以英文形式展現(xiàn),簡短易懂,使用靜態(tài)化URL,迎合搜索引擎的喜好,更好的服務(wù)于網(wǎng)站優(yōu)化。

3、robots協(xié)議

robots.txt相當(dāng)于網(wǎng)站的一張臉,一張接客的臉,接的搜索引擎的蜘蛛(或機(jī)器人、爬蟲)。它是一種抓取協(xié)議文件,用于告訴搜索引擎spider,此網(wǎng)站中的哪些內(nèi)容是不應(yīng)被搜索引擎的索引,哪些是可以被索引的。

現(xiàn)在很多地方都有自動生成工具,百度站長工具,或者一些插件等,根據(jù)自己的喜好選擇使用。這里有一個小技巧,將網(wǎng)站的地圖鏈接放置在robots內(nèi),對網(wǎng)站的收錄絕對是不小的幫助。具體方法:在最后一行增加 Sitemap:http://www.example.com/sitemap.xml。

4、Sitemaps

Sitemaps就是一個管家,總結(jié)統(tǒng)計網(wǎng)站的數(shù)據(jù)鏈接,將匯總的結(jié)果更好的展現(xiàn)給網(wǎng)站的客人-搜索引擎spider。

Sitemaps一般有html與XML兩種格式。目前百度、Google、雅虎、微軟等搜索引擎都支持Sitemaps,Sitemaps的提交可以通過各個搜索引擎的站長平臺提交,也可以將其地址放在robots.txt文件里,上面已經(jīng)說過了。

5、404頁面

  404頁面是客戶端在瀏覽網(wǎng)頁時,服務(wù)器無法正常提供信息,或是服務(wù)器無法回應(yīng),且不知道原因所返回的頁面。據(jù)說在第三次科技革命之前,互聯(lián)網(wǎng)的形態(tài)就是一個大型的中央數(shù)據(jù)庫,這個數(shù)據(jù)庫就設(shè)置在404房間里面。那時候所有的請求都是由人工手動完成的,如果在數(shù)據(jù)庫中沒有找到請求者所需要的文件,或者由于請求者寫錯了文件編號,用戶就會得到一個返回信息:room 404 : file not found。404錯誤信息通常是在目標(biāo)頁面被更改或移除,或客戶端輸入頁面地址錯誤后顯示的頁面,人們也就習(xí)慣了用404作為服務(wù)器未找到文件的錯誤代碼了。當(dāng)然實際考證傳說中的room 404是不存在的,在http請求3位的返回碼中,4開頭的代表客戶錯誤,5開頭代表服務(wù)器端錯誤。

6、nofollow標(biāo)簽

nofollow標(biāo)簽是盡量減少垃圾鏈接對搜索引擎的影響,當(dāng)超鏈接中出現(xiàn)nofollow標(biāo)簽后,搜索引擎會不考慮這些鏈接的權(quán)重,也不用使用這些鏈接用于排名。

nofollow標(biāo)簽通常有兩種使用方法:一種方法是將"nofollow"寫在網(wǎng)頁上的meta標(biāo)簽上,例如:。另一種方法是將"nofollow"放在超鏈接中,例如: 。

需要注意的是,如果一個網(wǎng)站鏈向了某些被搜索引擎認(rèn)為是垃圾網(wǎng)站的地址,那么這個網(wǎng)站的權(quán)重也會受到影響。因此對于一個網(wǎng)站來說,nofollow標(biāo)簽的使用十分必要。

7、統(tǒng)計代碼

網(wǎng)站統(tǒng)計分析工具應(yīng)該是每一位站長都了解的,現(xiàn)在常用的就是百度統(tǒng)計、cnzz、谷歌分析、51等,具體的就不做介紹了。網(wǎng)站統(tǒng)計代碼添加時,為了不 影響網(wǎng)站的加載速度,最好放在網(wǎng)站底部。

      相關(guān)拓展:關(guān)鍵詞的爬行和抓取

       搜索引擎派出一個能夠在網(wǎng)上發(fā)現(xiàn)新網(wǎng)頁并抓文件的程序,這個程序通常稱之為蜘蛛。搜索引擎從已知的數(shù)據(jù)庫出發(fā),就像正常用戶的瀏覽器一樣訪問這些網(wǎng)頁并抓取文件。搜索引擎會跟蹤網(wǎng)頁中的鏈接,訪問更多的網(wǎng)頁,這個過程就叫爬行。這些新的網(wǎng)址會被存入數(shù)據(jù)庫等待抓取。所以跟蹤網(wǎng)頁鏈接是搜索引擎蜘蛛發(fā)現(xiàn)新網(wǎng)址的最基本的方法,所以反向鏈接成為搜索引擎優(yōu)化的最基本因素之一。沒有反向鏈接,搜索引擎連頁面都發(fā)現(xiàn)不了,就更談不上排名了。

       搜索引擎抓取的頁面文件與用戶瀏覽器得到的完全一樣,抓取的文件存入數(shù)據(jù)庫。

藍(lán)藍(lán)設(shè)計www.yvirxh.cn )是一家專注而深入的界面設(shè)計公司,為期望卓越的國內(nèi)外企業(yè)提供卓越的UI界面設(shè)計、BS界面設(shè)計 、 cs界面設(shè)計 、 ipad界面設(shè)計 、 包裝設(shè)計 、 圖標(biāo)定制 、 用戶體驗 、交互設(shè)計、 網(wǎng)站建設(shè) 平面設(shè)計服務(wù)

如何搞定響應(yīng)式網(wǎng)頁的布局設(shè)計?

seo達(dá)人

如果您想訂閱本博客內(nèi)容,每天自動發(fā)到您的郵箱中, 請點這里

編者按:作為今年大熱的設(shè)計趨勢,響應(yīng)式已然是設(shè)計師的標(biāo)配技能。今天阿里的同學(xué)從響應(yīng)式設(shè)計的布局類型、布局實現(xiàn)兩方面深入講解,有哪些實現(xiàn)布局的方式,該采用何種方式,都有相當(dāng)專業(yè)細(xì)致的解答,不多說,來收 >>>

Heyuchan :在談響應(yīng)式布局前,我們先梳理下網(wǎng)頁設(shè)計中整體頁面排版布局,常見的主要有如下幾種類型:

布局類型


640?wx_fmt=png&wxfrom=5&wx_lazy=1

布局實現(xiàn)


采用何種方式實現(xiàn)布局設(shè)計,也有不同的方式,這里基于頁面的實現(xiàn)單位而言,分為四種類型:固定布局、可切換的固定布局、彈性布局、混合布局。

?固定布局:以像素作為頁面的基本單位,不管設(shè)備屏幕及瀏覽器寬度,只設(shè)計一套尺寸;


?可切換的固定布局:同樣以像素作為頁面單位,參考主流設(shè)備尺寸,設(shè)計幾套不同寬度的布局。通過設(shè)別的屏幕尺寸或瀏覽器寬度,選擇最合適的那套寬度布局;


?彈性布局:以百分比作為頁面的基本單位,可以適應(yīng)一定范圍內(nèi)所有尺寸的設(shè)備屏幕及瀏覽器寬度,并能完美利用有效空間展現(xiàn)最佳效果;


?混合布局:同彈性布局類似,可以適應(yīng)一定范圍內(nèi)所有尺寸的設(shè)備屏幕及瀏覽器寬度,并能完美利用有效空間展現(xiàn)最佳效果;只是混合像素、和百分比兩種單位作為頁面單位。


640?wx_fmt=png

可切換的固定布局、彈性布局、混合布局都是目前可被采用的響應(yīng)式布局方式。

其中可切換的固定布局的實現(xiàn)成本,但拓展性比較差;而彈性布局與混合布局效果具響應(yīng)性,都是比較理想的響應(yīng)式布局實現(xiàn)方式。

只是對于不同類型的頁面排版布局實現(xiàn)響應(yīng)式設(shè)計,需要采用不用的實現(xiàn)方式。通欄、等分結(jié)構(gòu)的適合采用彈性布局方式、而對于非等分的多欄結(jié)構(gòu)往往需要采用混合布局的實現(xiàn)方式。

640?wx_fmt=png

布局響應(yīng) 對頁面進(jìn)行響應(yīng)式的設(shè)計實現(xiàn),需要對相同內(nèi)容進(jìn)行不同寬度的布局設(shè)計,有兩種方式:

桌面優(yōu)先(從桌面端開始向下設(shè)計);

移動優(yōu)先(從移動端向上設(shè)計);

 無論基于那種模式的設(shè)計,要兼容所有設(shè)備,布局響應(yīng)時不可避免地需要對模塊布局做一些變化(發(fā)生布局改變的臨界點稱之為斷點), 我們通過JS獲取設(shè)備的屏幕寬度,來改變網(wǎng)頁的布局,這一過程我們可以稱之為布局響應(yīng)屏幕。

常見的主要有如下幾種方式:

布局不變,即頁面中整體模塊布局不發(fā)生變化,主要有:

?模塊中內(nèi)容:擠壓-拉伸;

?模塊中內(nèi)容:換行-平鋪;

?模塊中內(nèi)容:刪減-增加;

640?wx_fmt=png640?wx_fmt=png640?wx_fmt=png

布局改變,即頁面中的整體模塊布局發(fā)生變化,主要有:

?模塊位置變換;

?模塊展示方式改變:隱藏-展開;

?模塊數(shù)量改變:刪減-增加;

640?wx_fmt=png640?wx_fmt=png640?wx_fmt=png

很多時候,單一方式的布局響應(yīng)無法滿足理想效果,需要結(jié)合多種組合方式,但原則上盡可能時保持簡單輕巧,而且同一斷點內(nèi)(發(fā)生布局改變的臨界點稱之為斷點)保持統(tǒng)一邏輯。

否則頁面實現(xiàn)得太過復(fù)雜,也會影響整體體驗和頁面性能。

藍(lán)藍(lán)設(shè)計www.yvirxh.cn )是一家專注而深入的界面設(shè)計公司,為期望卓越的國內(nèi)外企業(yè)提供卓越的UI界面設(shè)計、BS界面設(shè)計 、 cs界面設(shè)計 、 ipad界面設(shè)計 、 包裝設(shè)計 、 圖標(biāo)定制 、 用戶體驗 、交互設(shè)計、 網(wǎng)站建設(shè) 、平面設(shè)計服務(wù)

ES6(一):Promise對象

seo達(dá)人

如果您想訂閱本博客內(nèi)容,每天自動發(fā)到您的郵箱中, 請點這里

介紹Promise

promise的概念和實現(xiàn)最初來源于社區(qū),用于解決異步編程的回調(diào)嵌套問題,即將多級的嵌套改良成順序的代碼行。ES6將其寫入了語言標(biāo)準(zhǔn),統(tǒng)一了用法,提供了原生的Promise。

Promise是一個構(gòu)造函數(shù),用于生成一個Promise實例。Promise實例代表一次異步操作。 它只可能有3種轉(zhuǎn)態(tài),分別是Pending(未決議)Resolved(完成) 和 Rejected(出錯) 。

創(chuàng)建一個Promise實例時,其處于Pending狀態(tài),當(dāng)異步操作完成,執(zhí)行回調(diào)函數(shù)的時候,根據(jù)回調(diào)函數(shù)中的err的值,如果err 為空則異步操作成功,否則異步操作失敗。此后,Promise實例的狀態(tài)將不再改變。

Promise實例

var pro = function () { return new Promise(function(resolve, reject) { fs.readdir(_dirname, function(err, data) { if (err) {
                reject(err); //失敗則將Promise對象置為rejected狀態(tài) } else {
                resolve(data); //成功則將Promise對象置為resolved轉(zhuǎn)態(tài) }
        });
    });
} /*pro是一個函數(shù)
 調(diào)用該函數(shù)返回一個Promise實例
*/ var promiseObject = pro(); /*then方法執(zhí)行Resolved和Rejected狀態(tài)的回調(diào)函數(shù)*/ promiseObject
.then(doneCallbacks, failCallbacks)
.catch(function(err) { console.log(err);
}); var doneCallbacks = function(data) { console.log(data);
}; var failCallbacks = function(err) { console.log(err)
};
    
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29

catch是then的一個語法糖,相當(dāng)于

promiseObject.then(undefined, function(err) {
    console.log(err)
});
    
  • 1
  • 2
  • 3

Promise對象的錯誤具有向后傳遞的性質(zhì),因此,如果在調(diào)用過程拋出異常,則異??偰鼙蛔詈笠粋€catch捕獲。這也是為什么我們習(xí)慣在then的調(diào)用后跟隨一個catch調(diào)用。

then的鏈?zhǔn)綄懛?

then 方法是定義在構(gòu)造函數(shù)Promise 的原型對象上的。這個方法為Promise實例添加狀態(tài)改變時的回調(diào)函數(shù)。then方法返回一個新的Promise實例,因此then方法后面可以調(diào)用then()方法。傳給then()方法的函數(shù),可返回三類值,分別如下:

  • 一個Promise實例
  • 一個普通值
  • 拋出一個異常

如果返回的是一個新的Promise對象,則下一級的then接收函數(shù)在這個Promise實例 狀態(tài)發(fā)生改變時被觸發(fā)執(zhí)行。因此,then的鏈?zhǔn)綄懛?,可以按順序?zhí)行一系列的異步操作,并且后一個異步操作在前一個完成之后開始。如下代碼實例所示:

var fs = require('fs'); var pro = function () { return new Promise(function(resolve, reject) { fs.readdir(_dirname, function(err, data) { if (err) {
                reject(err); //失敗則將Promise對象置為rejected狀態(tài) } else {
                resolve(data); //成功則將Promise對象置為resolved轉(zhuǎn)態(tài) }
        });
    });
} var newPro = function(data) { return new Promise(function(resolve, reject) { setTimeout(function(){ resolve(data);
        },2000);
    });
}; /*pro是一個函數(shù)
 調(diào)用該函數(shù)返回一個Promise實例
*/ var promiseObject = pro(); /*then方法執(zhí)行Resolved和Rejected狀態(tài)的回調(diào)函數(shù)*/ promiseObject
    .then(function(data){ console.log("fisrt sync op");
        console.log(data); return newPro(data);//返回一個新的Promise對象 })
    .then(function(data) { console.log("second sync op");
        console.log(data);//兩秒鐘后才會被執(zhí)行 })
    .catch(function(err) { console.log(err);
    });

promiseObject.then(undefined, function(err) { console.log(err)
}); var doneCallbacks = function(data) { console.log(data);
}; var failCallbacks = function(err) { console.log(err)
}; 
    
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53

把上一級異步調(diào)用的結(jié)果返回給下一級調(diào)用,then這樣的鏈?zhǔn)綄懛?,解決了回調(diào)函數(shù)的多層嵌套調(diào)用。

解決異步嵌套回調(diào)的更多方案

“回調(diào)金字塔”

多層嵌套

bluebird庫 + Generator

藍(lán)藍(lán)設(shè)計www.yvirxh.cn )是一家專注而深入的界面設(shè)計公司,為期望卓越的國內(nèi)外企業(yè)提供卓越的UI界面設(shè)計、BS界面設(shè)計 、 cs界面設(shè)計 、 ipad界面設(shè)計 、 包裝設(shè)計 、 圖標(biāo)定制 、 用戶體驗 、交互設(shè)計、 網(wǎng)站建設(shè) 、平面設(shè)計服務(wù)


Android沉浸式狀態(tài)欄

seo達(dá)人

如果您想訂閱本博客內(nèi)容,每天自動發(fā)到您的郵箱中, 請點這里

隨著越來越的的app使用沉浸式狀態(tài)欄,有必要對沉浸式狀態(tài)欄學(xué)習(xí)一下,查看了很多資料,沉浸式狀態(tài)欄重要的無法三點:1.實現(xiàn)全屏 (Android4.4跟5.0全屏處理方式有別需分開處理 )2.設(shè)置全屏之后為了保證自己寫的布局不與狀態(tài)欄重疊,需要在跟xml的跟布局設(shè)置android:fitsSystemWindows=”true” ?;谶@幾點處理方式可能很多,但是為了便于項目中工具類封裝,本編實現(xiàn)方式均已代碼方式呈現(xiàn),xml設(shè)置方式可以自行查閱相關(guān)資料 3.改變狀態(tài)欄顏色

—1.全屏設(shè)置 
對于4.4以上系統(tǒng),因4.4以上系統(tǒng)是可以設(shè)置全屏,代碼如下:

window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION); 
  • 1
  • 2

對于5.0系統(tǒng) 具體代碼

window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS|WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION); window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN|View.SYSTEM_UI_FLAG_LAYOUT_STABLE|View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION); window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS); 
  • 1
  • 2
  • 3
  • 4
  • 5

僅僅做全屏處理,我們會發(fā)現(xiàn)不管是在4.4系統(tǒng)上還是在5.0系統(tǒng)上,我們的布局內(nèi)容會與狀態(tài)欄內(nèi)容出現(xiàn)重疊。

下圖為4.4系統(tǒng) 
這里寫圖片描述

下圖為8.0系統(tǒng) 
這里寫圖片描述

為了解決全屏設(shè)置重疊狀態(tài)欄,我們需要在全屏之上預(yù)留狀態(tài)欄的高度以便正常顯示狀態(tài)欄,而處理方式也很簡單 activity layout根目錄添加下面代碼 
android:fitsSystemWindows=”true” 而此處我建議用代碼設(shè)置,因為通常我們項目中會提取BaseActivity基類抽出一些共性,這種方式比在每個xml中設(shè)置屬性更方便 
rootView.setFitsSystemWindows(true) 此處的rootView指的就是activity對應(yīng)的跟布局; 
進(jìn)行以上處理之后我們會發(fā)現(xiàn)現(xiàn)在狀態(tài)欄跟我們的布局內(nèi)容不再重疊了,接下來我們就只需要處理狀態(tài)欄的顏色問題了。具體代碼如下

ViewGroup content= (ViewGroup) findViewById(android.R.id.content); ViewGroup childView= (ViewGroup) content.getChildAt(0); if(childView!=null){
                childView.setFitsSystemWindows(true); } 
  • 1
  • 2
  • 3
  • 4
  • 5

對于4.4系統(tǒng)因為沒有改變狀態(tài)欄顏色的api,我們可以通過添加一個與狀態(tài)欄等高的View到根布局的父容器中,而根布局的父容器就是一個ID為android.R.id.content的幀布局被裝飾的容器中,這樣只需要設(shè)置View的顏色即可。對于5.0及以上系統(tǒng),因已提供設(shè)置狀態(tài)欄和導(dǎo)航欄顏色的api,直接設(shè)置即可; 
對于4.4以上5.0一下系統(tǒng)

View view=new View(this); view.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,getStatusHeight())); view.setBackgroundColor(Color.RED); content.addView(view); 
  • 1
  • 2
  • 3
  • 4

對于5.0及以上系統(tǒng)

window.setStatusBarColor(Color.RED); 
  • 1

獲取狀態(tài)欄高度

 private int getStatusHeight() { int statusHeight=-1; int resourceId=getResources().getIdentifier("status_bar_height","dimen","android"); if(resourceId>0){ return getResources().getDimensionPixelSize(resourceId);
        } return 0;
    } 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

以上就是實現(xiàn)沉浸式狀態(tài)欄的具體過程。整體代碼如下:

package com.example.administrator.myjavadeamo.activity; import android.graphics.Color; import android.os.Build; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.view.ViewGroup; import android.view.Window; import android.view.WindowManager; import com.example.administrator.myjavadeamo.R; public class StatusBarActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState); supportRequestWindowFeature(Window.FEATURE_NO_TITLE);//隱藏標(biāo)題欄 setContentView(R.layout.activity_status_bar); initWindow(); }

    private void initWindow() {
        Window window=getWindow(); if(Build.VERSION.SDK_INT>=Build.VERSION_CODES.LOLLIPOP){
            //5.0以上的手機(jī)
            window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS|WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION); window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN|View.SYSTEM_UI_FLAG_LAYOUT_STABLE|View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION); window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS); ViewGroup content= (ViewGroup) findViewById(android.R.id.content); ViewGroup childView= (ViewGroup) content.getChildAt(0); if(childView!=null){
                childView.setFitsSystemWindows(true); }
            window.setStatusBarColor(Color.GREEN); }else if(Build.VERSION.SDK_INT>=Build.VERSION_CODES.KITKAT){
            //4.4以上5.0一下的手機(jī)
            window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION); ViewGroup content= (ViewGroup) findViewById(android.R.id.content); ViewGroup childView= (ViewGroup) content.getChildAt(0); if(childView!=null){
                childView.setFitsSystemWindows(true); }

            View view=new View(this); view.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,getStatusHeight())); view.setBackgroundColor(Color.GREEN); content.addView(view); }
    } /**
     * 獲取狀態(tài)欄高度
     * @return
     */ private int getStatusHeight() {
        int statusHeight=-1; int resourceId=getResources().getIdentifier("status_bar_height","dimen","android"); if(resourceId>0){
           return getResources().getDimensionPixelSize(resourceId); }
        return 0; }
}  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67

最終實現(xiàn)結(jié)果:

4.4系統(tǒng) 
4.4以上5.0一下系統(tǒng) 
8.0系統(tǒng)

5.0以上系統(tǒng)

藍(lán)藍(lán)設(shè)計www.yvirxh.cn )是一家專注而深入的界面設(shè)計公司,為期望卓越的國內(nèi)外企業(yè)提供卓越的UI界面設(shè)計、BS界面設(shè)計 、 cs界面設(shè)計 、 ipad界面設(shè)計 、 包裝設(shè)計 、 圖標(biāo)定制 、 用戶體驗 、交互設(shè)計、 網(wǎng)站建設(shè) 、平面設(shè)計服務(wù)

JS基本事件總結(jié)

seo達(dá)人

JavaScript 創(chuàng)建動態(tài)頁面。事件是可以被 JavaScript 偵測到的行為。 網(wǎng)頁中的每個元素都可以產(chǎn)生某些可以觸發(fā) JavaScript 函數(shù)或程序的事件。比如說,當(dāng)用戶單擊按鈕或者提交表單數(shù)據(jù)時,就發(fā)生一個鼠標(biāo)單擊(onclick)事件,需要瀏覽器做出處理,返回給用戶一個結(jié)果。主要事件表總結(jié)如下: 

小程序復(fù)選框-在線預(yù)定

seo達(dá)人

如果您想訂閱本博客內(nèi)容,每天自動發(fā)到您的郵箱中, 請點這里

  1. <view class='header1'>  
  2.   <view class='header'>  
  3.     <view class='header_con flex_between'>  
  4.       <view class='left'>  
  5.         共計{{items.length}}件商品  
  6.       </view>  
  7.       <view class='right flex_end'>  
  8.         <view wx:if="{{!management_good}}" class='flex_center' bindtap='management'>  
  9.           管理  
  10.         </view>  
  11.         <view wx:if="{{management_good}}" class='flex_center' bindtap='finish_management'>  
  12.           完成  
  13.         </view>  
  14.       </view>  
  15.     </view>  
  16.   </view>  
  17. </view>  
  18. <view class='header2'>  
  19.   <view class='header'>  
  20.     <view class='header_con flex_between'>  
  21.       <input value='類目一' disabled='{{title_disabled}}' focus="{{!title_disabled}}">  
  22.       </input>  
  23.       <view class='right flex_end'>  
  24.         <block wx-if="{{title_disabled}}">  
  25.           <image src='../../../image/hotel/delete.png' bindtap='change_classname'></image>  
  26.         </block>  
  27.         <block wx-if="{{!title_disabled}}">  
  28.           <view class='flex_center' bindtap='finish_classname'>  
  29.             完成  
  30.           </view>  
  31.         </block>  
  32.       </view>  
  33.     </view>  
  34.   </view>  
  35. </view>  
  36. <view class='onlinechoose'>  
  37.   <view class='hotel_list flex_center' wx:for="{{items}}" wx:key="items" wx:for-item="i" data-id="{{index}}" bindtap='select'>  
  38.     <view class='list_cons flex_start'>  
  39.       <view wx:if="{{management_good}}" class='lefts'>  
  40.         <block wx-if="{{!i.checked}}">  
  41.           <view class='icon_none'></view>  
  42.         </block>  
  43.         <block wx-if="{{i.checked}}">  
  44.           <icon type="success" size="30" color="red" />  
  45.         </block>  
  46.       </view>  
  47.       <image src='../../../image/hotel/demoimg.jpg'></image>  
  48.       <view class='right'>  
  49.         <view class='name'>  
  50.           {{i.name}}  
  51.         </view>  
  52.         <view class='list1 flex_between'>  
  53.           <view class='left'>  
  54.             <view class='condition1'>  
  55.               16㎡|雙人床|含早  
  56.             </view>  
  57.             <view class='condition2'>  
  58.               <block>  
  59.                 間數(shù):10  
  60.               </block>  
  61.               <block>  
  62.                 間數(shù):2  
  63.               </block>  
  64.             </view>  
  65.           </view>  
  66.         </view>  
  67.         <view class='list1 flex_between'>  
  68.           <view class='left'>  
  69.             <view class='condition2'>  
  70.               類目一  
  71.             </view>  
  72.           </view>  
  73.         </view>  
  74.       </view>  
  75.     </view>  
  76.   </view>  
  77. </view>  
  78. <view class='bottom flex_between' wx:if="{{management_good}}">  
  79.   <view class='left flex_start'>  
  80.     <block wx:if="{{select_all}}">  
  81.       <view bindtap='select_none' class='flex_start'>  
  82.         <icon type="success" size="30" color="red" />  
  83.         <view>  
  84.           取消全選  
  85.         </view>  
  86.       </view>  
  87.     </block>  
  88.     <block wx:if="{{!select_all}}">  
  89.       <view bindtap='select_all' class='flex_start'>  
  90.         <view class='select_none'>  
  91.         </view>  
  92.         <view>  
  93.           全選  
  94.         </view>  
  95.       </view>  
  96.     </block>  
  97.   </view>  
  98.   <view class='right flex_end'>  
  99.     <view style='text-align:right'>  
  100.       <view class='all'>  
  101.         共選中{{middlearr.length}}件商品  
  102.       </view>  
  103.     </view>  
  104.     <view bindtap='deleteitem' class='sure'>  
  105.       刪除  
  106.     </view>  
  107.   </view>  
  108. </view>  
藍(lán)藍(lán)設(shè)計www.yvirxh.cn )是一家專注而深入的界面設(shè)計公司,為期望卓越的國內(nèi)外企業(yè)提供卓越的UI界面設(shè)計、BS界面設(shè)計 、 cs界面設(shè)計 、 ipad界面設(shè)計 、 包裝設(shè)計 、 圖標(biāo)定制 、 用戶體驗 、交互設(shè)計、 網(wǎng)站建設(shè) 、平面設(shè)計服務(wù)

日歷

鏈接

個人資料

存檔