摘要:所以模塊依賴于模塊,在引入前必須引入模塊。原有的方法分析見讀源碼之樣式操作方法首先調(diào)用原有的方法,將元素顯示出來,這是實(shí)現(xiàn)動(dòng)畫的基本條件。如果沒有傳遞,或者為值,則表示不需要?jiǎng)赢?,調(diào)用原有的方法即可。
fx 模塊提供了 animate 動(dòng)畫方法,fx_methods 利用 animate 方法,提供一些常用的動(dòng)畫方法。所以 fx_methods 模塊依賴于 fx 模塊,在引入 fx_methods 前必須引入 fx 模塊。
讀 Zepto 源碼系列文章已經(jīng)放到了github上,歡迎star: reading-zepto
源碼版本本文閱讀的源碼為 zepto1.2.0
GitBook《reading-zepto》
內(nèi)部方法 animfunction anim(el, speed, opacity, scale, callback) { if (typeof speed == "function" && !callback) callback = speed, speed = undefined var props = { opacity: opacity } if (scale) { props.scale = scale el.css($.fx.cssPrefix + "transform-origin", "0 0") } return el.animate(props, speed, null, callback) }
如果 speed 的參數(shù)類型為函數(shù),并且 callback 沒有傳遞,則認(rèn)為 speed 位置的參數(shù)為 callback。
props 是過渡的屬性, fx_fethods 主要實(shí)現(xiàn) show 、 hide 和 fadeIn、 fadeOut 等動(dòng)畫,用到的過渡屬性為 opecity 和 scale 。
當(dāng)為 scale 時(shí),將轉(zhuǎn)換的原點(diǎn)設(shè)置為 0 0。
最后調(diào)用的是 fx 模塊中的 animate 方法。
hidevar document = window.document, docElem = document.documentElement, origShow = $.fn.show, origHide = $.fn.hide, origToggle = $.fn.toggle function hide(el, speed, scale, callback) { return anim(el, speed, 0, scale, function(){ origHide.call($(this)) callback && callback.call(this) }) }
hide 方法其實(shí)就是將 opacity 的屬性設(shè)置為 0 。在動(dòng)畫完成后,調(diào)用 origHide 方法,即原有的 hide 方法,將元素的 display 設(shè)置為 none。原有的 hide 方法分析見《讀Zepto源碼之樣式操作》
.show()$.fn.show = function(speed, callback) { origShow.call(this) if (speed === undefined) speed = 0 else this.css("opacity", 0) return anim(this, speed, 1, "1,1", callback) }
show 方法首先調(diào)用原有的 hide 方法,將元素顯示出來,這是實(shí)現(xiàn)動(dòng)畫的基本條件。
如果沒有設(shè)置 speed, 表示不需要?jiǎng)赢?,則過渡時(shí)間 speed 設(shè)置為 0。立即顯示元素。
否則,先將 opactity 設(shè)置為 0, 再調(diào)用 anim 方法執(zhí)行動(dòng)畫。opacity 設(shè)置為 0 也是執(zhí)行動(dòng)畫的關(guān)鍵,從 0 變?yōu)?1 才有過渡的效果。
.hide()$.fn.hide = function(speed, callback) { if (speed === undefined) return origHide.call(this) else return hide(this, speed, "0,0", callback) }
如果 speed 沒有傳遞,簡(jiǎn)單調(diào)用原有的 hide 方法即可,因?yàn)椴恍枰^渡效果。
否則調(diào)用內(nèi)部方法 hide。
.toggle()$.fn.toggle = function(speed, callback) { if (speed === undefined || typeof speed == "boolean") return origToggle.call(this, speed) else return this.each(function(){ var el = $(this) el[el.css("display") == "none" ? "show" : "hide"](speed, callback) }) }
toggle 方法是 show 和 hide 方法的切換。
如果 speed 沒有傳遞,或者為 boolean 值,則表示不需要?jiǎng)赢?,調(diào)用原有的 toggle 方法即可。為什么要有一個(gè) boolean 值的判斷呢,這要看回 《讀Zepto源碼之樣式操作》關(guān)于 toggle 方法的分析了,原有的 toggle 方法接收一個(gè)參數(shù),如果為 true,則指定調(diào)用 show 方法,否則調(diào)用 hide 方法。
否則,判斷每個(gè)元素的 display 屬性值,如果為 none,則調(diào)用 show 方法顯示,否則調(diào)用 hide 方法隱藏。
.fadeTo()$.fn.fadeTo = function(speed, opacity, callback) { return anim(this, speed, opacity, null, callback) }
fadeTo 可以其實(shí)是通過調(diào)節(jié)過渡時(shí)間 speed 和透明度 opacity 來實(shí)現(xiàn)動(dòng)畫效果。
和 show 和 hide 不同的是,fadeTo 的 opacity 不一定為 1 或者 0, 可以由調(diào)用者指定。
.fadeIn()$.fn.fadeIn = function(speed, callback) { var target = this.css("opacity") if (target > 0) this.css("opacity", 0) else target = 1 return origShow.call(this).fadeTo(speed, target, callback) }
淡入效果。
fadeIn 其實(shí)調(diào)用的是 fadeTo ,跟 show 有點(diǎn)類似,最終將 opacity 變?yōu)?1 。只是不處理 scale 變形。
.fadeOut()$.fn.fadeOut = function(speed, callback) { return hide(this, speed, null, callback) }
淡出。
fadeOut 調(diào)用的是 hide 方法,只是不處理 scale 變形。
.fadeToggle()$.fn.fadeToggle = function(speed, callback) { return this.each(function(){ var el = $(this) el[ (el.css("opacity") == 0 || el.css("display") == "none") ? "fadeIn" : "fadeOut" ](speed, callback) }) }
切換淡入淡出效果。
如果 display 為 node 時(shí),調(diào)用 fadeIn 方法顯示,否則調(diào)用 fadeOut 方法隱藏。
系列文章讀Zepto源碼之代碼結(jié)構(gòu)
讀Zepto源碼之內(nèi)部方法
讀Zepto源碼之工具函數(shù)
讀Zepto源碼之神奇的$
讀Zepto源碼之集合操作
讀Zepto源碼之集合元素查找
讀Zepto源碼之操作DOM
讀Zepto源碼之樣式操作
讀Zepto源碼之屬性操作
讀Zepto源碼之Event模塊
讀Zepto源碼之IE模塊
讀Zepto源碼之Callbacks模塊
讀Zepto源碼之Deferred模塊
讀Zepto源碼之Ajax模塊
讀Zepto源碼之Assets模塊
讀Zepto源碼之Selector模塊
讀Zepto源碼之Touch模塊
讀Zepto源碼之Gesture模塊
讀Zepto源碼之IOS3模塊
讀Zepto源碼之Fx模塊
參考 License署名-非商業(yè)性使用-禁止演繹 4.0 國(guó)際 (CC BY-NC-ND 4.0)
最后,所有文章都會(huì)同步發(fā)送到微信公眾號(hào)上,歡迎關(guān)注,歡迎提意見:
作者:對(duì)角另一面
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/88984.html
摘要:讀源碼系列文章已經(jīng)放到了上,歡迎源碼版本本文閱讀的源碼為改寫原有的方法模塊改寫了以上這些方法,這些方法在調(diào)用的時(shí)候,會(huì)為返回的結(jié)果添加的屬性,用來保存原來的集合。方法的分析可以看讀源碼之模塊。 Stack 模塊為 Zepto 添加了 addSelf 和 end 方法。 讀 Zepto 源碼系列文章已經(jīng)放到了github上,歡迎star: reading-zepto 源碼版本 本文閱讀的...
摘要:模塊處理的是表單提交。表單提交包含兩部分,一部分是格式化表單數(shù)據(jù),另一部分是觸發(fā)事件,提交表單。最終返回的結(jié)果是一個(gè)數(shù)組,每個(gè)數(shù)組項(xiàng)為包含和屬性的對(duì)象。否則手動(dòng)綁定事件,如果沒有阻止瀏覽器的默認(rèn)事件,則在第一個(gè)表單上觸發(fā),提交表單。 Form 模塊處理的是表單提交。表單提交包含兩部分,一部分是格式化表單數(shù)據(jù),另一部分是觸發(fā) submit 事件,提交表單。 讀 Zepto 源碼系列文章已...
摘要:的模塊用來獲取節(jié)點(diǎn)中的屬性的數(shù)據(jù),和儲(chǔ)存跟相關(guān)的數(shù)據(jù)。獲取節(jié)點(diǎn)指定的緩存值。如果存在,則刪除指定的數(shù)據(jù),否則將緩存的數(shù)據(jù)全部刪除。為所有下級(jí)節(jié)點(diǎn),如果為方法,則節(jié)點(diǎn)自身也是要被移除的,所以需要將自身也加入到節(jié)點(diǎn)中。 Zepto 的 Data 模塊用來獲取 DOM 節(jié)點(diǎn)中的 data-* 屬性的數(shù)據(jù),和儲(chǔ)存跟 DOM 相關(guān)的數(shù)據(jù)。 讀 Zepto 源碼系列文章已經(jīng)放到了github上,歡...
摘要:記一次頁(yè)面卡頓排查前述前段時(shí)間上線的一個(gè)移動(dòng)端的項(xiàng)目,由于開發(fā)時(shí)間倉(cāng)促,一直被用戶投訴頁(yè)面卡頓。這顯然要導(dǎo)致卡頓。總結(jié)這只是頁(yè)面卡頓的一個(gè)點(diǎn),當(dāng)然還有很多,我們的頁(yè)面卡頓就是由這樣一個(gè)一個(gè)的點(diǎn)造成的。 記一次頁(yè)面卡頓排查 前述 前段時(shí)間上線的一個(gè)移動(dòng)端的項(xiàng)目,由于開發(fā)時(shí)間倉(cāng)促,一直被用戶投訴頁(yè)面卡頓?,F(xiàn)在終于有時(shí)間來好好排查一下,看到底是什么原因。業(yè)務(wù)代碼都不是自己寫的,這是頗為頭疼的...
摘要:前端日?qǐng)?bào)精選帶來了什么以及對(duì)的解釋專題之亂序第期如何無痛降低面條代碼復(fù)雜度道阻且長(zhǎng)啊前端面試總結(jié)附答案上前端安全知識(shí)中文開源許可證教程阮一峰的網(wǎng)絡(luò)日志裝飾器讓你的代碼更簡(jiǎn)潔掘金什么是函數(shù)眾成翻譯和十分鐘快速入門眾成翻譯設(shè)計(jì)最佳實(shí) 2017-10-12 前端日?qǐng)?bào) 精選 React 16 帶來了什么以及對(duì) Fiber 的解釋JavaScript專題之亂序【第1076期】 如何無痛降低 if...
閱讀 1649·2023-04-25 18:19
閱讀 2093·2021-10-26 09:48
閱讀 1100·2021-10-09 09:44
閱讀 1748·2021-09-09 11:35
閱讀 3041·2019-08-30 15:54
閱讀 2039·2019-08-30 11:26
閱讀 2299·2019-08-29 17:06
閱讀 895·2019-08-29 16:38