摘要:但是在某些場(chǎng)景下,還是需要擁有自身的下拉刷新的能力。比如需要統(tǒng)一和安卓的體驗(yàn)需要自定義下拉刷新動(dòng)畫需要已內(nèi)的背景或者其他元素有聯(lián)動(dòng)交互反饋而拖動(dòng)整個(gè)的下拉刷新無(wú)法滿足這些場(chǎng)景。很明顯非常擅長(zhǎng)處理下拉刷新的需求。
原文地址:https://github.com/AlloyTeam/AlloyTouch/wiki/Pull-to-refresh
效果展示 掃碼體驗(yàn)你也可以點(diǎn)擊這里訪問(wèn)Demo
可以點(diǎn)擊這里查看代碼
在手機(jī)QQ內(nèi)部,其實(shí)客戶端提供了下拉刷新的能力,拖動(dòng)整個(gè)webview進(jìn)行下拉刷新,loading以及l(fā)oading相關(guān)的wording和動(dòng)畫都是客戶端的。解決了一部分需要下拉場(chǎng)景的問(wèn)題。但是在某些場(chǎng)景下,還是需要web擁有自身的下拉刷新的能力。比如:
需要統(tǒng)一IOS和安卓的體驗(yàn)
需要自定義下拉刷新動(dòng)畫
需要已web內(nèi)的背景或者其他Dom元素有聯(lián)動(dòng)交互反饋
而拖動(dòng)整個(gè)webview的下拉刷新無(wú)法滿足這些場(chǎng)景。AlloyTouch很明顯非常擅長(zhǎng)處理web下拉刷新的需求。
頁(yè)面骨架實(shí)現(xiàn)pullRefresh在AlloyTouch header的下面,其中:
header zIndex > pullRefresh zIndex >wrapper和scroller的 zIndex。
看以看到,下拉到一定程度,箭頭有個(gè)旋轉(zhuǎn)動(dòng)畫,以及wording描述也會(huì)變化。這里主要利用js去切換class去實(shí)現(xiàn),動(dòng)畫使用CSS transition實(shí)現(xiàn)。所以要預(yù)先定義好兩種class。
.arrow { margin-top: 5px; margin-bottom: 5px; } .arrow:after { content: "Pull to refresh"; } .arrow_up.arrow:after { content: "Release to refresh"; } .arrow_up img { transform: rotateZ(180deg); -webkit-transform: rotateZ(180deg); } .pull_refresh img { width: 20px; transition: transform .4s ease; }
通過(guò)上面定要好的class,在js邏輯里面只需要負(fù)責(zé)remove和add arrow_up clas便可以實(shí)現(xiàn)箭頭旋轉(zhuǎn)和wording的切換。
Loading動(dòng)畫實(shí)現(xiàn)loading效果使用SVG去實(shí)現(xiàn),利用12個(gè)rect的 indefinite animate去實(shí)現(xiàn)。begin代表開(kāi)始時(shí)間有個(gè)遞增達(dá)到loading的效果。
核心實(shí)現(xiàn)var scroller = document.querySelector("#scroller"), arrow = document.querySelector("#arrow"), pull_refresh = document.querySelector("#pull_refresh"), list = document.querySelector("#list"), index = 0; //給pull_refresh注入transform屬性并且關(guān)閉透視投影 Transform(pull_refresh, true); //給scroller注入transform屬性并且關(guān)閉透視投影 Transform(scroller, true); new AlloyTouch({ touch: "#wrapper", target: scroller, property: "translateY", initialVaule: 0, min: window.innerHeight - 45 - 48 - 2000, max: 0, change: function (value) { //pull_refresh的translateY由scroller的value決定,所以向下拉scroller的時(shí)候,可以拉動(dòng)pull_refresh pull_refresh.translateY = value; }, touchMove: function (evt, value) { if (value > 70) { //當(dāng)下拉到達(dá)70px的時(shí)候下箭頭變成上箭頭并且修改wording //為了代碼簡(jiǎn)潔,直接使用classList //http://caniuse.com/#search=classList //下箭頭變成上箭頭并且修改wording arrow.classList.add("arrow_up"); } else { //當(dāng)下拉未到達(dá)70px上箭頭變成下箭頭并且修改wording arrow.classList.remove("arrow_up"); } }, touchEnd: function (evt, value) { if (value > 70) { //運(yùn)動(dòng)到60px的地方,用來(lái)顯示loading this.to(60); //模擬請(qǐng)求~~~ mockRequest(this); //return false很重要,用來(lái)防止執(zhí)行alloytouch內(nèi)部超出邊界的回彈和慣性運(yùn)動(dòng) return false; } } }); //模擬請(qǐng)求~~~ function mockRequest(at) { //顯示loading~~ pull_refresh.classList.add("refreshing"); //模擬cgi請(qǐng)求 setTimeout(function () { var i = 0, len = 3; for (; i < len; i++) { var li = document.createElement("li"); li.innerHTML = "new row " + index++; list.insertBefore(li, list.firstChild); } //重置下拉箭頭和wording arrow.classList.remove("arrow_up"); //移除loading pull_refresh.classList.remove("refreshing"); //回到初始值 at.to(at.initialVaule); //由于加了三個(gè)li,每個(gè)li高度為40,所以min要變得更小 at.min -= 40 * 3; }, 500); }
不廢話,都在注釋里。
開(kāi)始AlloyTouchGithub:https://github.com/AlloyTeam/AlloyTouch
任何意見(jiàn)和建議歡迎new issue,AlloyTouch團(tuán)隊(duì)會(huì)第一時(shí)間反饋。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/81123.html
摘要:動(dòng)畫庫(kù)學(xué)習(xí)筆記可以很方便的用做下拉刷新,抽獎(jiǎng)轉(zhuǎn)盤等效果,我一直很好奇他是如何工作的,尤其是它能完美模擬原生的平滑滾動(dòng)和慣性回彈等效果,而且體積小,速度快。當(dāng)軸逐漸增加到達(dá)時(shí),當(dāng)前值軸會(huì)到達(dá)目標(biāo)值。類似的還有,屬性值的排序會(huì)造成影響。 AlloyTouch動(dòng)畫庫(kù)學(xué)習(xí)筆記 alloyTouch可以很方便的用做下拉刷新,抽獎(jiǎng)轉(zhuǎn)盤等效果,我一直很好奇他是如何工作的,尤其是它能完美模擬原生的平滑...
摘要:所以制作各種各樣的輪播組件還是得心應(yīng)手。第一種輪播圖如上圖所示。因?yàn)槌跏贾凳?,所有向左邊滑?dòng)一定是負(fù)值。可以得到一定是??梢阅玫疆?dāng)前的位置以及當(dāng)前所處的位置。是運(yùn)動(dòng)結(jié)束后的回調(diào),用來(lái)設(shè)置的。 輪播圖也涉及到觸摸和觸摸反饋,同時(shí),AlloyTouch可以把慣性運(yùn)動(dòng)打開(kāi)或者關(guān)閉,并且設(shè)置min和max為運(yùn)動(dòng)區(qū)域,超出會(huì)自動(dòng)回彈。除了一般的豎向滾動(dòng),AlloyTouch也可以支持橫向滾動(dòng),甚...
摘要:設(shè)置為,相對(duì)于高度為的來(lái)說(shuō)就是。再看這一堆使用最關(guān)鍵的一點(diǎn)就是計(jì)算和的值??梢钥吹交卣{(diào)里可以拿到,也就是對(duì)象的實(shí)例,當(dāng)?shù)扔诖頋L到了底部,所以這里加上代表快要滾動(dòng)底部已經(jīng)看到了加載更多。開(kāi)始任何意見(jiàn)和建議歡迎,團(tuán)隊(duì)會(huì)第一時(shí)間反饋。 原文鏈接:https://github.com/AlloyTeam/AlloyTouch/wiki/kandian 先驗(yàn)貨 showImg(https://...
閱讀 3288·2023-04-25 18:03
閱讀 1151·2021-11-15 11:38
閱讀 5560·2021-10-25 09:45
閱讀 847·2021-09-24 09:48
閱讀 2303·2021-09-22 15:34
閱讀 1742·2019-08-30 15:44
閱讀 2685·2019-08-30 13:12
閱讀 609·2019-08-29 16:05