摘要:也可以采用其他的方式,如方式使用定時器的方式,的實現滑動界面刷新的效果。
1.界面上,只分成簡單的兩塊,一塊是上方的刷新文字,一塊是下方的內容,然后將上方提示內容隱藏在屏幕之外,一般由兩種方式,一種是上面遮一層,另一種是marginTop:負值將其弄出屏幕外,這里我采用的是第一種,代碼也很簡單,就隨便貼一下
.header{???? width:?100%;???? height:?1rem;這里的高度應該與刷新文字一樣高???? position:?fixed;???? z-index:?100; }
2.功能實現的重頭戲是在邏輯上,主要分成下面幾個部分
監聽事件
位置計算
控制界面變化
數據更新包
我一個一個進行分析,然后帶你們入坑。
//el為下拉的整個節點//這里為添加監聽 this.el.addEventListener("touchstart",?this.refreshTouchStart); this.el.addEventListener("touchmove",?this.refreshTouchMove); this.el.addEventListener("touchend",?this.refreshTouchEnd);//記住在不用的時候要移除監聽哦 this.el.removeEventListener("touchstart",?this.refreshTouchStart); this.el.removeEventListener("touchmove",?this.refreshTouchMovee); this.el.removeEventListener("touchend",?this.refreshTouchEnd);//具體的函數,我們直接在位置計算中看
下拉刷新的邏輯 = 當前頁面的首項在屏幕中且容器向下滑動的距離大于一定值
上拉加載的邏輯 = 當前頁面已滑動到底部
好,我們直接看具體的實現邏輯代碼
//代碼中包含界面變化和數據更新,仔細看哦 refreshTouchStart(e)?{???? let?touch?=?e.changedTouches[0];???? this.tipText?=?"下拉刷新";//下拉提示文字???? this.startY?=?touch.clientY;//獲得當前按下點的縱坐標 } refreshTouchMove(e)?{???? this.$store.commit("bottomShowFalse");//與本邏輯無關,滑動時隱藏底部作用???? let?touch?=?e.changedTouches[0];???? let?_move?=?touch.clientY?-?this.startY;//獲得滑動的距離???? this.bottomFlag?=?$(".present-box").offset().top?+ $(".present-box").height()?-?document.body.clientHeight?<=?40;//滑動到底部標識???? if?($(".present-box").offset().top?>=?this.headerHeight)?{//內容主體超出了一個頭部的距離???????? if?(_move?>?0?&&?_move?1000)?{//滑動距離>0代表下拉//<1000是為了防止神人無限拉阿拉???????????? this.el.style.marginTop?=?_move?+?"px";//根據拉的距離,實現界面上的變化(界面變化)???????????? this.moveDistance?=?touch.clientY?-?this.startY;//記錄滑動的距離,在松手后讓他滑啊滑滑回去???????????? if?(_move?>?50)?{//拉到一定程度再下拉刷新,防止誤操作???????????????? this.tipText?=?"松開即可刷新"http://上面有了???????????? }???????? } } } refreshTouchEnd()?{???? this.$store.commit("bottomShowTrue");//松開后底部就biu的出現啦???? if?(this.bottomFlag)?{//若符合上拉加載的條件,則直接進行數據更新???????? this.$emit("loadBottom");???? }???? let?that?=?this;???? if?(this.moveDistance?>?50)?{//拉了一定距離才觸發加載動作???????? this.tipText?=?"數據加載中...";???????? let?timer?=?setInterval(function?()?{???????????? that.el.style.marginTop?=?that.el.style.marginTop.split("px")[0]?-?5?+?"px";//如果拉的很長,一次性彈回去影響用戶體驗,所以先讓他彈到50的高度,然后再進行數據更新???????????? if?(Number(that.el.style.marginTop.split("px")[0])?<=?50)?{//小于50后就不進行界面變化了,先進行數據更新再變化???????????????? clearInterval(timer);???????????????? new?Promise((resolve,?reject)?=>?{???????????????????? that.$emit("loadTop",?resolve,?reject);//通知父控件,下拉刷新條件滿足了,你更新吧???????????????? }).then(()?=>?{ that.resetBox();???????????????? }).catch(()?=>?{ ?????????????????? that.resetBox();//界面恢復(也就是彈回去啦)???????????????? });??????????? }??????? },?1);//通過一個promise,讓數據更新結束后再進行界面變化。也可以采用其他的方式,如async?await方式??? ? }?else?{ this.resetBox();???? } } resetBox()?{ ????let?that?=?this;????//使用定時器的方式,biubiubiu的實現滑動界面刷新的效果。???? if?(this.moveDistance?>?0)?{ ????????let?timer?=?setInterval(function?()?{ ????????????that.el.style.marginTop?=?that.el.style.marginTop.split("px")[0]?-?1?+?"px";???????????? if?(Number(that.el.style.marginTop.split("px")[0])?<=?0)?clearInterval(timer);//這里很重要,不刪除,可能看到奇奇怪怪的東西哦???????? },?1)???? }???? this.moveDistance?=?0;???? }核心代碼就這些了,撒花完結,優化什么的,你們自己看著來咯,大佬別打我,效果圖來了嘛 我就是效果圖
這是我的github,歡迎大佬們猛戳,不定時更新
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/97565.html
摘要:前言現在網上下拉刷新,上拉加載插件一搜一大堆,如果你想用在生產環境,那你可以直接網上搜一個靠譜的,我所做的就是不依賴任何插件,一步一步把這個插件的過程寫一下,各位同學可以在此基礎上定制,沒有寫過插件的,可以了解下插件怎么寫的,整個過程定位入 前言 現在網上 下拉刷新,上拉加載 插件一搜一大堆,如果你想用在生產環境,那你可以直接網上搜一個靠譜的,我所做的就是不依賴任何插件,一步一步把這個...
摘要:前言現在網上下拉刷新,上拉加載插件一搜一大堆,如果你想用在生產環境,那你可以直接網上搜一個靠譜的,我所做的就是不依賴任何插件,一步一步把這個插件的過程寫一下,各位同學可以在此基礎上定制,沒有寫過插件的,可以了解下插件怎么寫的,整個過程定位入 前言 現在網上 下拉刷新,上拉加載 插件一搜一大堆,如果你想用在生產環境,那你可以直接網上搜一個靠譜的,我所做的就是不依賴任何插件,一步一步把這個...
摘要:最近項目要求增加一個下拉刷新的功能,自己也試著寫了一個,單總是有點卡頓。 最近項目要求增加一個下拉刷新的功能,自己也試著寫了一個,單總是有點卡頓。 于是學習了下別人的插件(ps : 既然寫不出好插件,就要會學習別人的): 官網github地址:https://github.com/mescroll/m... 1.整體預發結構 ;(function(name, definition) {...
摘要:最近項目要求增加一個下拉刷新的功能,自己也試著寫了一個,單總是有點卡頓。 最近項目要求增加一個下拉刷新的功能,自己也試著寫了一個,單總是有點卡頓。 于是學習了下別人的插件(ps : 既然寫不出好插件,就要會學習別人的): 官網github地址:https://github.com/mescroll/m... 1.整體預發結構 ;(function(name, definition) {...
閱讀 1309·2021-11-15 11:37
閱讀 2564·2021-09-22 10:56
閱讀 3391·2021-09-06 15:11
閱讀 801·2021-08-31 09:45
閱讀 2897·2021-07-28 11:16
閱讀 1806·2019-08-30 15:44
閱讀 477·2019-08-30 13:22
閱讀 3344·2019-08-30 13:18