zepto
1.zepto支持浏览器
ie10+ chrome 30+ firefox 24+ safiri 6+ ios 5+ safari andriod 2.3+ browser
2.zepto 模块
zepto —— default ——核心模块,必须引入
event ——default —— 通过on() off()处理事件
ajax —— default —— XMLHttpRequest 和JSONP实用功能
form —— default —— 序列化提交web表单
ie —— default —— 增加支持桌面的ie10和windows phone 8
detect —— 提供$.os $.browser消息(
判断设备和浏览器,zepto.os判断查看设备,返回一个对象{ios:true ,iphoe:true,version:"6.1"} zepto.browser查看浏览器,返回对象{version:'536.26,webkit:true} )
fx —— 提供 animate() 方法
fx_methods —— 以动画形式的show,hide,toggle.fade*()方法,即可使用show() hide()方法支持动画
var div1 = $("#fool")
div1.animate({
"width"; "300px",
"height": "300px"
},
'slow','ease-in-out',
function {
console.log('div animate callback')
div2.hide('slow',function() {})
div2.fadeOut('slow',function)() {
console.log('div2 animate callback')
},2000)
assets 支持从DOM中移除Image元素并清理 ios内存
mobile safari严格的资源占用限制说起;mobile safari要比桌面版的浏览器的资源占用限制严格的多,当ios加载大文件时会停止加载,这时需要回收这些图片资源 ,因为不能保证垃圾回收机制是否有回收处理掉这些图片,所以我们采用移除image元素后清理内存,释放图片资源。
data 对data()方法的完整支持,能够在内存中存储内存对象(读取或写入dom的data-* 属性,点像attr,但属性名要加上data-,zepto基本实现 ‘data()’方法只能存储字符串,当读取属性时,会有下列转换:
“true","false""null"转换为相应类型 数字值转换为实际数字类型 有效的JSON值会被解析 其他一切均作为字符串返回 )
deferred 提供$.Deferred pormised API.依赖"callbakcs"模块
- ajax请求或处理结果需要回调函数来执行完成后的操作时,使用deferred作为回调函数解决方案
$.Deferred()生成deferred对象 deferred.done()操作成功时的回调函数 deferred.fail()失败 deferred.promise() 无参时返回对象,运行状态无法改变,有参时作为在参数对象上部署deferred接口 deferre.resolve()改变 deferred对象运行状态为”已完成“触发done()方法 deferre.reject()改变 deferred对象运行状态为”已完成“触发fail()方法 $.when()为多个操作指定回调函数
deferred.then(),
deferred.always
ex:
$when($.ajax(url).then(successFunc,failureFunc)
- ajax版本区别
ajax1.5之前
$.ajax({url:test.html',
success(){},
error(){}
})
ajax 1.5之后 ,返回deferred对象,可链式操作
$.ajax("test.html")
.done({function(){})
.fail(function(){})
允许添加多个回调函数
$.ajax("test.html")
.done({function(){})
.fail(function(){})
.done({function(){})
.fail(function(){})
允许为多个事件指定一个回调函数
callbacks 为"deferred"模块提供 $.Callbacks.
selector 支持 jquery css表达式功能($('div:first')第一个div对象,el.is(':visible')判断el是否为禁用的input或者button
touch 在触摸设备上触发tap- swipe-相关事件。
基本touch事件:
- touchstart 手指触发屏幕上的时候触发
- touchmove 手指在屏幕移动的时候触发
- touchcancel 系统取消touch事件的时候触发
gesture 在触摸设备上触发 pinch(手指缩放)事件
stack (栈)提供andSelf() &end ()链式调用方法
ios3 String.prototype.trim 和 Array.prototype.reduce 方法 (如果他们不存在) ,以兼容 iOS 3.x.
3.zepto api
(1).$()
//创建元素
#$("<p>hello</p>")
//创建带有属性的元素
$("<p />"),{ text”:’hello',id:"greeting',css:{color:"darkbule"} })
(2).camelCase(string)驼峰命名
(3).$contains(parent,node) 检查父节点是否包含给定的dom节点,如果两者是相同的节点 ,返回false
(4).each(collection,function(index,item){...})遍历数组或心key-value值对方式遍历对象。回调函数返回false停止遍历。
- %d带符号十进制数
- %s字符串
(5)$.fn在此对象上添加的方法所有的zepto对象都能调用
(6)$.grep 获取包含回调函数中返回true的数组项
$.grep([1,2,3], function(item) {
return item > 1
})
(7)inArray 返回数组中指定元素的索引值
(8)isNumeric如何该值为有限数值或一个字符串表示则返回true
(9)isPLainObject 测试一个对象是否通过 对象常量("{}") 或者 new Object 创建的,如果是,则返回true。
(10) var callback = $.noop引用一个空函数
(11)$.parseJson接受一个标准格式的json并返回解析后的js对象
(12)add 添加元素到当前匹配的元素集合中
$('li').add('p').css('background-color','red')
(13)append在匹配元素末尾插入内容 after在匹配元素后面插入内容
(14)append appendTo区别
$('ul').append('<li> new list item</li>')
$('<li> new list item </li>').appendTo('ul')
(15) filter对象,过滤对象集合
(16)forEach与each相似,都是遍历对象集合中的每个元素,但回调函数返回false时不停止遍历
(17)get 从当前对象集合中获取指定的元素或所有元素
$('h2').get()
$('h2').get(0)
(18)hasClass 检查对象集合中是否有元素含有指定的class
(19)获取或设置元素的html内容,不用innerHTML
(20)is判断当前元素集合中第一个元素是否符合css选择器
(21)offSet获取当前元素在document的位置
(22)offsetParent 找到第一个定位过的祖先元素
(23)parent 获取直接父元素,parents 获取所有祖先元素
(24)pluck 获取对象元素的属性值,返回值是数组
(25)prepend将内容插入到元素开头 prependTo(同appendTo)
(26)prev 获取元素的前一个兄弟节点
(27)prop读取或设置元素属性值,优先于attr
(28)reduce 遍历当前对象集合,memo是上次函数的返回值,迭代进行遍历
reduce(function(memo,item,index,array){}
(29)removeClass 移除class名可用空格分隔
(30)replaceWith 用给定内容替换所有匹配元素
(31)slice(start, [end]) 提取数组的子集
(32)text 方法不能用来获取或设置html,只能获取元素的文本内容
(33)toggleClass 如果匹配元素有此class名就删除它,如果没有就添加它
(34)unwrap 移除集合中每个元素的直接父节点,并把他们的子元素还保留在原来的公交车
<span>
')
(35)wrap 在每个匹配的元素外层包上一个html元素 (".button a').wrap('wrapAll 在所有匹配元素外层包一个单独结构
$('a.button').wrapAll('<div id = buttons />')
wrapInner 将每个的内容包在一个单独的结构中
('ol lu '),wrapInner('<p><em /></p>')
(36)Detect module
该方法可以在不同的环境中微调你的站点或应用,可以识别手机或平板,以及不同系统和浏览器
$.os.phone
$.os.andriod
4.zepto ajax
(1). 默认情况下,ajax事件在document对象上触发。
$(document).on('ajaxBeforeSend', functio(e,xhr,options) {
//页面上的每个ajax请求之前都会触发
//可编辑ajax()和xhr对象
//通过返回false取消此操作
}
(2). 如果请求的context 是一个dom节点,那么在该dom节点中触发,然后在dom中冒泡。
contenxt用于亩ajax相关回调函数的上下文(this指向)
$.ajax({
//请求方式
type:'GET‘,
//请求地址
url:'/projects',
//请求数据
data:{ name: 'zepto.js'},
//期待服务器返回类型
dataType: 'json',
//请求超时时间
timeout: 3000,
//当前请求的this指向为body
context: $('body')
//成功后的回调
success: function(data) {
{'project':{'id': 41, 'html': '<div> ..'}}
//将返回的json对象(html)附加到上下文对象
this.append(data.project.html)
}
//请求失败后的回调
error: function(xhr,type) {
alert('error')
}
})
//假定请求方式为post
$.ajax({
type:'POST',
url:'/',
data:JSON.Stringfy({'name':'zepto.js'})
//发送请求类型
contentType:'appliction/json'
})
(3).ajaxSettings 包含ajax请求的默认设置对象
(4)append在每个匹配的元素末尾插入内容,内容可为html字符串,dom节点,或者节点组成的数组
$.get('https://api.github.com/users/momo-0902',function(response) {
$(document.body).append(response)
})
- !提示错误,Failed to execute 'insertBefore' on 'Node':parameter 1 is not of type 'Node'. 错误原因:无法在“Node”上执行“insertBefore”:参数1不是“Node”类型。 请求回来的结果是一个json字符串,并不是一个Node类型
* 将 $(document.body).append(response)改为console.log(response)可看请求成功的数据
$(document.body).append('<li>hahaha</li>')可增加一个li节点 到body中。
(5).$param 序列化一个对象
(6).$.post(url,[data],function(data,status,xhr){},[dataType])
$.post('/creat',
//serialize()在ajax post请求中将用作提交表单值编译成URL编码的字符串。
$("#some_form').serialize(),
function(){
})
(7).load(url, function(data, status, xhr){ ... })载入远程 html内容到当前集合中
$("#some_element“).load('/foo.html #bar') 匹配id为bar的html内容
(8).ex
$("btn").click(function() {
$.ajax({
url:'user',
type:'post',
data:("userName:$("#userName").val(),"password":$("passWord").val()),
async:false,
success: functoin() {
if(data == 0) {
alert('用户名错误')
}else if(data == 2) {
alert('密码错误')
}else {
}
}
})
})
5.zepto 事件
(1).$Event(type,[properties])
创建并初始化一个指定的dom事件,如果给定properties对象,使用它来扩展出新的事件对象。默认情况下,事件被设置为冒泡方式;这个可以通过设置bubbles为false来关闭。
(2).$proxy
接受一个函数,返回一个新函数‘ 并且这个新函数始终保持了特定的上下文(context)语境,新函数中this指向context参数。另外一种形式,原始的function是从上下文(context)对象的特定属性读取。
(3) .off 移除通过on添加的事件
(4).on为元素添加事件,事件以空格隔开
(5).one为元素绑定一次性事件
(6).trigger 在元素集合上触发指定事件
(7).triggerHandler 在指定元素上触发指定事件
(7).起初开发的时候我用的是给元素绑定onclick事件,但是click事件有300毫秒延迟,还是应该用zepto自带的tap事件
6.zepto动画
zepto动画需要引入fx模块,用css动画实现
- animiate(动画对象,花费时间,动画类型,动画完成时的回调函数)
ex1:
$("#banner ul").animate({marginLeft:"-800px"},600, function () {
$("#banner ul").css('marginLeft','0px');
});
ex2:
$('some_element').animate({
opacity: 0.25,
left: '50px',
color: '#000',
rotateZ: '45deg',
translated3d: '0,10px,0',
},500,
'ease-out')
})
css3动画整理如下
- 在css3中创建动画,需要@keyframes规则,在keyframes中定义新样式为动画效果
(1)、@keyframes规则
//从动画开始到结束使用关键词from to
@keyframesmyfirst {
form{background:red}
to{background: yellow}
}
//使用百分比来规定变化发生的时间
@keyframes myfirst {
0% {background: red}
25%{background: yellow}
50%{background: blue}
100%{background: green}
}
(2)、animat属性
aiimation: animate- name animate-duration animate- timing-function animate-delay 名字 花费时间 速度曲线 延迟 animate-iteration-count animate-direction 播放次数是否反向播放 绑定@keyframes中的动画到元素的animate属性中
div{
ainmation: myfirst 5s
//在此注意要加上浏览器兼容属性,此处省略
}
(3).其余动画属性
animation-play-state animation-fill-mode 动画是否正在运行或暂停 对象动画时间之外的状态