欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

zepto與jquery的區(qū)別及zepto的不同使用8條小結(jié)

 更新時(shí)間:2016年07月28日 09:19:31   作者:吳國(guó)源  
這篇文章主要介紹了zepto與jquery的區(qū)別及zepto的不同使用8條小結(jié) 的相關(guān)資料,需要的朋友可以參考下

首先是效果:

jquery中有fadeIn和fadeOut兩個(gè)效果,用來實(shí)現(xiàn)漸隱漸顯的效果,這個(gè)在PC端自然是常用的效果。然后我們前端組的組員Mr Huang自然是想到手機(jī)頁(yè)面也可以更加炫麗,于是加上了登錄框的漸隱效果。給用戶緩沖的效果不錯(cuò)。

但是,zepto中并沒有fadeIn和fadeOut,怎么辦?難道真的就無法滿足Mr Huang的愿望了嗎?No. I will do it.在zepto中有個(gè)動(dòng)畫效果(animate),用這個(gè)效果來實(shí)現(xiàn)漸隱還是不錯(cuò)的。咱們引用中文文檔中的說明 http://www.html-5.cn/Manual/Zepto/#animate 文檔里面詳細(xì)介紹了animate能實(shí)現(xiàn)的動(dòng)畫效果。當(dāng)然animate也不是萬能的,也有很多jquery能做的zepto無能為力的效果。當(dāng)然,在這考慮到漸隱效果雖然漂亮,但是在安卓機(jī)器上面,由于性能的原因,經(jīng)常出現(xiàn)卡頓的現(xiàn)象,而且由于某些ROM隨便修改瀏覽器原生的效果,導(dǎo)致那些炫麗的動(dòng)畫看起來很別扭很畸形,博主在這和Mr Huang商量后決定棄用漸隱,直接隱藏的形式更加簡(jiǎn)潔明了。

詭異的ajax:

會(huì)用jquery的都知道$.ajax();這個(gè)方法,用來實(shí)現(xiàn)異步請(qǐng)求數(shù)據(jù),使用想當(dāng)頻繁。當(dāng)然,這在zepto中也是一個(gè)剛需的功能,而且zepto的使用方法跟jquery幾乎是一模一樣。咱們寫個(gè)最簡(jiǎn)單的ajax.

$.ajax('test.php',{"data":[{"name":"systme","hacked":"systme"}]},function(){alert("ok")}); 

OK,就是這樣一個(gè)簡(jiǎn)單的請(qǐng)求,php那邊是直接dump出我傳過去的數(shù)據(jù)。咱們來看一下出現(xiàn)了什么詭異的事件。

首先,jquery的請(qǐng)求。

咱們很清楚的看到傳過去的是一個(gè)數(shù)組,那么我們把他寫生數(shù)組形式應(yīng)該是data[{"name":"systme","hacked":"systme"}]這樣是完全沒有問題的。

咱們?cè)賮砜磟epto的ajax請(qǐng)求。

,看一下,下標(biāo)0沒有了,下標(biāo)0沒有了意味著什么呢。我們來還原一下數(shù)組data[{"name":"systme"},{"hacked":"systme"}],沒錯(cuò),你真的沒看錯(cuò),zepto的ajax直接改變了原來的數(shù)組結(jié)構(gòu),zepto的ajax對(duì)數(shù)組的序列化存在問題導(dǎo)致解析數(shù)組出現(xiàn)問題。這個(gè)問題給我?guī)砹撕艽蟮睦_,如果是因?yàn)檫@個(gè)問題讓我重新使用jquery尚無必要,所以,博主在與后端攻城尸商討之后決定我這直接傳字符串到后端,由后端對(duì)字符串進(jìn)行解析。至此,詭異的問題解決,但是這樣的解決方式并不是完美的,還需要繼續(xù)研究其源碼的實(shí)現(xiàn)原理。

博主在這有一另外一種解決方案,咱們可以用純js實(shí)現(xiàn)一個(gè)post請(qǐng)求,純js的post請(qǐng)求不像$.ajax那么方便,在參數(shù)傳遞上面要使用&連接符,咱們這的參數(shù)實(shí)際上是 data[0][name]=systme&data[0][hacked]=systme 這個(gè)樣子的,我們使用純js的post傳過去就OK了

1. Zepto 對(duì)象 不能自定義事件

例如執(zhí)行: $({}).bind('cust', function(){});

結(jié)果: TypeError: Object has no method 'addEventListener'

解決辦法是創(chuàng)建一個(gè)脫離文檔流的節(jié)點(diǎn)作為事件對(duì)象:

例如: $('').bind('cust', function(){});

2. Zepto 的選擇器表達(dá)式: [name=value] 中value 必須用 雙引號(hào) " or 單引號(hào) ' 括起來

例如執(zhí)行:$('[data-userid=123123123]')

結(jié)果:Error: SyntaxError: DOM Exception 12

解決辦法:

 $('[data-userid="123123123]"') or $("[data-userid='123123123']")

2-1.zepto的選擇器沒有辦法選出 $("div[name!='abc']") 的元素

2-2.zepto獲取select元素的選中option不能用類似jq的方法$('option[selected]'),因?yàn)閟elected屬性不是css的標(biāo)準(zhǔn)屬性

應(yīng)該使用$('option').not(function(){ return !this.selected })

比如:jq:$this.find('option[selected]').attr('data-v') * 1

zepto:$this.find('option').not(function() {return !this.selected}).attr('data-v') * 1

但是獲取有select中含有disabled屬性的元素可以用 $this.find("option:not(:disabled)") 因?yàn)閐isabled是標(biāo)準(zhǔn)屬性

參考網(wǎng)址:https://github.com/madrobby/zepto/issues/503

2-3、zepto在操作dom的selected和checked屬性時(shí)盡量使用prop方法,以下是官方說明:

3.Zepto 是根據(jù)標(biāo)準(zhǔn)瀏覽器寫的,所以對(duì)于節(jié)點(diǎn)尺寸的方法只提供 width() 和 height(),省去了 innerWidth(), innerHeight(),outerWidth(),outerHeight()

Zepto.js: 由盒模型( box-sizing )決定
jQuery: 忽略盒模型,始終返回內(nèi)容區(qū)域的寬/高(不包含 padding 、 border )解決方式就是使用 .css('width') 而不是 .width() 。

3-1.邊框三角形寬高的獲取

假設(shè)用下面的 HTML 和 CSS 畫了一個(gè)小三角形:

1.<div class="caret"></div> 
2..caret { 
3. width: 0; 
4. height: 0; 
5. border-width: 0 20px 20px; 
6. border-color: transparent transparent blue; 
7. border-style: none dotted solid; 
8.} 

jQuery 使用 .width() 和 .css('width') 都返回 ,高度也一樣;

Zepto 使用 .width() 返回 ,使用 .css('width') 返回 0px 。

所以,這種場(chǎng)景,jQuery 使用 .outerWidth() / .outerHeight() ;Zepto 使用 .width() / .height() 。

3-2.offset()

Zepto.js: 返回 top 、 left 、 width 、 height
jQuery: 返回 width 、 height

3-3.隱藏元素

Zepto.js: 無法獲取寬高;

jQuery: 可以獲取。

4.Zepto 的each 方法只能遍歷 數(shù)組,不能遍歷JSON對(duì)象

5.Zepto 的animate 方法參數(shù)說明 :詳情點(diǎn)擊->

zepto中animate的用法

6.zepto的jsonp callback函數(shù)名無法自定義

7.DOM 操作區(qū)別

jq代碼:

1.(function($) { 
2. $(function() { 
3. var $list = $('<ul><li>jQuery 插入</li></ul>', { 
4. id: 'insert-by-jquery' 
5. }); 
6. $list.appendTo($('body')); 
7. }); 
8.})(window.jQuery); 

jQuery 操作 ul 上的 id 不會(huì)被添加。

zepto代碼:

1.Zepto(function($) { 
2. var $list = $('<ul><li>Zepto 插入</li></ul>', { 
3. id: 'insert-by-zepto' 
4. }); 
5. $list.appendTo($('body')); 
6.}); 

Zepto 可以在 ul 上添加 id 。

8.事件觸發(fā)區(qū)別

jq代碼:

1.(function($) { 
2. $(function() { 
3. $script = $('<script />', { 
4. src: 'http://cdn.amazeui.org/amazeui/1.0.1/js/amazeui.min.js', 
5. id: 'ui-jquery' 
6. }); 
7. 
8. $script.appendTo($('body')); 
9. 
10. $script.on('load', function() { 
11. console.log('jQ script loaded'); 
12. }); 
13. }); 
14.})(window.jQuery); 

使用 jQuery 時(shí) load 事件的處理函數(shù) 不會(huì) 執(zhí)行

zepto代碼:

1.Zepto(function($) { 
2. $script = $('<script />', { 
3. src: 'http://cdn.amazeui.org/amazeui/1.0.1/js/amazeui.js', 
4. id: 'ui-zepto' 
5. }); 
6. 
7. $script.appendTo($('body')); 
8. 
9. $script.on('load', function() { 
10. console.log('zepto script loaded'); 
11. }); 
12.}); 

使用 Zepto 時(shí) load 事件的處理函數(shù) 會(huì) 執(zhí)行。

相關(guān)文章

最新評(píng)論