资源描述:
《jquery191源码分析系列(十五)动画处理之外篇_jquery》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、Jqueryl.9.1源码分析系列(十五)动画处理之外篇a.动画兼容Tween.propHooksTween,propllooks提供特殊情况卜•设置、获取css特征值的方法,结构如卜Tween.propHooks={default:{get:function()set:function(){•••}},scrollTop:{set:function(){•••}}scrollLeft:{set:function()}}}Tween.propHooks.scrollTop和Tween.propHooks.scrollLeft两个主耍是在ie8
2、离线状态下会岀现混乱而把css特征值保存到节点上set:function(tween){if(tween,elem.nodeType&&tween.elem.parentNode){twocn.clcm[twocn.prop]二twocn.now;Tween.propHooks._default的get方法会尝试直接从节点上取得css的tween,prop特征值,如果取不到则使用jQuery.css()方式來获取。该方法处理中,简单的值如“10px”会被解析为浮点数;复朵的值,如“旋转(lrad)"返回原样。并对返回结果再做处理:空字符串,n
3、ull,undefined和"auto"都转化为0;其他情况不变。get:function(tween){varresult;if(tween.elem[tween,prop]!=null&&(!tween,elem・style
4、
5、tween,elem・style[tween,prop]二二null)){returntween.elem[tween.prop];//传递一个空字符串作为第三个参数的.css会自动尝试parseFloat,〃并返回到一个字符串,如果解析失败的话。//所以,简单的值,如“10px”会被被解析为浮点数。复杂的值,如“
6、旋转(lrad)”返回原样。result=jQuery.css(tween,elem,tween,prop,"");//空字符串,null,undefined和"auto"都转化为0return!result
7、
8、result二二二"rnito"?0:result;Tween.propHooks.default的set方法先会尝试jQuery.fx.step[tween,prop]來设置向下兼容;否则会使用jQuery.style來设置css特征值;最极端情况则会将特征值一直接保存在节点上set:function(twecm){//使用step
9、hook向下兼容一使用cssHooki\果他存在一使用.style如果可用的话〃使用直接的特征值如果可用可用的话if(jQuery.fx.step[tween,prop]){jQuery.fx.stcp[twocn.prop](twocn);}elseif(tween・elem.style&&(tween,elem.styletjQuery.cssProps[tween,prop]]!=null
10、jQuery.cssHooksttween,prop])){jQuery.style(tween.elem,tween.prop,tween.no
11、w+tween.unit);}else{twocn.clcm[twocn.prop]=twocn.now;}}b.动画专用对象jQuery.fxjQuery.fx封装了一些用來执行动画动作的函数,结构如下jQuery.fx={tick=function(){…},〃每个时间点都会执行的函数外壳,会取出jQuery.timers中的函数执行timer二function(timer){...},//执行参数中的函数并启动计时interval=13,//计时步长start=function(){...},//启动计时stop=function(){
12、...},//停止计时speeds={slow:600,fast:200,default:400},//动画速度(完整动画执行吋间)step={}//向下兼容〈1・8扩展点详细的源码分析如下jQucry.fx二Twocn.prototype・init;//每个时间点都会执行的函数外壳,会取出jQuery.timers屮的函数执行jQuery.fx.tick=function(){vartimer,timers=jQuery.timers,i=0;fxNow=jQuery.now();for(;i13、r二timers[i];//Checksthetimerhasnotalreadybeenremovedif(!timer()&&timcrs[i]===timer