vue2實現(xiàn)帶有阻尼下拉加載的功能
在vue中 需要綁定觸發(fā)的事件
<div
id="testchatBox"
class="chatWrap"
:style="{paddingTop: chatScroollTop + 'px'}"
@touchstart="touchStart"
@touchmove="touchMove"
@touchend="touchEnd">
</div>
代碼片段使用到了三個回調(diào)函數(shù):
- touchstart: 手指觸摸到屏幕的那一刻的時候
- touchmove: 手指在屏幕上移動的時候
- touchend: 手指離開屏幕的時候
從paddingTop可以看出,我們是通過控制這個容器距離的頂部的padding來實現(xiàn)下拉的效果。所以說我們的重調(diào)就是通過上面的三個回調(diào)函數(shù)來確定chatScroollTop的值。
通過chatScroollTop 這個命名就可以知道,我們這個下拉刷新是用在聊天框容器當(dāng)中.
需要使用的變量
我們需要使用這些變量:
data() {
return {
chatScroollTop: 0, // 容器距離頂部的距離
isMove: false, // 是否處于touchmove狀態(tài)
startY: 0, // 當(dāng)前手指在屏幕中的y軸值
pageScrollTop: 0, // 滾動條當(dāng)前的縱坐標(biāo)
}
}
三個回調(diào)函數(shù)對應(yīng)三個階段,而我們核心代碼也分為三個部分:
第一部分:初始化當(dāng)前容器的到頂部的距離,以及初始化當(dāng)前是否處于滑動的狀態(tài),并獲取當(dāng)前滾動條的縱坐標(biāo)。
touchStart(e) {
// e代表該事件對象,e.targetTouches[0].pageY可以拿到手指按下的 y軸點
this.startY = e.targetTouches[0].pageY
// 開啟下拉刷新狀態(tài)
this.isMove = false
this.pageScrollTop = document.documentElement && document.documentElement.scrollTop
}
第二部分:根據(jù)當(dāng)前手指當(dāng)前距離觸摸屏幕時刻的縱坐標(biāo)差來確定容器和頂部的距離。但是由于不能一直的滑動,所以給了一個0 -> 80的氛圍。為了讓滑動更加的有趣,添加了一個step步進值來調(diào)整滑動的距離比例,所謂的距離比例就是手指距離一開始的距離越遠,那么容量跟著滑動的距離就越短。實現(xiàn)一個類似阻尼的效果。
touchMove(e) {
// 這個 touchMove,只要頁面在動都會發(fā)生的,所以 touching就起作用了
// 獲取移動的距離
let diff = e.targetTouches[0].pageY - this.startY
let step = 60
if (diff > 0 && diff < 80 && this.pageScrollTop === 0) {
step++ // 越來越大
this.chatScroollTop += (diff / (step * 0.1)) // 越向下給人的阻力感越大
this.isMove = true
}
}
第三部分:手指松開之后,給一個距離頂部的距離是為了添加加載滾動條。
touchEnd() {
if(this.isMove) {
this.chatScroollTop = 40
this.downCallback() // api拉取數(shù)據(jù)
}
}
async downCallback() {
try {
// 拿數(shù)據(jù)
} catch() {}
finall{
this.chatScrollTop = 0
}
}以上就是vue2實現(xiàn)帶有阻尼下拉加載的功能的詳細內(nèi)容,更多關(guān)于vue2阻尼下拉加載的功能的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
vue使用better-scroll實現(xiàn)滑動以及左右聯(lián)動
這篇文章主要介紹了vue使用better-scroll實現(xiàn)滑動以及左右聯(lián)動,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2020-06-06
Vue項目中使用jsonp抓取跨域數(shù)據(jù)的方法
這篇文章主要介紹了Vue項目中使用jsonp抓取跨域數(shù)據(jù)的方法,本文通過實例代碼講解的非常詳細,需要的朋友可以參考下2019-11-11
Vue3 Pinia獲取全局狀態(tài)變量的實現(xiàn)方式
這篇文章主要介紹了Vue3 Pinia獲取全局狀態(tài)變量的實現(xiàn)方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-05-05
el-descriptions引入代碼中l(wèi)abel不生效問題及解決
這篇文章主要介紹了el-descriptions引入代碼中l(wèi)abel不生效問題及解決方案,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-12-12
vue3結(jié)合typescript中使用class封裝axios
這篇文章主要為大家介紹了vue3結(jié)合typescript中使用class封裝axios實現(xiàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-06-06
Vue加載讀取本地txt/json等文件的實現(xiàn)方式
這篇文章主要介紹了Vue加載讀取本地txt/json等文件的實現(xiàn)方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-10-10
Vue遞歸組件+Vuex開發(fā)樹形組件Tree--遞歸組件的簡單實現(xiàn)
這篇文章也是我自己開發(fā)的從無到有的過程,所以它可以為你提供一些Tree組件開發(fā)的思路,本文重點給大家介紹vue遞歸組件的簡單實現(xiàn),感興趣的朋友跟隨小編一起看看吧2019-04-04

