Zepto和jQuery的很多API都很一致,思路也很相似,我不会全都整理出来,只是把一些平时用到了的或者不同的地方需要注意一下的地方总结出来。另外,Zepto现在还不是很成熟,无论是对大小写的敏感还是选择器Sizzle的支持广度等等等等都不如jQuery,但是即便如此依然有很多个人和公司在使用它,很多大牛也很推荐Zepto,无论如何,先学习起来,市场总是需要新技术的更替,对Zepto,我们还是拭目以待吧!

=========2016年1月25日========

tap()方法

不要用click事件,用tap代替,因为click事件有200~300 ms的延迟,为了更快的响应,最好用Zepto提供的tap事件

var t1,t2;
$('#id').tap(function () {
t1 = Date.now();
});
$('#id').click(function () {
t2 = Date.now();
alert(t2 - t1);
});

Sizzle

:text :checkbox :first 等等在jQuery里面很常用的选择器,Zepto是不支持的。

jQuery 通过自己编写的 sizzle 引擎来支持 CSS 选择器,而 Zepto 是直接通过浏览器提供的 document.querySelectorAll 接口,而这个接口只支持标准的 CSS 选择器。

但是Zepto的模块selector扩展了Sizzle,使得Zepto也能支持部分jQuery选择器:

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

尺寸

1.Zepto没有innerWidth(), innerHeight(),outerWidth(),outerHeight()这些方法

2.它的.height()/.width()方法也不完善

3.对于display:none 的元素,计算出的高宽都是0

而这在 jQuery 里面是没有问题的,因为 jQuery 针对这种元素,会先设置其CSS样式设置为position: "absolute", visibility: "hidden", display: "block" ,计算完高宽后再恢复。

Zepto是由盒模型(box-sizing)决定的,而jQuery忽略盒模型,始终返回内容区域的宽/高(不包含padding/border)

解决方式就是使用 .css('width') 而不是 .width()

prop()方法

这么写是不work的

$('#text').prop('readonly', true);

这么写才是work的

$('#text').prop('readOnly', true);

区别在于大小写

而jQuery的源码里是这么处理的

jQuery.each([
"tabIndex",
"readOnly",
"maxLength",
"cellSpacing",
"cellPadding",
"rowSpan",
"colSpan",
"useMap",
"frameBorder",
"contentEditable"
], function() {
jQuery.propFix[ this.toLowerCase() ] = this;
});

看到toLowerCase()的时候恍然大悟

fx_methods与show()方法

fx_methods是一些和show() hide() toggle()有关的模块,但是这个模块现在也不成熟,比如说show(),

<div style="background:black;opacity:0.7;display:none">
test
</div>

如果我们把这个div用show()显示出来

$('div').show('fast');

得到的结果会是一个opacity为1.0的div

因为zepto的show()很简单,没有宽高的变化,只是单纯地把opacity从0渐变为1。

解决的方法是,使用fadeIn(),或者自己写一个。

===========我是touch事件的分割线============

先看一下我之前总结的jQuery Mobile的事件总结,请狠狠地摸我

据说,jQuery Mobile不是很好用,我在做一个银行的ipad项目的时候也发现了这个问题,响应速度好慢啊!(当然,速度慢也有一些是json数据传输量太大的缘故。)

反正,无论如何,总之,业内都说Zepto在移动端的事件响应比jQuery Mobile要好,那就学习一下好了。

重要属性

我们可以从event.touches[0]里获取属性,它长这样:

clientX,clientY:触摸点相对于浏览器窗口viewport的位置;

pageX,pageY: 触摸点相对于页面的位置;

screenX,screenY:触摸点相对于屏幕的位置;

identifier:touch对象的unique ID 。

事件类型

touchstart:手指触摸屏幕上的时候触发

$('#touchs').bind("touchstart",function(event){
var touchpros =event.touches[0];
console.log(touchpros);
});

touchmove:手指在屏幕上移动的时候触发

$('#touchs').bind("touchmove",function(){
//touchmove
});

touchend:手指从屏幕上拿起的时候触发

$('#touchs').bind("touchend",function(){
//touchend
});

touchcancel:系统取消touch事件的时候触发

$('#touchs').bind("touchcancel",function(){
//touchcancel
});

当你触摸屏幕并抬起手指,只触发touchstart和touched。

可以根据基本的touch事件来封装成你想要实现复杂的效果,比如向左或向右滑动,向上或向下滑动,并在滑动时封装你想实现的效果。

Zepto学习笔记的更多相关文章

  1. 【zepto学习笔记03】事件机制

    前言 我们今天直接进入事件相关的学习,因为近期可能会改到里面的代码就zepto来说,我认为最重要的就是选择器与事件相关了,随着浏览器升级,选择器简单了,而事件相关仍然是核心,今天我们就来学习学习 ze ...

  2. 【zepto学习笔记02】零碎点

    前言 上次我们看了zepto的选择器方面的东西,其实zepto简单很大程度是因为他用了最新的检索器querySelectorAll,今天我们来学习下zepto的一些零碎点的地方吧,主要根据zepto官 ...

  3. 【zepto学习笔记01】核心方法$()(补)

    前言 昨天学习了核心$(),有几个遗留问题,我们今天来看看吧 $.each 遍历数组/对象,将每条数据作为callback的上下文,并传入数据以及数据的索引进行处理,如果其中一条数据的处理结果明确返回 ...

  4. 【zepto学习笔记01】核心方法$()

    前言 我们移动端基本使用zepto了,而我也从一个小白变成稍微靠谱一点的前端了,最近居然经常要改到zepto源码但是,我对zepto不太熟悉,其实前端水准还是不够,所以便私下偷偷学习下吧,别被发现了 ...

  5. zepto源码--核心方法10(位置)--学习笔记

    今天基本上就是zepto学习笔记的最后一篇了,介绍一下有关位置的函数,position, offset, scrollLeft, scrollTop scrollLeft 如果所选取的包装集不存在,则 ...

  6. CSS3与页面布局学习笔记(八)——浏览器兼容性问题与前端性能优化方案

    一.浏览器兼容 1.1.概要 世界上没有任何一个浏览器是一样的,同样的代码在不一样的浏览器上运行就存在兼容性问题.不同浏览器其内核亦不尽相同,相同内核的版本不同,相同版本的内核浏览器品牌不一样,各种运 ...

  7. 微信小程序开发:学习笔记[5]——JavaScript脚本

    微信小程序开发:学习笔记[5]——JavaScript脚本 快速开始 介绍 小程序的主要开发语言是 JavaScript ,开发者使用 JavaScript 来开发业务逻辑以及调用小程序的 API 来 ...

  8. amazeui学习笔记二(进阶开发5)--Web 组件开发规范Rules

    amazeui学习笔记二(进阶开发5)--Web 组件开发规范Rules 一.总结 1.见名知意:见那些class名字知意,见函数名知意,见文件名知意 例如(HISTORY.md Web 组件更新历史 ...

  9. amazeui学习笔记二(进阶开发4)--JavaScript规范Rules

    amazeui学习笔记二(进阶开发4)--JavaScript规范Rules 一.总结 1.注释规范总原则: As short as possible(如无必要,勿增注释):尽量提高代码本身的清晰性. ...

随机推荐

  1. package分析

    由于大家对package的使用存在太多困惑,我在这里将自己对于package的使用的领悟进行一点总结: package中所存放的文件 所有文件,不过一般分一下就分这三种 1,java程序源文件,扩展名 ...

  2. 【转载】mysql建表date类型不能设置默认值

    如题,mysql建表date类型的不能设置一个默认值,比如我这样: CREATE TABLE `new_table` ( `biryhday` datetime NULL DEFAULT '1996- ...

  3. android android.mk中:= ?= +=之间的区别

    转自:http://blog.csdn.net/love_xsq/article/details/50395138 在Makefile中我们经常看到 = := ?= +=这几个赋值运算符,那么他们有什 ...

  4. JSON和Django内置序列化

    JSON 什么是JSON JSON 指的是 JavaScript 对象表示法(JavaScript Object Notation) JSON 是轻量级的文本数据交换格式 JSON 独立于语言 * J ...

  5. es6中对象转数组,转map

    //对象转数组let array = Object.keys(userPermission).map(key=> userPermission[key]) console.log(array) ...

  6. An In-Depth Look at the HBase Architecture--转载

    原文地址:https://www.mapr.com/blog/in-depth-look-hbase-architecture In this blog post, I’ll give you an ...

  7. AtCoder Regular Contest 083 D: Restoring Road Network

    题意 有一张无向带权连通图(点数<=300),给出任意两点i,j之间的最短路长度dis[i][j].问是否存在一张这样的无向图.如果不存在输出-1.如果存在输出所有这样的无向图中边权和最小的一张 ...

  8. 【BZOJ2109/2535】【NOI2010】航空管制(贪心)

    [BZOJ2109/2535][NOI2010]航空管制(贪心) 题面 BZOJ2109 BZOJ2535 题解 很好玩的一道题目 先看第一问,显然是要找一个合法的拓扑排序的序列. 直接拓扑排序,把队 ...

  9. 关于kali linux系统的简单工具

    Linux系统中关于几个重要目录的原英文解释: /etc/: Contains configuration files of the installed tools /opt/: Contains M ...

  10. [NOIP2016 D1T3]换教室 【floyd+概率dp】

    题目描述 对于刚上大学的牛牛来说,他面临的第一个问题是如何根据实际情况申请合适的课程. 在可以选择的课程中,有 2n2n 节课程安排在 nn 个时间段上.在第 ii(1 \leq i \leq n1≤ ...