zepto与jquery的区别及zepto的不同使用8条小结


Posted in Javascript onJuly 28, 2016

首先是效果:

jquery中有fadeIn和fadeOut两个效果,用来实现渐隐渐显的效果,这个在PC端自然是常用的效果。然后我们前端组的组员Mr Huang自然是想到手机页面也可以更加炫丽,于是加上了登录框的渐隐效果。给用户缓冲的效果不错。

但是,zepto中并没有fadeIn和fadeOut,怎么办?难道真的就无法满足Mr Huang的愿望了吗?No. I will do it.在zepto中有个动画效果(animate),用这个效果来实现渐隐还是不错的。咱们引用中文文档中的说明 http://www.html-5.cn/Manual/Zepto/#animate 文档里面详细介绍了animate能实现的动画效果。当然animate也不是万能的,也有很多jquery能做的zepto无能为力的效果。当然,在这考虑到渐隐效果虽然漂亮,但是在安卓机器上面,由于性能的原因,经常出现卡顿的现象,而且由于某些ROM随便修改浏览器原生的效果,导致那些炫丽的动画看起来很别扭很畸形,博主在这和Mr Huang商量后决定弃用渐隐,直接隐藏的形式更加简洁明了。

诡异的ajax:

会用jquery的都知道$.ajax();这个方法,用来实现异步请求数据,使用想当频繁。当然,这在zepto中也是一个刚需的功能,而且zepto的使用方法跟jquery几乎是一模一样。咱们写个最简单的ajax.

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

OK,就是这样一个简单的请求,php那边是直接dump出我传过去的数据。咱们来看一下出现了什么诡异的事件。

首先,jquery的请求。

zepto与jquery的区别及zepto的不同使用8条小结

咱们很清楚的看到传过去的是一个数组,那么我们把他写生数组形式应该是data[{"name":"systme","hacked":"systme"}]这样是完全没有问题的。

咱们再来看zepto的ajax请求。

zepto与jquery的区别及zepto的不同使用8条小结

,看一下,下标0没有了,下标0没有了意味着什么呢。我们来还原一下数组data[{"name":"systme"},{"hacked":"systme"}],没错,你真的没看错,zepto的ajax直接改变了原来的数组结构,zepto的ajax对数组的序列化存在问题导致解析数组出现问题。这个问题给我带来了很大的困扰,如果是因为这个问题让我重新使用jquery尚无必要,所以,博主在与后端攻城尸商讨之后决定我这直接传字符串到后端,由后端对字符串进行解析。至此,诡异的问题解决,但是这样的解决方式并不是完美的,还需要继续研究其源码的实现原理。

博主在这有一另外一种解决方案,咱们可以用纯js实现一个post请求,纯js的post请求不像$.ajax那么方便,在参数传递上面要使用&连接符,咱们这的参数实际上是 data[0][name]=systme&data[0][hacked]=systme 这个样子的,我们使用纯js的post传过去就OK了

1. Zepto 对象 不能自定义事件

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

结果: TypeError: Object has no method 'addEventListener'

解决办法是创建一个脱离文档流的节点作为事件对象:

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

2. Zepto 的选择器表达式: [name=value] 中value 必须用 双引号 " or 单引号 ' 括起来

例如执行:$('[data-userid=123123123]')

结果: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]'),因为selected属性不是css的标准属性

应该使用$('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)") 因为disabled是标准属性

参考网址:https://github.com/madrobby/zepto/issues/503

2-3、zepto在操作dom的selected和checked属性时尽量使用prop方法,以下是官方说明:

zepto与jquery的区别及zepto的不同使用8条小结

3.Zepto 是根据标准浏览器写的,所以对于节点尺寸的方法只提供 width() 和 height(),省去了 innerWidth(), innerHeight(),outerWidth(),outerHeight()

Zepto.js: 由盒模型( box-sizing )决定
jQuery: 忽略盒模型,始终返回内容区域的宽/高(不包含 padding 、 border )解决方式就是使用 .css('width') 而不是 .width() 。

3-1.边框三角形宽高的获取

假设用下面的 HTML 和 CSS 画了一个小三角形:

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 。

所以,这种场景,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 方法只能遍历 数组,不能遍历JSON对象

5.Zepto 的animate 方法参数说明 :详情点击->

zepto中animate的用法

6.zepto的jsonp callback函数名无法自定义

7.DOM 操作区别

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 不会被添加。

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.事件触发区别

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 时 load 事件的处理函数 不会 执行

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 时 load 事件的处理函数 会 执行。

Javascript 相关文章推荐
客户端静态页面玩分页
Jun 26 Javascript
jQuery下通过$.browser来判断浏览器.
Apr 05 Javascript
javascript 获取图片尺寸及放大图片
Sep 04 Javascript
css3元素简单的闪烁效果实现(html5 jquery)
Dec 28 Javascript
jQuery寻找n以内完全数的方法
Jun 24 Javascript
JS加载器如何动态加载外部js文件
May 26 Javascript
jQuery下拉框的简单应用
Jun 24 Javascript
Angular ui.bootstrap.pagination分页
Jan 20 Javascript
JavaScript实现开关等效果
Sep 08 Javascript
AngularJS使用$http配置对象方式与服务端交互方法
Aug 13 Javascript
JavaScript使用prototype属性实现继承操作示例
May 22 Javascript
element-ui tree结构实现增删改自定义功能代码
Aug 31 Javascript
浅谈js中调用函数时加不加括号的问题
Jul 28 #Javascript
AngularJS 入门教程之HTML DOM实例详解
Jul 28 #Javascript
javascript 小数乘法结果错误的处理方法
Jul 28 #Javascript
轮播的简单实现方法
Jul 28 #Javascript
关于JS变量和作用域详解
Jul 28 #Javascript
jquery轮播的实现方式 附完整实例
Jul 28 #Javascript
AngularJS入门教程中SQL实例详解
Jul 27 #Javascript
You might like
用PHP书写安全的脚本代码
2012/02/05 PHP
PHP图片等比缩放类SimpleImage使用方法和使用实例分享
2014/04/10 PHP
PHP中使用localhost连接Mysql不成功的解决方法
2014/08/20 PHP
thinkphp的dump函数无输出实例代码
2016/11/15 PHP
PHP中危险的file_put_contents函数详解
2017/11/04 PHP
PHP实现的无限分类类库定义与用法示例【基于thinkPHP】
2018/08/06 PHP
php多进程中的阻塞与非阻塞操作实例分析
2020/03/04 PHP
javascript 特殊字符串
2009/02/25 Javascript
用jquery实现的模拟QQ邮箱里的收件人选取及其他效果(一)
2011/01/06 Javascript
jquery实现全选和全不选功能效果的实现代码【推荐】
2016/05/05 Javascript
快速使用Bootstrap搭建传送带
2016/05/06 Javascript
Javascript生成带参数的二维码示例
2016/10/10 Javascript
jQuery插件HighCharts绘制简单2D柱状图效果示例【附demo源码】
2017/03/21 jQuery
easyui-edatagrid.js实现回车键结束编辑功能的实例
2017/04/12 Javascript
基于JavaScript实现的插入排序算法分析
2017/04/14 Javascript
AngularJS 应用模块化的使用
2018/04/04 Javascript
解决layui 表单元素radio不显示渲染的问题
2019/09/04 Javascript
layui给下拉框、按钮状态、时间赋初始值的方法
2019/09/10 Javascript
详解Nuxt.js 实战集锦
2019/11/19 Javascript
Node使用koa2实现一个简单JWT鉴权的方法
2021/01/26 Javascript
python3.3使用tkinter开发猜数字游戏示例
2014/03/14 Python
Python 中的with关键字使用详解
2016/09/11 Python
Python信息抽取之乱码解决办法
2017/06/29 Python
Python实现获取本地及远程图片大小的方法示例
2018/07/21 Python
Django shell调试models输出的SQL语句方法
2019/08/29 Python
基于Python fminunc 的替代方法
2020/02/29 Python
200行python代码实现贪吃蛇游戏
2020/04/24 Python
英国家喻户晓的家居商店:The Range
2019/03/25 全球购物
苏格兰在线威士忌商店:The Whisky Barrel
2019/05/07 全球购物
Coccinelle官网:意大利的著名皮具品牌
2019/05/15 全球购物
俄罗斯品牌服装在线商店:VIPAVENUE
2020/08/10 全球购物
英国豪华家具和经典家居饰品购物网站:OKA
2020/06/05 全球购物
好学生评语大全
2014/05/05 职场文书
给校长的建议书300字
2014/05/16 职场文书
2014党的群众路线教育实践活动总结报告
2014/10/31 职场文书
孔子观后感
2015/06/08 职场文书