摘要:但是在某些場景下,還是需要擁有自身的下拉刷新的能力。比如需要統一和安卓的體驗需要自定義下拉刷新動畫需要已內的背景或者其他元素有聯動交互反饋而拖動整個的下拉刷新無法滿足這些場景。很明顯非常擅長處理下拉刷新的需求。
原文地址:https://github.com/AlloyTeam/AlloyTouch/wiki/Pull-to-refresh
效果展示 掃碼體驗你也可以點擊這里訪問Demo
可以點擊這里查看代碼
在手機QQ內部,其實客戶端提供了下拉刷新的能力,拖動整個webview進行下拉刷新,loading以及loading相關的wording和動畫都是客戶端的。解決了一部分需要下拉場景的問題。但是在某些場景下,還是需要web擁有自身的下拉刷新的能力。比如:
需要統一IOS和安卓的體驗
需要自定義下拉刷新動畫
需要已web內的背景或者其他Dom元素有聯動交互反饋
而拖動整個webview的下拉刷新無法滿足這些場景。AlloyTouch很明顯非常擅長處理web下拉刷新的需求。
頁面骨架實現pullRefresh在AlloyTouch header的下面,其中:
header zIndex > pullRefresh zIndex >wrapper和scroller的 zIndex。
看以看到,下拉到一定程度,箭頭有個旋轉動畫,以及wording描述也會變化。這里主要利用js去切換class去實現,動畫使用CSS transition實現。所以要預先定義好兩種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; }
通過上面定要好的class,在js邏輯里面只需要負責remove和add arrow_up clas便可以實現箭頭旋轉和wording的切換。
Loading動畫實現loading效果使用SVG去實現,利用12個rect的 indefinite animate去實現。begin代表開始時間有個遞增達到loading的效果。
核心實現var scroller = document.querySelector("#scroller"), arrow = document.querySelector("#arrow"), pull_refresh = document.querySelector("#pull_refresh"), list = document.querySelector("#list"), index = 0; //給pull_refresh注入transform屬性并且關閉透視投影 Transform(pull_refresh, true); //給scroller注入transform屬性并且關閉透視投影 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的時候,可以拉動pull_refresh pull_refresh.translateY = value; }, touchMove: function (evt, value) { if (value > 70) { //當下拉到達70px的時候下箭頭變成上箭頭并且修改wording //為了代碼簡潔,直接使用classList //http://caniuse.com/#search=classList //下箭頭變成上箭頭并且修改wording arrow.classList.add("arrow_up"); } else { //當下拉未到達70px上箭頭變成下箭頭并且修改wording arrow.classList.remove("arrow_up"); } }, touchEnd: function (evt, value) { if (value > 70) { //運動到60px的地方,用來顯示loading this.to(60); //模擬請求~~~ mockRequest(this); //return false很重要,用來防止執行alloytouch內部超出邊界的回彈和慣性運動 return false; } } }); //模擬請求~~~ function mockRequest(at) { //顯示loading~~ pull_refresh.classList.add("refreshing"); //模擬cgi請求 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); //由于加了三個li,每個li高度為40,所以min要變得更小 at.min -= 40 * 3; }, 500); }
不廢話,都在注釋里。
開始AlloyTouchGithub:https://github.com/AlloyTeam/AlloyTouch
任何意見和建議歡迎new issue,AlloyTouch團隊會第一時間反饋。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/81123.html
摘要:動畫庫學習筆記可以很方便的用做下拉刷新,抽獎轉盤等效果,我一直很好奇他是如何工作的,尤其是它能完美模擬原生的平滑滾動和慣性回彈等效果,而且體積小,速度快。當軸逐漸增加到達時,當前值軸會到達目標值。類似的還有,屬性值的排序會造成影響。 AlloyTouch動畫庫學習筆記 alloyTouch可以很方便的用做下拉刷新,抽獎轉盤等效果,我一直很好奇他是如何工作的,尤其是它能完美模擬原生的平滑...
摘要:所以制作各種各樣的輪播組件還是得心應手。第一種輪播圖如上圖所示。因為初始值是,所有向左邊滑動一定是負值。可以得到一定是。可以拿到當前的位置以及當前所處的位置。是運動結束后的回調,用來設置的。 輪播圖也涉及到觸摸和觸摸反饋,同時,AlloyTouch可以把慣性運動打開或者關閉,并且設置min和max為運動區域,超出會自動回彈。除了一般的豎向滾動,AlloyTouch也可以支持橫向滾動,甚...
摘要:設置為,相對于高度為的來說就是。再看這一堆使用最關鍵的一點就是計算和的值。可以看到回調里可以拿到,也就是對象的實例,當等于代表滾到了底部,所以這里加上代表快要滾動底部已經看到了加載更多。開始任何意見和建議歡迎,團隊會第一時間反饋。 原文鏈接:https://github.com/AlloyTeam/AlloyTouch/wiki/kandian 先驗貨 showImg(https://...
閱讀 3274·2023-04-25 18:03
閱讀 1143·2021-11-15 11:38
閱讀 5522·2021-10-25 09:45
閱讀 840·2021-09-24 09:48
閱讀 2272·2021-09-22 15:34
閱讀 1734·2019-08-30 15:44
閱讀 2675·2019-08-30 13:12
閱讀 604·2019-08-29 16:05