移动开发Javascript类库- Zepto.js

Posted by sqq5682 on November 12, 2016

zepto.js是一个专为mobile WebKit浏览器(如:Safari和Chrome)而开发的一个JavaScript框架。Github 上面的源代码

中文手册参考http://www.360weboy.com/handbook/zepto/index.html

Zepto 的兼容平台和浏览器如下:

桌面浏览器:

Safari 5+ (Mac, Win)
Chrome 5+ (Win, Mac, Linux, Chrome OS)
Mozilla Firefox 4+ (Win, Mac, Linux)
Opera 10+ (Win, Mac, Linux)

移动浏览器:

iOS 4+ Safari
Chrome for Android
Chrome for iOS
Android 2.2+ Browser
webOS 1.4.5+ Browser
BlackBerry Tablet OS 1.0.7+ Browser
Amazon Silk 1.0+
Firefox for Android
Firefox OS Browser
Practically any WebKit-based browsers/runtimes

Zepto 不兼容 IE,不过因为语法兼容 jQuery,IE 下可以使用 jQuery 替代:

<script>
   document.write('<script src=' +
   ('__proto__' in {} ? 'zepto' : 'jquery') +
   '.js><\/script>')
</script>

Zepto能够帮助开发人员简单、快速地完成开发交付任务。更重要的是这个JS框架,是超轻量级的,只有5KB。zepto.js的语法借鉴并且兼容jQuery。 jQuery 的 ajax,addClass,find,next,toggle,wrap等主流的 jQuery API 都有了,如下:

方法

除了与jQuery相同的$(“#id”) , $(“.classname”) , $(“tagName”) 相当之外,还可以直接创建元素$(“<p>this is p</p>”),而根据官方文档应该还有另外一种方法创建元素。

$.each 递归调用

  $.extend 将多个对象的属性合到目标对象中去

  $.fn.方法名 —— 可以调用所有的方法

$.is….普通是判断方法,内部为 return value instanceof Array/Object….

$.map 将一个数组转换为另一个数组(需要返回而非打印)

生成新数组

addclass(“classname”) 为元素添加class=classname

另外添加了 touch events。可以长按,滑动,就如使用 iOS 或者 Android 一样。

轻触:tap(解决click在移动端延迟的200-300ms)

双击:doubleTap

长按:longTap

滑动:swipe

滑动自定方向:swipeLeft, swipeRight, swipeUp, swipeDown

Github 上面Zepto 源码中有 14 个模块

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

Zepto使用过程中注意事项

元素的尺寸计算

首先 Zepto 没有 .innerHeight() .outerWidth() 等四个方法,其次,它的 .height()/.width() 方法也不完善,对于 display:none 的元素,计算出的高宽都是 0

而这在 jQuery 里面是没有问题的,因为 jQuery 针对这种元素,会先设置其 css 样式设置为 position: “absolute”, visibility: “hidden”, display: “block”计算完高宽后再恢复,如果遇到这种特殊情况,可以参考 jQuery 写一个类似的方法。

.prop() 方法的陷阱

比如$(‘#text’).prop(‘readonly’, true) ,正确的写法是这样 $(‘#text’).prop(‘readOnly’, true) ,注意大小写!

.show() 的动画效果

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

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

如果你调用 $(‘div’).show(‘fast’) ,那么动画完成后你看到的不会是一个半透明的元素,而是全黑不透明的。

因为 Zepto 的 .show() 动画实现的很简单,没有高宽的变化,而是将透明度从 0 逐渐变为 1,所以元素上原来设置的透明度就被替代了。

这种情况下,可以用 .fadeIn() 方法来替代 .show()。

tap事件阻止冒泡的方法

$("a.btn").on("tap",function(e){
   e.stopPropagation();//该方法不起作用
   $("div.panel").show();
});
$(document).on("tap",function(e){
   $("div.panel").hide();
});

修改后的

$("a.btn").on("tap",function(){
    $("div.panel").show();
});
$(document).on("tap",function(e){
    if(!$(e.target).hasClass("btn")){
       $("div.panel").hide();
    }
});