从哪里下载 Zepto

这个问题看起来很蠢,从官网下载不就行了嘛!可是你有没有发现下载链接上面有行小字呢?

There are more modules; a list of all modules is available in the README.

在这个 README 里面你会惊奇地发现,Zepto 源码中有 14 个模块,而官网提供的标准版里面只有 7 个模块!而且居然不包含对移动端开发非常重要的 touch 模块(提供对触摸事件的支持)!
所以我的建议是,不要从官网下载,而是从 Github 下载了源代码之后自己 Build 一个版本,这样你可以自行挑选适合的模块。比如我挑选的模块是这么几个:

  • polyfill,zepto,detect,event,ajax,form,fx 这7个就是标准版包含的模块
  • fx_methods 有了这个模块之后,.show() .hide() 等几个方法才能支持动画了,比如 .show('fast')
  • data 提供对 .data() 方法的完整支持,像 jQuery 一样用内存对象存储
  • assets 移除 img 元素后做一些特殊处理,用来清理内存
  • selector 更多的选择器的支持,后面会提到
  • touch 对触摸事件的支持,比如 tap 事件

如果你对 Node 不了解不知道如何 Build 的话,可以下载我的版本

不要用 click 事件,用 tap 代替

这个估计已经广为人知了,因为 click 事件有 200~300 ms 的延迟,为了更快的响应,最好用 Zepto 提供的 tap 事件
不相信的话,可以用以下代码测试一下

var t1,t2;
$(function () {t1 = Date.now();
});
$(function () {t2 = Date.now();alert(t2 - t1);
});

Zepto 对 CSS 选择器的支持

郑重提醒,:text :checkbox :first 等等在 jQuery 里面很常用的选择器,Zepto 不支持!
原因很简单,jQuery 通过自己编写的 sizzle 引擎来支持 CSS 选择器,而 Zepto 是直接通过浏览器提供的 document.querySelectorAll 接口。
这个接口只支持标准的 CSS 选择器,而上面提到的那些属于 jQuery 选择器扩展,所以仔细看看这个网页,注意一下这些选择器。

当然也有好消息,就是上面提到的 selector 模块,如果有这个模块的话,能够支持 部分 的 jQuery 选择器扩展,列举如下:

  • :visible :hidden
  • :selected :checked
  • :parent
  • :first :last :eq
  • :contains :has

元素的尺寸计算

首先 Zepto 没有 .innerHeight() .outerWidth() 等四个方法,其次,它的 .height()/.width() 方法也不完善,对于 display:none 的元素,计算出的高宽都是 0
而这在 jQuery 里面是没有问题的,因为 jQuery 针对这种元素,会先设置其 css 样式设置为 position: "absolute", visibility: "hidden", display: "block"
计算完高宽后再恢复,参见 https://github.com/jquery/jquery/blob/master/src/css.js#L460
如果遇到这种特殊情况,可以参考 jQuery 写一个类似的方法

.prop() 方法的陷阱

有次我要把一个文本框置为只读,写了这么一行 $('#text').prop('readonly', true) 结果死活不工作
找了半天才发现,正确的写法是这样 $('#text').prop('readOnly', true) ,如果你居然看不出两者的差别,那么悄悄提示你:注意大小写!
翻了一下相关的文档,原来只读属性的正确拼法确实是 readOnly,可是在 jQuery 里面上一段代码却能正常工作
于是到 jQuery 源码里面一找才发现,还有这么一段 https://github.com/jquery/jquery/blob/master/src/attributes.js#L466

jQuery.each([function() {jQuery.propFix[ this.toLowerCase() ] = this;
});

从这里也能看到,jQuery 的成熟度真是难以超越,因为他把我们都惯坏了……
考虑到这段代码比较简单,我厚颜无耻地抄袭了一下然后给 Zepto 提了一个 pull request ,如果你们喜欢这种无脑的用法,可以去评论表达支持(记得用英文)

2013-11-25 这个 PR 已经被 Merge

.show() 的动画效果

如果没有 fx_mehods 模块的话,.show() 方法是不支持动画的,不过有了这模块后,动画的支持还是有点小问题,比如这么一段 HTML

<div style=">test
</div>

如果你调用 $('div').show('fast') ,那么动画完成后你看到的不会是一个半透明的元素,而是全黑不透明的
因为 Zepto 的 .show() 动画实现的很简单,没有高宽的变化,而是将透明度从 0 逐渐变为 1,所以元素上原来设置的透明度就被替代了。
这种情况下,可以用 .fadeIn() 方法来替代 .show()

结语

看到这里相信你已经了解为什么我说” Zepto 还远未成熟“,目前它其实还仅仅处于“能用”,远未达到 jQuery “好用”的地步
最后,关于整个 HTML5 触屏版的前端开发,我有篇 Slide 做了总结,本文只是其中关于 Zepto 部分的详细阐述,感兴趣的可以去看看

转载于:https://www.cnblogs.com/cainiaoz/p/4047915.html

Zepto 使用中的一些注意点相关推荐

  1. 移动开发js库Zepto.js使用中的一些注意点

    来自http://chaoskeh.com/blog/some-experience-of-using-zepto.html的参考. 前段时间完成了公司一个产品的 HTML5 触屏版,开发中使用了 Z ...

  2. Ajax+SpringBoot+Thymeleaf使用中遇到的跳转页面问题

    前言:这周在使用 Ajax+Thymeleaf 时遇到一个问题,折腾了我很久,在此记录一下 Ajax+SpringBoot+Thymeleaf使用中遇到的跳转页面问题 问题描述 我的目的:通过 Aja ...

  3. 读Zepto源码之操作DOM

    2019独角兽企业重金招聘Python工程师标准>>> 这篇依然是跟 dom 相关的方法,侧重点是操作 dom 的方法. 读Zepto源码系列文章已经放到了github上,欢迎sta ...

  4. zepto打造一款移动端划屏插件

    效果图 样式1 样式2 调用 正常情况下应该是后台生成的html代码,但还是写了一套操作tab页的方法 调用简便如下: <link rel="stylesheet" href ...

  5. Zepto.js库touch模块代码解析

    Zepto.js也许并不陌生,专门针对移动端开发,Zepto有一些基本的触摸事件可以用来做触摸屏交互(tap事件.swipe事件),Zepto是不支持IE浏览器的. 下面来解析一些Zepto.js触摸 ...

  6. VMware出现“该虚拟机似乎正在使用中 请获取所有权”

    1.找到VMware所在的项目文件,其中有一个名为:Ubuntu 64 位.vmx.lck 2.将其Ubuntu 64 位.vmx.lck改名为Ubuntu 64 位.vmx.lck.back(为了安 ...

  7. AjaxPro.2.dll在VS2005使用中的基本使用

    个人常用的东西收集起来,也给大家一起分享哈.AjaxPro.2.dll在VS2005使用中的基本使用,下面介绍了基本的配置和最简单的使用方法 AJAX不用说大家都明白,不明白的请百度或Google一下 ...

  8. [知识储备]用RequireJS +zepto开发微信公众号

    2019独角兽企业重金招聘Python工程师标准>>> 一.了解RequireJS 和zepto 1.RequireJS的目标是鼓励代码的模块化,其遵循 AMD(异步模块定义)规范. ...

  9. 晶体管参数在实际使用中的意义

    转载自:http://forum.eet-cn.com/blog_index.jspa?blog_id=728&viewall=true,感谢香雪茶,推荐阅读! 做模拟电路的工程师,都有过使用 ...

最新文章

  1. tomcat环境部署
  2. GMM 模型需不需归一化问题
  3. 排序后顺序错乱java_排列顺序不对怎么调
  4. oracle常用的时间格式转换
  5. SAP FICO PA 模拟题
  6. mysql-odbc的zip安装方法_win10环境下mysql-odbc的zip安装方法
  7. K近邻模型(k-NN)
  8. git升级到指定版本
  9. jQuery常用属性过滤选择器
  10. 路由器刷php,【图片】【经验分享】路由器刷DDWRT认证锐捷校园网全程实录【哈尔滨工业大学吧】_百度贴吧...
  11. 论文写作---Matlab求解偏导数
  12. Shell(Bash)单引号、双引号、不加引号和反引号用法详解
  13. 【古代文学论文】沈德潜诗学思想的调和格调与文化意蕴(节选)
  14. oj美元和人民币java_【牛客网OJ题】:人民币转换
  15. 数据结构Data Structure in C++ 胡学钢 全书梳理(备忘自用 已完结)
  16. JavaSE学习笔记之网络编程
  17. Java设计模式——适配器模式
  18. jq 自动打开浏览器_微信QQ跳转浏览器打开代码
  19. 【Celery】Celery的简易部署和应用
  20. Box2d源码学习十三b2Collision之碰撞(下) 具体形状间的碰撞的实现

热门文章

  1. python和nltk自然语言处理书评_python自然语言处理_自然语言处理入门
  2. 降低代码执行中得内存消耗_微服务中使用 OpenJ9 JVM内存占用降低60%!
  3. Iverson Bracket. 艾弗森括号
  4. YOLOv4论文阅读(附原文翻译)
  5. 【PIFO】以线速编程数据包调度
  6. 二分查找原理非递归与递归实现【转载】
  7. Opencv---remap函数的实现
  8. 在visualc++可以运行的程序在linux下怎么不能,Linux环境下C++只允许单个程序运行...
  9. UML部署图和构件图
  10. 当前服务器文件夹不存在,供应商文件夹不存在,无法创建